Skip to main content

fidl_fuchsia_ui_policy/
fidl_fuchsia_ui_policy.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::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_ui_policy__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct DeviceListenerRegistryRegisterListenerRequest {
16    pub listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
20    for DeviceListenerRegistryRegisterListenerRequest
21{
22}
23
24#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
25pub struct DeviceListenerRegistryRegisterMediaButtonsListenerRequest {
26    pub listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
27}
28
29impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
30    for DeviceListenerRegistryRegisterMediaButtonsListenerRequest
31{
32}
33
34#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
35pub struct DeviceListenerRegistryRegisterTouchButtonsListenerRequest {
36    pub listener: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
37}
38
39impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
40    for DeviceListenerRegistryRegisterTouchButtonsListenerRequest
41{
42}
43
44#[derive(Debug, PartialEq)]
45pub struct MediaButtonsListenerOnEventRequest {
46    pub event: fidl_fuchsia_ui_input::MediaButtonsEvent,
47}
48
49impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
50    for MediaButtonsListenerOnEventRequest
51{
52}
53
54#[derive(Debug, PartialEq)]
55pub struct MediaButtonsListenerOnMediaButtonsEventRequest {
56    pub event: fidl_fuchsia_ui_input::MediaButtonsEvent,
57}
58
59impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
60    for MediaButtonsListenerOnMediaButtonsEventRequest
61{
62}
63
64#[derive(Debug, PartialEq)]
65pub struct TouchButtonsListenerOnEventRequest {
66    pub event: fidl_fuchsia_ui_input::TouchButtonsEvent,
67}
68
69impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
70    for TouchButtonsListenerOnEventRequest
71{
72}
73
74#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
75pub struct DeviceListenerRegistryMarker;
76
77impl fidl::endpoints::ProtocolMarker for DeviceListenerRegistryMarker {
78    type Proxy = DeviceListenerRegistryProxy;
79    type RequestStream = DeviceListenerRegistryRequestStream;
80    #[cfg(target_os = "fuchsia")]
81    type SynchronousProxy = DeviceListenerRegistrySynchronousProxy;
82
83    const DEBUG_NAME: &'static str = "fuchsia.ui.policy.DeviceListenerRegistry";
84}
85impl fidl::endpoints::DiscoverableProtocolMarker for DeviceListenerRegistryMarker {}
86
87pub trait DeviceListenerRegistryProxyInterface: Send + Sync {
88    fn r#register_media_buttons_listener(
89        &self,
90        listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
91    ) -> Result<(), fidl::Error>;
92    type RegisterListenerResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
93    fn r#register_listener(
94        &self,
95        listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
96    ) -> Self::RegisterListenerResponseFut;
97    type RegisterTouchButtonsListenerResponseFut: std::future::Future<Output = Result<(), fidl::Error>>
98        + Send;
99    fn r#register_touch_buttons_listener(
100        &self,
101        listener: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
102    ) -> Self::RegisterTouchButtonsListenerResponseFut;
103}
104#[derive(Debug)]
105#[cfg(target_os = "fuchsia")]
106pub struct DeviceListenerRegistrySynchronousProxy {
107    client: fidl::client::sync::Client,
108}
109
110#[cfg(target_os = "fuchsia")]
111impl fidl::endpoints::SynchronousProxy for DeviceListenerRegistrySynchronousProxy {
112    type Proxy = DeviceListenerRegistryProxy;
113    type Protocol = DeviceListenerRegistryMarker;
114
115    fn from_channel(inner: fidl::Channel) -> Self {
116        Self::new(inner)
117    }
118
119    fn into_channel(self) -> fidl::Channel {
120        self.client.into_channel()
121    }
122
123    fn as_channel(&self) -> &fidl::Channel {
124        self.client.as_channel()
125    }
126}
127
128#[cfg(target_os = "fuchsia")]
129impl DeviceListenerRegistrySynchronousProxy {
130    pub fn new(channel: fidl::Channel) -> Self {
131        Self { client: fidl::client::sync::Client::new(channel) }
132    }
133
134    pub fn into_channel(self) -> fidl::Channel {
135        self.client.into_channel()
136    }
137
138    /// Waits until an event arrives and returns it. It is safe for other
139    /// threads to make concurrent requests while waiting for an event.
140    pub fn wait_for_event(
141        &self,
142        deadline: zx::MonotonicInstant,
143    ) -> Result<DeviceListenerRegistryEvent, fidl::Error> {
144        DeviceListenerRegistryEvent::decode(
145            self.client.wait_for_event::<DeviceListenerRegistryMarker>(deadline)?,
146        )
147    }
148
149    /// Registers a listener to receive media button related events, such as
150    /// changes from volume buttons and mute switches.
151    pub fn r#register_media_buttons_listener(
152        &self,
153        mut listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
154    ) -> Result<(), fidl::Error> {
155        self.client.send::<DeviceListenerRegistryRegisterMediaButtonsListenerRequest>(
156            (listener,),
157            0x3826318765c72e70,
158            fidl::encoding::DynamicFlags::empty(),
159        )
160    }
161
162    /// Registers a listener to receive media button related events, such as
163    /// changes from volume buttons and mute switches.
164    /// On registration, the `listener` receives the last media button event that
165    /// occurred, if one exists, and all media button events going forward.
166    pub fn r#register_listener(
167        &self,
168        mut listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
169        ___deadline: zx::MonotonicInstant,
170    ) -> Result<(), fidl::Error> {
171        let _response = self.client.send_query::<
172            DeviceListenerRegistryRegisterListenerRequest,
173            fidl::encoding::EmptyPayload,
174            DeviceListenerRegistryMarker,
175        >(
176            (listener,),
177            0x2f9e7eea89485a7b,
178            fidl::encoding::DynamicFlags::empty(),
179            ___deadline,
180        )?;
181        Ok(_response)
182    }
183
184    /// Registers a listener to receive touch button related events.
185    /// On registration, the `listener` receives the last touch button event that
186    /// occurred, if one exists, and all touch button events going forward.
187    pub fn r#register_touch_buttons_listener(
188        &self,
189        mut listener: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
190        ___deadline: zx::MonotonicInstant,
191    ) -> Result<(), fidl::Error> {
192        let _response = self.client.send_query::<
193            DeviceListenerRegistryRegisterTouchButtonsListenerRequest,
194            fidl::encoding::EmptyPayload,
195            DeviceListenerRegistryMarker,
196        >(
197            (listener,),
198            0x1625430c46f9b84b,
199            fidl::encoding::DynamicFlags::empty(),
200            ___deadline,
201        )?;
202        Ok(_response)
203    }
204}
205
206#[cfg(target_os = "fuchsia")]
207impl From<DeviceListenerRegistrySynchronousProxy> for zx::NullableHandle {
208    fn from(value: DeviceListenerRegistrySynchronousProxy) -> Self {
209        value.into_channel().into()
210    }
211}
212
213#[cfg(target_os = "fuchsia")]
214impl From<fidl::Channel> for DeviceListenerRegistrySynchronousProxy {
215    fn from(value: fidl::Channel) -> Self {
216        Self::new(value)
217    }
218}
219
220#[cfg(target_os = "fuchsia")]
221impl fidl::endpoints::FromClient for DeviceListenerRegistrySynchronousProxy {
222    type Protocol = DeviceListenerRegistryMarker;
223
224    fn from_client(value: fidl::endpoints::ClientEnd<DeviceListenerRegistryMarker>) -> Self {
225        Self::new(value.into_channel())
226    }
227}
228
229#[derive(Debug, Clone)]
230pub struct DeviceListenerRegistryProxy {
231    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
232}
233
234impl fidl::endpoints::Proxy for DeviceListenerRegistryProxy {
235    type Protocol = DeviceListenerRegistryMarker;
236
237    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
238        Self::new(inner)
239    }
240
241    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
242        self.client.into_channel().map_err(|client| Self { client })
243    }
244
245    fn as_channel(&self) -> &::fidl::AsyncChannel {
246        self.client.as_channel()
247    }
248}
249
250impl DeviceListenerRegistryProxy {
251    /// Create a new Proxy for fuchsia.ui.policy/DeviceListenerRegistry.
252    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
253        let protocol_name =
254            <DeviceListenerRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
255        Self { client: fidl::client::Client::new(channel, protocol_name) }
256    }
257
258    /// Get a Stream of events from the remote end of the protocol.
259    ///
260    /// # Panics
261    ///
262    /// Panics if the event stream was already taken.
263    pub fn take_event_stream(&self) -> DeviceListenerRegistryEventStream {
264        DeviceListenerRegistryEventStream { event_receiver: self.client.take_event_receiver() }
265    }
266
267    /// Registers a listener to receive media button related events, such as
268    /// changes from volume buttons and mute switches.
269    pub fn r#register_media_buttons_listener(
270        &self,
271        mut listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
272    ) -> Result<(), fidl::Error> {
273        DeviceListenerRegistryProxyInterface::r#register_media_buttons_listener(self, listener)
274    }
275
276    /// Registers a listener to receive media button related events, such as
277    /// changes from volume buttons and mute switches.
278    /// On registration, the `listener` receives the last media button event that
279    /// occurred, if one exists, and all media button events going forward.
280    pub fn r#register_listener(
281        &self,
282        mut listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
283    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
284        DeviceListenerRegistryProxyInterface::r#register_listener(self, listener)
285    }
286
287    /// Registers a listener to receive touch button related events.
288    /// On registration, the `listener` receives the last touch button event that
289    /// occurred, if one exists, and all touch button events going forward.
290    pub fn r#register_touch_buttons_listener(
291        &self,
292        mut listener: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
293    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
294        DeviceListenerRegistryProxyInterface::r#register_touch_buttons_listener(self, listener)
295    }
296}
297
298impl DeviceListenerRegistryProxyInterface for DeviceListenerRegistryProxy {
299    fn r#register_media_buttons_listener(
300        &self,
301        mut listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
302    ) -> Result<(), fidl::Error> {
303        self.client.send::<DeviceListenerRegistryRegisterMediaButtonsListenerRequest>(
304            (listener,),
305            0x3826318765c72e70,
306            fidl::encoding::DynamicFlags::empty(),
307        )
308    }
309
310    type RegisterListenerResponseFut =
311        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
312    fn r#register_listener(
313        &self,
314        mut listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
315    ) -> Self::RegisterListenerResponseFut {
316        fn _decode(
317            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
318        ) -> Result<(), fidl::Error> {
319            let _response = fidl::client::decode_transaction_body::<
320                fidl::encoding::EmptyPayload,
321                fidl::encoding::DefaultFuchsiaResourceDialect,
322                0x2f9e7eea89485a7b,
323            >(_buf?)?;
324            Ok(_response)
325        }
326        self.client.send_query_and_decode::<DeviceListenerRegistryRegisterListenerRequest, ()>(
327            (listener,),
328            0x2f9e7eea89485a7b,
329            fidl::encoding::DynamicFlags::empty(),
330            _decode,
331        )
332    }
333
334    type RegisterTouchButtonsListenerResponseFut =
335        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
336    fn r#register_touch_buttons_listener(
337        &self,
338        mut listener: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
339    ) -> Self::RegisterTouchButtonsListenerResponseFut {
340        fn _decode(
341            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
342        ) -> Result<(), fidl::Error> {
343            let _response = fidl::client::decode_transaction_body::<
344                fidl::encoding::EmptyPayload,
345                fidl::encoding::DefaultFuchsiaResourceDialect,
346                0x1625430c46f9b84b,
347            >(_buf?)?;
348            Ok(_response)
349        }
350        self.client
351            .send_query_and_decode::<DeviceListenerRegistryRegisterTouchButtonsListenerRequest, ()>(
352                (listener,),
353                0x1625430c46f9b84b,
354                fidl::encoding::DynamicFlags::empty(),
355                _decode,
356            )
357    }
358}
359
360pub struct DeviceListenerRegistryEventStream {
361    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
362}
363
364impl std::marker::Unpin for DeviceListenerRegistryEventStream {}
365
366impl futures::stream::FusedStream for DeviceListenerRegistryEventStream {
367    fn is_terminated(&self) -> bool {
368        self.event_receiver.is_terminated()
369    }
370}
371
372impl futures::Stream for DeviceListenerRegistryEventStream {
373    type Item = Result<DeviceListenerRegistryEvent, fidl::Error>;
374
375    fn poll_next(
376        mut self: std::pin::Pin<&mut Self>,
377        cx: &mut std::task::Context<'_>,
378    ) -> std::task::Poll<Option<Self::Item>> {
379        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
380            &mut self.event_receiver,
381            cx
382        )?) {
383            Some(buf) => std::task::Poll::Ready(Some(DeviceListenerRegistryEvent::decode(buf))),
384            None => std::task::Poll::Ready(None),
385        }
386    }
387}
388
389#[derive(Debug)]
390pub enum DeviceListenerRegistryEvent {}
391
392impl DeviceListenerRegistryEvent {
393    /// Decodes a message buffer as a [`DeviceListenerRegistryEvent`].
394    fn decode(
395        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
396    ) -> Result<DeviceListenerRegistryEvent, fidl::Error> {
397        let (bytes, _handles) = buf.split_mut();
398        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
399        debug_assert_eq!(tx_header.tx_id, 0);
400        match tx_header.ordinal {
401            _ => Err(fidl::Error::UnknownOrdinal {
402                ordinal: tx_header.ordinal,
403                protocol_name:
404                    <DeviceListenerRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
405            }),
406        }
407    }
408}
409
410/// A Stream of incoming requests for fuchsia.ui.policy/DeviceListenerRegistry.
411pub struct DeviceListenerRegistryRequestStream {
412    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
413    is_terminated: bool,
414}
415
416impl std::marker::Unpin for DeviceListenerRegistryRequestStream {}
417
418impl futures::stream::FusedStream for DeviceListenerRegistryRequestStream {
419    fn is_terminated(&self) -> bool {
420        self.is_terminated
421    }
422}
423
424impl fidl::endpoints::RequestStream for DeviceListenerRegistryRequestStream {
425    type Protocol = DeviceListenerRegistryMarker;
426    type ControlHandle = DeviceListenerRegistryControlHandle;
427
428    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
429        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
430    }
431
432    fn control_handle(&self) -> Self::ControlHandle {
433        DeviceListenerRegistryControlHandle { inner: self.inner.clone() }
434    }
435
436    fn into_inner(
437        self,
438    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
439    {
440        (self.inner, self.is_terminated)
441    }
442
443    fn from_inner(
444        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
445        is_terminated: bool,
446    ) -> Self {
447        Self { inner, is_terminated }
448    }
449}
450
451impl futures::Stream for DeviceListenerRegistryRequestStream {
452    type Item = Result<DeviceListenerRegistryRequest, fidl::Error>;
453
454    fn poll_next(
455        mut self: std::pin::Pin<&mut Self>,
456        cx: &mut std::task::Context<'_>,
457    ) -> std::task::Poll<Option<Self::Item>> {
458        let this = &mut *self;
459        if this.inner.check_shutdown(cx) {
460            this.is_terminated = true;
461            return std::task::Poll::Ready(None);
462        }
463        if this.is_terminated {
464            panic!("polled DeviceListenerRegistryRequestStream after completion");
465        }
466        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
467            |bytes, handles| {
468                match this.inner.channel().read_etc(cx, bytes, handles) {
469                    std::task::Poll::Ready(Ok(())) => {}
470                    std::task::Poll::Pending => return std::task::Poll::Pending,
471                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
472                        this.is_terminated = true;
473                        return std::task::Poll::Ready(None);
474                    }
475                    std::task::Poll::Ready(Err(e)) => {
476                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
477                            e.into(),
478                        ))));
479                    }
480                }
481
482                // A message has been received from the channel
483                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
484
485                std::task::Poll::Ready(Some(match header.ordinal {
486                0x3826318765c72e70 => {
487                    header.validate_request_tx_id(fidl::MethodType::OneWay)?;
488                    let mut req = fidl::new_empty!(DeviceListenerRegistryRegisterMediaButtonsListenerRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
489                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceListenerRegistryRegisterMediaButtonsListenerRequest>(&header, _body_bytes, handles, &mut req)?;
490                    let control_handle = DeviceListenerRegistryControlHandle {
491                        inner: this.inner.clone(),
492                    };
493                    Ok(DeviceListenerRegistryRequest::RegisterMediaButtonsListener {listener: req.listener,
494
495                        control_handle,
496                    })
497                }
498                0x2f9e7eea89485a7b => {
499                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
500                    let mut req = fidl::new_empty!(DeviceListenerRegistryRegisterListenerRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
501                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceListenerRegistryRegisterListenerRequest>(&header, _body_bytes, handles, &mut req)?;
502                    let control_handle = DeviceListenerRegistryControlHandle {
503                        inner: this.inner.clone(),
504                    };
505                    Ok(DeviceListenerRegistryRequest::RegisterListener {listener: req.listener,
506
507                        responder: DeviceListenerRegistryRegisterListenerResponder {
508                            control_handle: std::mem::ManuallyDrop::new(control_handle),
509                            tx_id: header.tx_id,
510                        },
511                    })
512                }
513                0x1625430c46f9b84b => {
514                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
515                    let mut req = fidl::new_empty!(DeviceListenerRegistryRegisterTouchButtonsListenerRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
516                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceListenerRegistryRegisterTouchButtonsListenerRequest>(&header, _body_bytes, handles, &mut req)?;
517                    let control_handle = DeviceListenerRegistryControlHandle {
518                        inner: this.inner.clone(),
519                    };
520                    Ok(DeviceListenerRegistryRequest::RegisterTouchButtonsListener {listener: req.listener,
521
522                        responder: DeviceListenerRegistryRegisterTouchButtonsListenerResponder {
523                            control_handle: std::mem::ManuallyDrop::new(control_handle),
524                            tx_id: header.tx_id,
525                        },
526                    })
527                }
528                _ => Err(fidl::Error::UnknownOrdinal {
529                    ordinal: header.ordinal,
530                    protocol_name: <DeviceListenerRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
531                }),
532            }))
533            },
534        )
535    }
536}
537
538/// Service for exposing state and events of devices, such as media buttons.
539#[derive(Debug)]
540pub enum DeviceListenerRegistryRequest {
541    /// Registers a listener to receive media button related events, such as
542    /// changes from volume buttons and mute switches.
543    RegisterMediaButtonsListener {
544        listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
545        control_handle: DeviceListenerRegistryControlHandle,
546    },
547    /// Registers a listener to receive media button related events, such as
548    /// changes from volume buttons and mute switches.
549    /// On registration, the `listener` receives the last media button event that
550    /// occurred, if one exists, and all media button events going forward.
551    RegisterListener {
552        listener: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
553        responder: DeviceListenerRegistryRegisterListenerResponder,
554    },
555    /// Registers a listener to receive touch button related events.
556    /// On registration, the `listener` receives the last touch button event that
557    /// occurred, if one exists, and all touch button events going forward.
558    RegisterTouchButtonsListener {
559        listener: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
560        responder: DeviceListenerRegistryRegisterTouchButtonsListenerResponder,
561    },
562}
563
564impl DeviceListenerRegistryRequest {
565    #[allow(irrefutable_let_patterns)]
566    pub fn into_register_media_buttons_listener(
567        self,
568    ) -> Option<(
569        fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
570        DeviceListenerRegistryControlHandle,
571    )> {
572        if let DeviceListenerRegistryRequest::RegisterMediaButtonsListener {
573            listener,
574            control_handle,
575        } = self
576        {
577            Some((listener, control_handle))
578        } else {
579            None
580        }
581    }
582
583    #[allow(irrefutable_let_patterns)]
584    pub fn into_register_listener(
585        self,
586    ) -> Option<(
587        fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
588        DeviceListenerRegistryRegisterListenerResponder,
589    )> {
590        if let DeviceListenerRegistryRequest::RegisterListener { listener, responder } = self {
591            Some((listener, responder))
592        } else {
593            None
594        }
595    }
596
597    #[allow(irrefutable_let_patterns)]
598    pub fn into_register_touch_buttons_listener(
599        self,
600    ) -> Option<(
601        fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
602        DeviceListenerRegistryRegisterTouchButtonsListenerResponder,
603    )> {
604        if let DeviceListenerRegistryRequest::RegisterTouchButtonsListener { listener, responder } =
605            self
606        {
607            Some((listener, responder))
608        } else {
609            None
610        }
611    }
612
613    /// Name of the method defined in FIDL
614    pub fn method_name(&self) -> &'static str {
615        match *self {
616            DeviceListenerRegistryRequest::RegisterMediaButtonsListener { .. } => {
617                "register_media_buttons_listener"
618            }
619            DeviceListenerRegistryRequest::RegisterListener { .. } => "register_listener",
620            DeviceListenerRegistryRequest::RegisterTouchButtonsListener { .. } => {
621                "register_touch_buttons_listener"
622            }
623        }
624    }
625}
626
627#[derive(Debug, Clone)]
628pub struct DeviceListenerRegistryControlHandle {
629    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
630}
631
632impl fidl::endpoints::ControlHandle for DeviceListenerRegistryControlHandle {
633    fn shutdown(&self) {
634        self.inner.shutdown()
635    }
636
637    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
638        self.inner.shutdown_with_epitaph(status)
639    }
640
641    fn is_closed(&self) -> bool {
642        self.inner.channel().is_closed()
643    }
644    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
645        self.inner.channel().on_closed()
646    }
647
648    #[cfg(target_os = "fuchsia")]
649    fn signal_peer(
650        &self,
651        clear_mask: zx::Signals,
652        set_mask: zx::Signals,
653    ) -> Result<(), zx_status::Status> {
654        use fidl::Peered;
655        self.inner.channel().signal_peer(clear_mask, set_mask)
656    }
657}
658
659impl DeviceListenerRegistryControlHandle {}
660
661#[must_use = "FIDL methods require a response to be sent"]
662#[derive(Debug)]
663pub struct DeviceListenerRegistryRegisterListenerResponder {
664    control_handle: std::mem::ManuallyDrop<DeviceListenerRegistryControlHandle>,
665    tx_id: u32,
666}
667
668/// Set the the channel to be shutdown (see [`DeviceListenerRegistryControlHandle::shutdown`])
669/// if the responder is dropped without sending a response, so that the client
670/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
671impl std::ops::Drop for DeviceListenerRegistryRegisterListenerResponder {
672    fn drop(&mut self) {
673        self.control_handle.shutdown();
674        // Safety: drops once, never accessed again
675        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
676    }
677}
678
679impl fidl::endpoints::Responder for DeviceListenerRegistryRegisterListenerResponder {
680    type ControlHandle = DeviceListenerRegistryControlHandle;
681
682    fn control_handle(&self) -> &DeviceListenerRegistryControlHandle {
683        &self.control_handle
684    }
685
686    fn drop_without_shutdown(mut self) {
687        // Safety: drops once, never accessed again due to mem::forget
688        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
689        // Prevent Drop from running (which would shut down the channel)
690        std::mem::forget(self);
691    }
692}
693
694impl DeviceListenerRegistryRegisterListenerResponder {
695    /// Sends a response to the FIDL transaction.
696    ///
697    /// Sets the channel to shutdown if an error occurs.
698    pub fn send(self) -> Result<(), fidl::Error> {
699        let _result = self.send_raw();
700        if _result.is_err() {
701            self.control_handle.shutdown();
702        }
703        self.drop_without_shutdown();
704        _result
705    }
706
707    /// Similar to "send" but does not shutdown the channel if an error occurs.
708    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
709        let _result = self.send_raw();
710        self.drop_without_shutdown();
711        _result
712    }
713
714    fn send_raw(&self) -> Result<(), fidl::Error> {
715        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
716            (),
717            self.tx_id,
718            0x2f9e7eea89485a7b,
719            fidl::encoding::DynamicFlags::empty(),
720        )
721    }
722}
723
724#[must_use = "FIDL methods require a response to be sent"]
725#[derive(Debug)]
726pub struct DeviceListenerRegistryRegisterTouchButtonsListenerResponder {
727    control_handle: std::mem::ManuallyDrop<DeviceListenerRegistryControlHandle>,
728    tx_id: u32,
729}
730
731/// Set the the channel to be shutdown (see [`DeviceListenerRegistryControlHandle::shutdown`])
732/// if the responder is dropped without sending a response, so that the client
733/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
734impl std::ops::Drop for DeviceListenerRegistryRegisterTouchButtonsListenerResponder {
735    fn drop(&mut self) {
736        self.control_handle.shutdown();
737        // Safety: drops once, never accessed again
738        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
739    }
740}
741
742impl fidl::endpoints::Responder for DeviceListenerRegistryRegisterTouchButtonsListenerResponder {
743    type ControlHandle = DeviceListenerRegistryControlHandle;
744
745    fn control_handle(&self) -> &DeviceListenerRegistryControlHandle {
746        &self.control_handle
747    }
748
749    fn drop_without_shutdown(mut self) {
750        // Safety: drops once, never accessed again due to mem::forget
751        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
752        // Prevent Drop from running (which would shut down the channel)
753        std::mem::forget(self);
754    }
755}
756
757impl DeviceListenerRegistryRegisterTouchButtonsListenerResponder {
758    /// Sends a response to the FIDL transaction.
759    ///
760    /// Sets the channel to shutdown if an error occurs.
761    pub fn send(self) -> Result<(), fidl::Error> {
762        let _result = self.send_raw();
763        if _result.is_err() {
764            self.control_handle.shutdown();
765        }
766        self.drop_without_shutdown();
767        _result
768    }
769
770    /// Similar to "send" but does not shutdown the channel if an error occurs.
771    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
772        let _result = self.send_raw();
773        self.drop_without_shutdown();
774        _result
775    }
776
777    fn send_raw(&self) -> Result<(), fidl::Error> {
778        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
779            (),
780            self.tx_id,
781            0x1625430c46f9b84b,
782            fidl::encoding::DynamicFlags::empty(),
783        )
784    }
785}
786
787#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
788pub struct DisplayBacklightMarker;
789
790impl fidl::endpoints::ProtocolMarker for DisplayBacklightMarker {
791    type Proxy = DisplayBacklightProxy;
792    type RequestStream = DisplayBacklightRequestStream;
793    #[cfg(target_os = "fuchsia")]
794    type SynchronousProxy = DisplayBacklightSynchronousProxy;
795
796    const DEBUG_NAME: &'static str = "fuchsia.ui.policy.DisplayBacklight";
797}
798impl fidl::endpoints::DiscoverableProtocolMarker for DisplayBacklightMarker {}
799
800pub trait DisplayBacklightProxyInterface: Send + Sync {
801    type SetMinimumRgbResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
802    fn r#set_minimum_rgb(&self, minimum_rgb: u8) -> Self::SetMinimumRgbResponseFut;
803}
804#[derive(Debug)]
805#[cfg(target_os = "fuchsia")]
806pub struct DisplayBacklightSynchronousProxy {
807    client: fidl::client::sync::Client,
808}
809
810#[cfg(target_os = "fuchsia")]
811impl fidl::endpoints::SynchronousProxy for DisplayBacklightSynchronousProxy {
812    type Proxy = DisplayBacklightProxy;
813    type Protocol = DisplayBacklightMarker;
814
815    fn from_channel(inner: fidl::Channel) -> Self {
816        Self::new(inner)
817    }
818
819    fn into_channel(self) -> fidl::Channel {
820        self.client.into_channel()
821    }
822
823    fn as_channel(&self) -> &fidl::Channel {
824        self.client.as_channel()
825    }
826}
827
828#[cfg(target_os = "fuchsia")]
829impl DisplayBacklightSynchronousProxy {
830    pub fn new(channel: fidl::Channel) -> Self {
831        Self { client: fidl::client::sync::Client::new(channel) }
832    }
833
834    pub fn into_channel(self) -> fidl::Channel {
835        self.client.into_channel()
836    }
837
838    /// Waits until an event arrives and returns it. It is safe for other
839    /// threads to make concurrent requests while waiting for an event.
840    pub fn wait_for_event(
841        &self,
842        deadline: zx::MonotonicInstant,
843    ) -> Result<DisplayBacklightEvent, fidl::Error> {
844        DisplayBacklightEvent::decode(
845            self.client.wait_for_event::<DisplayBacklightMarker>(deadline)?,
846        )
847    }
848
849    /// Submits a new minimum color channel value for display backlight.
850    ///
851    /// The valid range for a minimum value is [0, 255] (inclusive).  For a new
852    /// minimum value M, each color channel's range will be limited to [M, 255].
853    ///
854    /// Flow control: The caller is allowed at most one in-flight
855    /// |SetMinimumRgb| at at time. Subsequent calls must wait until the
856    /// acknowledgment returns. Non-compliance results in channel closure.
857    pub fn r#set_minimum_rgb(
858        &self,
859        mut minimum_rgb: u8,
860        ___deadline: zx::MonotonicInstant,
861    ) -> Result<(), fidl::Error> {
862        let _response = self.client.send_query::<
863            DisplayBacklightSetMinimumRgbRequest,
864            fidl::encoding::EmptyPayload,
865            DisplayBacklightMarker,
866        >(
867            (minimum_rgb,),
868            0x25604347bb8a1ca3,
869            fidl::encoding::DynamicFlags::empty(),
870            ___deadline,
871        )?;
872        Ok(_response)
873    }
874}
875
876#[cfg(target_os = "fuchsia")]
877impl From<DisplayBacklightSynchronousProxy> for zx::NullableHandle {
878    fn from(value: DisplayBacklightSynchronousProxy) -> Self {
879        value.into_channel().into()
880    }
881}
882
883#[cfg(target_os = "fuchsia")]
884impl From<fidl::Channel> for DisplayBacklightSynchronousProxy {
885    fn from(value: fidl::Channel) -> Self {
886        Self::new(value)
887    }
888}
889
890#[cfg(target_os = "fuchsia")]
891impl fidl::endpoints::FromClient for DisplayBacklightSynchronousProxy {
892    type Protocol = DisplayBacklightMarker;
893
894    fn from_client(value: fidl::endpoints::ClientEnd<DisplayBacklightMarker>) -> Self {
895        Self::new(value.into_channel())
896    }
897}
898
899#[derive(Debug, Clone)]
900pub struct DisplayBacklightProxy {
901    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
902}
903
904impl fidl::endpoints::Proxy for DisplayBacklightProxy {
905    type Protocol = DisplayBacklightMarker;
906
907    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
908        Self::new(inner)
909    }
910
911    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
912        self.client.into_channel().map_err(|client| Self { client })
913    }
914
915    fn as_channel(&self) -> &::fidl::AsyncChannel {
916        self.client.as_channel()
917    }
918}
919
920impl DisplayBacklightProxy {
921    /// Create a new Proxy for fuchsia.ui.policy/DisplayBacklight.
922    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
923        let protocol_name = <DisplayBacklightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
924        Self { client: fidl::client::Client::new(channel, protocol_name) }
925    }
926
927    /// Get a Stream of events from the remote end of the protocol.
928    ///
929    /// # Panics
930    ///
931    /// Panics if the event stream was already taken.
932    pub fn take_event_stream(&self) -> DisplayBacklightEventStream {
933        DisplayBacklightEventStream { event_receiver: self.client.take_event_receiver() }
934    }
935
936    /// Submits a new minimum color channel value for display backlight.
937    ///
938    /// The valid range for a minimum value is [0, 255] (inclusive).  For a new
939    /// minimum value M, each color channel's range will be limited to [M, 255].
940    ///
941    /// Flow control: The caller is allowed at most one in-flight
942    /// |SetMinimumRgb| at at time. Subsequent calls must wait until the
943    /// acknowledgment returns. Non-compliance results in channel closure.
944    pub fn r#set_minimum_rgb(
945        &self,
946        mut minimum_rgb: u8,
947    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
948        DisplayBacklightProxyInterface::r#set_minimum_rgb(self, minimum_rgb)
949    }
950}
951
952impl DisplayBacklightProxyInterface for DisplayBacklightProxy {
953    type SetMinimumRgbResponseFut =
954        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
955    fn r#set_minimum_rgb(&self, mut minimum_rgb: u8) -> Self::SetMinimumRgbResponseFut {
956        fn _decode(
957            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
958        ) -> Result<(), fidl::Error> {
959            let _response = fidl::client::decode_transaction_body::<
960                fidl::encoding::EmptyPayload,
961                fidl::encoding::DefaultFuchsiaResourceDialect,
962                0x25604347bb8a1ca3,
963            >(_buf?)?;
964            Ok(_response)
965        }
966        self.client.send_query_and_decode::<DisplayBacklightSetMinimumRgbRequest, ()>(
967            (minimum_rgb,),
968            0x25604347bb8a1ca3,
969            fidl::encoding::DynamicFlags::empty(),
970            _decode,
971        )
972    }
973}
974
975pub struct DisplayBacklightEventStream {
976    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
977}
978
979impl std::marker::Unpin for DisplayBacklightEventStream {}
980
981impl futures::stream::FusedStream for DisplayBacklightEventStream {
982    fn is_terminated(&self) -> bool {
983        self.event_receiver.is_terminated()
984    }
985}
986
987impl futures::Stream for DisplayBacklightEventStream {
988    type Item = Result<DisplayBacklightEvent, fidl::Error>;
989
990    fn poll_next(
991        mut self: std::pin::Pin<&mut Self>,
992        cx: &mut std::task::Context<'_>,
993    ) -> std::task::Poll<Option<Self::Item>> {
994        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
995            &mut self.event_receiver,
996            cx
997        )?) {
998            Some(buf) => std::task::Poll::Ready(Some(DisplayBacklightEvent::decode(buf))),
999            None => std::task::Poll::Ready(None),
1000        }
1001    }
1002}
1003
1004#[derive(Debug)]
1005pub enum DisplayBacklightEvent {}
1006
1007impl DisplayBacklightEvent {
1008    /// Decodes a message buffer as a [`DisplayBacklightEvent`].
1009    fn decode(
1010        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1011    ) -> Result<DisplayBacklightEvent, fidl::Error> {
1012        let (bytes, _handles) = buf.split_mut();
1013        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1014        debug_assert_eq!(tx_header.tx_id, 0);
1015        match tx_header.ordinal {
1016            _ => Err(fidl::Error::UnknownOrdinal {
1017                ordinal: tx_header.ordinal,
1018                protocol_name:
1019                    <DisplayBacklightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1020            }),
1021        }
1022    }
1023}
1024
1025/// A Stream of incoming requests for fuchsia.ui.policy/DisplayBacklight.
1026pub struct DisplayBacklightRequestStream {
1027    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1028    is_terminated: bool,
1029}
1030
1031impl std::marker::Unpin for DisplayBacklightRequestStream {}
1032
1033impl futures::stream::FusedStream for DisplayBacklightRequestStream {
1034    fn is_terminated(&self) -> bool {
1035        self.is_terminated
1036    }
1037}
1038
1039impl fidl::endpoints::RequestStream for DisplayBacklightRequestStream {
1040    type Protocol = DisplayBacklightMarker;
1041    type ControlHandle = DisplayBacklightControlHandle;
1042
1043    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1044        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1045    }
1046
1047    fn control_handle(&self) -> Self::ControlHandle {
1048        DisplayBacklightControlHandle { inner: self.inner.clone() }
1049    }
1050
1051    fn into_inner(
1052        self,
1053    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1054    {
1055        (self.inner, self.is_terminated)
1056    }
1057
1058    fn from_inner(
1059        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1060        is_terminated: bool,
1061    ) -> Self {
1062        Self { inner, is_terminated }
1063    }
1064}
1065
1066impl futures::Stream for DisplayBacklightRequestStream {
1067    type Item = Result<DisplayBacklightRequest, fidl::Error>;
1068
1069    fn poll_next(
1070        mut self: std::pin::Pin<&mut Self>,
1071        cx: &mut std::task::Context<'_>,
1072    ) -> std::task::Poll<Option<Self::Item>> {
1073        let this = &mut *self;
1074        if this.inner.check_shutdown(cx) {
1075            this.is_terminated = true;
1076            return std::task::Poll::Ready(None);
1077        }
1078        if this.is_terminated {
1079            panic!("polled DisplayBacklightRequestStream after completion");
1080        }
1081        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1082            |bytes, handles| {
1083                match this.inner.channel().read_etc(cx, bytes, handles) {
1084                    std::task::Poll::Ready(Ok(())) => {}
1085                    std::task::Poll::Pending => return std::task::Poll::Pending,
1086                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1087                        this.is_terminated = true;
1088                        return std::task::Poll::Ready(None);
1089                    }
1090                    std::task::Poll::Ready(Err(e)) => {
1091                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1092                            e.into(),
1093                        ))));
1094                    }
1095                }
1096
1097                // A message has been received from the channel
1098                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1099
1100                std::task::Poll::Ready(Some(match header.ordinal {
1101                    0x25604347bb8a1ca3 => {
1102                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1103                        let mut req = fidl::new_empty!(
1104                            DisplayBacklightSetMinimumRgbRequest,
1105                            fidl::encoding::DefaultFuchsiaResourceDialect
1106                        );
1107                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DisplayBacklightSetMinimumRgbRequest>(&header, _body_bytes, handles, &mut req)?;
1108                        let control_handle =
1109                            DisplayBacklightControlHandle { inner: this.inner.clone() };
1110                        Ok(DisplayBacklightRequest::SetMinimumRgb {
1111                            minimum_rgb: req.minimum_rgb,
1112
1113                            responder: DisplayBacklightSetMinimumRgbResponder {
1114                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1115                                tx_id: header.tx_id,
1116                            },
1117                        })
1118                    }
1119                    _ => Err(fidl::Error::UnknownOrdinal {
1120                        ordinal: header.ordinal,
1121                        protocol_name:
1122                            <DisplayBacklightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1123                    }),
1124                }))
1125            },
1126        )
1127    }
1128}
1129
1130/// Manipulates global policy for display backlight. Serves as the main "front
1131/// end" interface for usage by UX components; other protocols (such as
1132/// fuchsia.ui.scenic.Session and fuchsia.hardware.display.Controller) act as
1133/// implementation.
1134///
1135/// Global Scope. All displays, in all display controllers, are affected uniformly.
1136///
1137/// Effect Timing. This protocol does not guarantee a deadline by which the
1138/// minimum value is applied to a display; it is best effort.
1139///
1140/// Multiple clients. This protocol does not guarantee unique access to
1141/// manipulate display backlight functionality.
1142///
1143/// Reference. Related to fuchsia.hardware.display.Controller.
1144#[derive(Debug)]
1145pub enum DisplayBacklightRequest {
1146    /// Submits a new minimum color channel value for display backlight.
1147    ///
1148    /// The valid range for a minimum value is [0, 255] (inclusive).  For a new
1149    /// minimum value M, each color channel's range will be limited to [M, 255].
1150    ///
1151    /// Flow control: The caller is allowed at most one in-flight
1152    /// |SetMinimumRgb| at at time. Subsequent calls must wait until the
1153    /// acknowledgment returns. Non-compliance results in channel closure.
1154    SetMinimumRgb { minimum_rgb: u8, responder: DisplayBacklightSetMinimumRgbResponder },
1155}
1156
1157impl DisplayBacklightRequest {
1158    #[allow(irrefutable_let_patterns)]
1159    pub fn into_set_minimum_rgb(self) -> Option<(u8, DisplayBacklightSetMinimumRgbResponder)> {
1160        if let DisplayBacklightRequest::SetMinimumRgb { minimum_rgb, responder } = self {
1161            Some((minimum_rgb, responder))
1162        } else {
1163            None
1164        }
1165    }
1166
1167    /// Name of the method defined in FIDL
1168    pub fn method_name(&self) -> &'static str {
1169        match *self {
1170            DisplayBacklightRequest::SetMinimumRgb { .. } => "set_minimum_rgb",
1171        }
1172    }
1173}
1174
1175#[derive(Debug, Clone)]
1176pub struct DisplayBacklightControlHandle {
1177    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1178}
1179
1180impl fidl::endpoints::ControlHandle for DisplayBacklightControlHandle {
1181    fn shutdown(&self) {
1182        self.inner.shutdown()
1183    }
1184
1185    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1186        self.inner.shutdown_with_epitaph(status)
1187    }
1188
1189    fn is_closed(&self) -> bool {
1190        self.inner.channel().is_closed()
1191    }
1192    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1193        self.inner.channel().on_closed()
1194    }
1195
1196    #[cfg(target_os = "fuchsia")]
1197    fn signal_peer(
1198        &self,
1199        clear_mask: zx::Signals,
1200        set_mask: zx::Signals,
1201    ) -> Result<(), zx_status::Status> {
1202        use fidl::Peered;
1203        self.inner.channel().signal_peer(clear_mask, set_mask)
1204    }
1205}
1206
1207impl DisplayBacklightControlHandle {}
1208
1209#[must_use = "FIDL methods require a response to be sent"]
1210#[derive(Debug)]
1211pub struct DisplayBacklightSetMinimumRgbResponder {
1212    control_handle: std::mem::ManuallyDrop<DisplayBacklightControlHandle>,
1213    tx_id: u32,
1214}
1215
1216/// Set the the channel to be shutdown (see [`DisplayBacklightControlHandle::shutdown`])
1217/// if the responder is dropped without sending a response, so that the client
1218/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1219impl std::ops::Drop for DisplayBacklightSetMinimumRgbResponder {
1220    fn drop(&mut self) {
1221        self.control_handle.shutdown();
1222        // Safety: drops once, never accessed again
1223        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1224    }
1225}
1226
1227impl fidl::endpoints::Responder for DisplayBacklightSetMinimumRgbResponder {
1228    type ControlHandle = DisplayBacklightControlHandle;
1229
1230    fn control_handle(&self) -> &DisplayBacklightControlHandle {
1231        &self.control_handle
1232    }
1233
1234    fn drop_without_shutdown(mut self) {
1235        // Safety: drops once, never accessed again due to mem::forget
1236        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1237        // Prevent Drop from running (which would shut down the channel)
1238        std::mem::forget(self);
1239    }
1240}
1241
1242impl DisplayBacklightSetMinimumRgbResponder {
1243    /// Sends a response to the FIDL transaction.
1244    ///
1245    /// Sets the channel to shutdown if an error occurs.
1246    pub fn send(self) -> Result<(), fidl::Error> {
1247        let _result = self.send_raw();
1248        if _result.is_err() {
1249            self.control_handle.shutdown();
1250        }
1251        self.drop_without_shutdown();
1252        _result
1253    }
1254
1255    /// Similar to "send" but does not shutdown the channel if an error occurs.
1256    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
1257        let _result = self.send_raw();
1258        self.drop_without_shutdown();
1259        _result
1260    }
1261
1262    fn send_raw(&self) -> Result<(), fidl::Error> {
1263        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
1264            (),
1265            self.tx_id,
1266            0x25604347bb8a1ca3,
1267            fidl::encoding::DynamicFlags::empty(),
1268        )
1269    }
1270}
1271
1272#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1273pub struct MediaButtonsListenerMarker;
1274
1275impl fidl::endpoints::ProtocolMarker for MediaButtonsListenerMarker {
1276    type Proxy = MediaButtonsListenerProxy;
1277    type RequestStream = MediaButtonsListenerRequestStream;
1278    #[cfg(target_os = "fuchsia")]
1279    type SynchronousProxy = MediaButtonsListenerSynchronousProxy;
1280
1281    const DEBUG_NAME: &'static str = "(anonymous) MediaButtonsListener";
1282}
1283
1284pub trait MediaButtonsListenerProxyInterface: Send + Sync {
1285    fn r#on_media_buttons_event(
1286        &self,
1287        event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1288    ) -> Result<(), fidl::Error>;
1289    type OnEventResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
1290    fn r#on_event(
1291        &self,
1292        event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1293    ) -> Self::OnEventResponseFut;
1294}
1295#[derive(Debug)]
1296#[cfg(target_os = "fuchsia")]
1297pub struct MediaButtonsListenerSynchronousProxy {
1298    client: fidl::client::sync::Client,
1299}
1300
1301#[cfg(target_os = "fuchsia")]
1302impl fidl::endpoints::SynchronousProxy for MediaButtonsListenerSynchronousProxy {
1303    type Proxy = MediaButtonsListenerProxy;
1304    type Protocol = MediaButtonsListenerMarker;
1305
1306    fn from_channel(inner: fidl::Channel) -> Self {
1307        Self::new(inner)
1308    }
1309
1310    fn into_channel(self) -> fidl::Channel {
1311        self.client.into_channel()
1312    }
1313
1314    fn as_channel(&self) -> &fidl::Channel {
1315        self.client.as_channel()
1316    }
1317}
1318
1319#[cfg(target_os = "fuchsia")]
1320impl MediaButtonsListenerSynchronousProxy {
1321    pub fn new(channel: fidl::Channel) -> Self {
1322        Self { client: fidl::client::sync::Client::new(channel) }
1323    }
1324
1325    pub fn into_channel(self) -> fidl::Channel {
1326        self.client.into_channel()
1327    }
1328
1329    /// Waits until an event arrives and returns it. It is safe for other
1330    /// threads to make concurrent requests while waiting for an event.
1331    pub fn wait_for_event(
1332        &self,
1333        deadline: zx::MonotonicInstant,
1334    ) -> Result<MediaButtonsListenerEvent, fidl::Error> {
1335        MediaButtonsListenerEvent::decode(
1336            self.client.wait_for_event::<MediaButtonsListenerMarker>(deadline)?,
1337        )
1338    }
1339
1340    pub fn r#on_media_buttons_event(
1341        &self,
1342        mut event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1343    ) -> Result<(), fidl::Error> {
1344        self.client.send::<MediaButtonsListenerOnMediaButtonsEventRequest>(
1345            (&mut event,),
1346            0x2c2068c386964e00,
1347            fidl::encoding::DynamicFlags::empty(),
1348        )
1349    }
1350
1351    pub fn r#on_event(
1352        &self,
1353        mut event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1354        ___deadline: zx::MonotonicInstant,
1355    ) -> Result<(), fidl::Error> {
1356        let _response = self.client.send_query::<
1357            MediaButtonsListenerOnEventRequest,
1358            fidl::encoding::EmptyPayload,
1359            MediaButtonsListenerMarker,
1360        >(
1361            (&mut event,),
1362            0x16e7130ddcaf877c,
1363            fidl::encoding::DynamicFlags::empty(),
1364            ___deadline,
1365        )?;
1366        Ok(_response)
1367    }
1368}
1369
1370#[cfg(target_os = "fuchsia")]
1371impl From<MediaButtonsListenerSynchronousProxy> for zx::NullableHandle {
1372    fn from(value: MediaButtonsListenerSynchronousProxy) -> Self {
1373        value.into_channel().into()
1374    }
1375}
1376
1377#[cfg(target_os = "fuchsia")]
1378impl From<fidl::Channel> for MediaButtonsListenerSynchronousProxy {
1379    fn from(value: fidl::Channel) -> Self {
1380        Self::new(value)
1381    }
1382}
1383
1384#[cfg(target_os = "fuchsia")]
1385impl fidl::endpoints::FromClient for MediaButtonsListenerSynchronousProxy {
1386    type Protocol = MediaButtonsListenerMarker;
1387
1388    fn from_client(value: fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>) -> Self {
1389        Self::new(value.into_channel())
1390    }
1391}
1392
1393#[derive(Debug, Clone)]
1394pub struct MediaButtonsListenerProxy {
1395    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1396}
1397
1398impl fidl::endpoints::Proxy for MediaButtonsListenerProxy {
1399    type Protocol = MediaButtonsListenerMarker;
1400
1401    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1402        Self::new(inner)
1403    }
1404
1405    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1406        self.client.into_channel().map_err(|client| Self { client })
1407    }
1408
1409    fn as_channel(&self) -> &::fidl::AsyncChannel {
1410        self.client.as_channel()
1411    }
1412}
1413
1414impl MediaButtonsListenerProxy {
1415    /// Create a new Proxy for fuchsia.ui.policy/MediaButtonsListener.
1416    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1417        let protocol_name =
1418            <MediaButtonsListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1419        Self { client: fidl::client::Client::new(channel, protocol_name) }
1420    }
1421
1422    /// Get a Stream of events from the remote end of the protocol.
1423    ///
1424    /// # Panics
1425    ///
1426    /// Panics if the event stream was already taken.
1427    pub fn take_event_stream(&self) -> MediaButtonsListenerEventStream {
1428        MediaButtonsListenerEventStream { event_receiver: self.client.take_event_receiver() }
1429    }
1430
1431    pub fn r#on_media_buttons_event(
1432        &self,
1433        mut event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1434    ) -> Result<(), fidl::Error> {
1435        MediaButtonsListenerProxyInterface::r#on_media_buttons_event(self, event)
1436    }
1437
1438    pub fn r#on_event(
1439        &self,
1440        mut event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1441    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
1442        MediaButtonsListenerProxyInterface::r#on_event(self, event)
1443    }
1444}
1445
1446impl MediaButtonsListenerProxyInterface for MediaButtonsListenerProxy {
1447    fn r#on_media_buttons_event(
1448        &self,
1449        mut event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1450    ) -> Result<(), fidl::Error> {
1451        self.client.send::<MediaButtonsListenerOnMediaButtonsEventRequest>(
1452            (&mut event,),
1453            0x2c2068c386964e00,
1454            fidl::encoding::DynamicFlags::empty(),
1455        )
1456    }
1457
1458    type OnEventResponseFut =
1459        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
1460    fn r#on_event(
1461        &self,
1462        mut event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1463    ) -> Self::OnEventResponseFut {
1464        fn _decode(
1465            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1466        ) -> Result<(), fidl::Error> {
1467            let _response = fidl::client::decode_transaction_body::<
1468                fidl::encoding::EmptyPayload,
1469                fidl::encoding::DefaultFuchsiaResourceDialect,
1470                0x16e7130ddcaf877c,
1471            >(_buf?)?;
1472            Ok(_response)
1473        }
1474        self.client.send_query_and_decode::<MediaButtonsListenerOnEventRequest, ()>(
1475            (&mut event,),
1476            0x16e7130ddcaf877c,
1477            fidl::encoding::DynamicFlags::empty(),
1478            _decode,
1479        )
1480    }
1481}
1482
1483pub struct MediaButtonsListenerEventStream {
1484    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1485}
1486
1487impl std::marker::Unpin for MediaButtonsListenerEventStream {}
1488
1489impl futures::stream::FusedStream for MediaButtonsListenerEventStream {
1490    fn is_terminated(&self) -> bool {
1491        self.event_receiver.is_terminated()
1492    }
1493}
1494
1495impl futures::Stream for MediaButtonsListenerEventStream {
1496    type Item = Result<MediaButtonsListenerEvent, fidl::Error>;
1497
1498    fn poll_next(
1499        mut self: std::pin::Pin<&mut Self>,
1500        cx: &mut std::task::Context<'_>,
1501    ) -> std::task::Poll<Option<Self::Item>> {
1502        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1503            &mut self.event_receiver,
1504            cx
1505        )?) {
1506            Some(buf) => std::task::Poll::Ready(Some(MediaButtonsListenerEvent::decode(buf))),
1507            None => std::task::Poll::Ready(None),
1508        }
1509    }
1510}
1511
1512#[derive(Debug)]
1513pub enum MediaButtonsListenerEvent {}
1514
1515impl MediaButtonsListenerEvent {
1516    /// Decodes a message buffer as a [`MediaButtonsListenerEvent`].
1517    fn decode(
1518        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1519    ) -> Result<MediaButtonsListenerEvent, fidl::Error> {
1520        let (bytes, _handles) = buf.split_mut();
1521        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1522        debug_assert_eq!(tx_header.tx_id, 0);
1523        match tx_header.ordinal {
1524            _ => Err(fidl::Error::UnknownOrdinal {
1525                ordinal: tx_header.ordinal,
1526                protocol_name:
1527                    <MediaButtonsListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1528            }),
1529        }
1530    }
1531}
1532
1533/// A Stream of incoming requests for fuchsia.ui.policy/MediaButtonsListener.
1534pub struct MediaButtonsListenerRequestStream {
1535    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1536    is_terminated: bool,
1537}
1538
1539impl std::marker::Unpin for MediaButtonsListenerRequestStream {}
1540
1541impl futures::stream::FusedStream for MediaButtonsListenerRequestStream {
1542    fn is_terminated(&self) -> bool {
1543        self.is_terminated
1544    }
1545}
1546
1547impl fidl::endpoints::RequestStream for MediaButtonsListenerRequestStream {
1548    type Protocol = MediaButtonsListenerMarker;
1549    type ControlHandle = MediaButtonsListenerControlHandle;
1550
1551    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1552        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1553    }
1554
1555    fn control_handle(&self) -> Self::ControlHandle {
1556        MediaButtonsListenerControlHandle { inner: self.inner.clone() }
1557    }
1558
1559    fn into_inner(
1560        self,
1561    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1562    {
1563        (self.inner, self.is_terminated)
1564    }
1565
1566    fn from_inner(
1567        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1568        is_terminated: bool,
1569    ) -> Self {
1570        Self { inner, is_terminated }
1571    }
1572}
1573
1574impl futures::Stream for MediaButtonsListenerRequestStream {
1575    type Item = Result<MediaButtonsListenerRequest, fidl::Error>;
1576
1577    fn poll_next(
1578        mut self: std::pin::Pin<&mut Self>,
1579        cx: &mut std::task::Context<'_>,
1580    ) -> std::task::Poll<Option<Self::Item>> {
1581        let this = &mut *self;
1582        if this.inner.check_shutdown(cx) {
1583            this.is_terminated = true;
1584            return std::task::Poll::Ready(None);
1585        }
1586        if this.is_terminated {
1587            panic!("polled MediaButtonsListenerRequestStream after completion");
1588        }
1589        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1590            |bytes, handles| {
1591                match this.inner.channel().read_etc(cx, bytes, handles) {
1592                    std::task::Poll::Ready(Ok(())) => {}
1593                    std::task::Poll::Pending => return std::task::Poll::Pending,
1594                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1595                        this.is_terminated = true;
1596                        return std::task::Poll::Ready(None);
1597                    }
1598                    std::task::Poll::Ready(Err(e)) => {
1599                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1600                            e.into(),
1601                        ))));
1602                    }
1603                }
1604
1605                // A message has been received from the channel
1606                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1607
1608                std::task::Poll::Ready(Some(match header.ordinal {
1609                0x2c2068c386964e00 => {
1610                    header.validate_request_tx_id(fidl::MethodType::OneWay)?;
1611                    let mut req = fidl::new_empty!(MediaButtonsListenerOnMediaButtonsEventRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
1612                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MediaButtonsListenerOnMediaButtonsEventRequest>(&header, _body_bytes, handles, &mut req)?;
1613                    let control_handle = MediaButtonsListenerControlHandle {
1614                        inner: this.inner.clone(),
1615                    };
1616                    Ok(MediaButtonsListenerRequest::OnMediaButtonsEvent {event: req.event,
1617
1618                        control_handle,
1619                    })
1620                }
1621                0x16e7130ddcaf877c => {
1622                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1623                    let mut req = fidl::new_empty!(MediaButtonsListenerOnEventRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
1624                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MediaButtonsListenerOnEventRequest>(&header, _body_bytes, handles, &mut req)?;
1625                    let control_handle = MediaButtonsListenerControlHandle {
1626                        inner: this.inner.clone(),
1627                    };
1628                    Ok(MediaButtonsListenerRequest::OnEvent {event: req.event,
1629
1630                        responder: MediaButtonsListenerOnEventResponder {
1631                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1632                            tx_id: header.tx_id,
1633                        },
1634                    })
1635                }
1636                _ => Err(fidl::Error::UnknownOrdinal {
1637                    ordinal: header.ordinal,
1638                    protocol_name: <MediaButtonsListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1639                }),
1640            }))
1641            },
1642        )
1643    }
1644}
1645
1646#[derive(Debug)]
1647pub enum MediaButtonsListenerRequest {
1648    OnMediaButtonsEvent {
1649        event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1650        control_handle: MediaButtonsListenerControlHandle,
1651    },
1652    OnEvent {
1653        event: fidl_fuchsia_ui_input::MediaButtonsEvent,
1654        responder: MediaButtonsListenerOnEventResponder,
1655    },
1656}
1657
1658impl MediaButtonsListenerRequest {
1659    #[allow(irrefutable_let_patterns)]
1660    pub fn into_on_media_buttons_event(
1661        self,
1662    ) -> Option<(fidl_fuchsia_ui_input::MediaButtonsEvent, MediaButtonsListenerControlHandle)> {
1663        if let MediaButtonsListenerRequest::OnMediaButtonsEvent { event, control_handle } = self {
1664            Some((event, control_handle))
1665        } else {
1666            None
1667        }
1668    }
1669
1670    #[allow(irrefutable_let_patterns)]
1671    pub fn into_on_event(
1672        self,
1673    ) -> Option<(fidl_fuchsia_ui_input::MediaButtonsEvent, MediaButtonsListenerOnEventResponder)>
1674    {
1675        if let MediaButtonsListenerRequest::OnEvent { event, responder } = self {
1676            Some((event, responder))
1677        } else {
1678            None
1679        }
1680    }
1681
1682    /// Name of the method defined in FIDL
1683    pub fn method_name(&self) -> &'static str {
1684        match *self {
1685            MediaButtonsListenerRequest::OnMediaButtonsEvent { .. } => "on_media_buttons_event",
1686            MediaButtonsListenerRequest::OnEvent { .. } => "on_event",
1687        }
1688    }
1689}
1690
1691#[derive(Debug, Clone)]
1692pub struct MediaButtonsListenerControlHandle {
1693    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1694}
1695
1696impl fidl::endpoints::ControlHandle for MediaButtonsListenerControlHandle {
1697    fn shutdown(&self) {
1698        self.inner.shutdown()
1699    }
1700
1701    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1702        self.inner.shutdown_with_epitaph(status)
1703    }
1704
1705    fn is_closed(&self) -> bool {
1706        self.inner.channel().is_closed()
1707    }
1708    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1709        self.inner.channel().on_closed()
1710    }
1711
1712    #[cfg(target_os = "fuchsia")]
1713    fn signal_peer(
1714        &self,
1715        clear_mask: zx::Signals,
1716        set_mask: zx::Signals,
1717    ) -> Result<(), zx_status::Status> {
1718        use fidl::Peered;
1719        self.inner.channel().signal_peer(clear_mask, set_mask)
1720    }
1721}
1722
1723impl MediaButtonsListenerControlHandle {}
1724
1725#[must_use = "FIDL methods require a response to be sent"]
1726#[derive(Debug)]
1727pub struct MediaButtonsListenerOnEventResponder {
1728    control_handle: std::mem::ManuallyDrop<MediaButtonsListenerControlHandle>,
1729    tx_id: u32,
1730}
1731
1732/// Set the the channel to be shutdown (see [`MediaButtonsListenerControlHandle::shutdown`])
1733/// if the responder is dropped without sending a response, so that the client
1734/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1735impl std::ops::Drop for MediaButtonsListenerOnEventResponder {
1736    fn drop(&mut self) {
1737        self.control_handle.shutdown();
1738        // Safety: drops once, never accessed again
1739        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1740    }
1741}
1742
1743impl fidl::endpoints::Responder for MediaButtonsListenerOnEventResponder {
1744    type ControlHandle = MediaButtonsListenerControlHandle;
1745
1746    fn control_handle(&self) -> &MediaButtonsListenerControlHandle {
1747        &self.control_handle
1748    }
1749
1750    fn drop_without_shutdown(mut self) {
1751        // Safety: drops once, never accessed again due to mem::forget
1752        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1753        // Prevent Drop from running (which would shut down the channel)
1754        std::mem::forget(self);
1755    }
1756}
1757
1758impl MediaButtonsListenerOnEventResponder {
1759    /// Sends a response to the FIDL transaction.
1760    ///
1761    /// Sets the channel to shutdown if an error occurs.
1762    pub fn send(self) -> Result<(), fidl::Error> {
1763        let _result = self.send_raw();
1764        if _result.is_err() {
1765            self.control_handle.shutdown();
1766        }
1767        self.drop_without_shutdown();
1768        _result
1769    }
1770
1771    /// Similar to "send" but does not shutdown the channel if an error occurs.
1772    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
1773        let _result = self.send_raw();
1774        self.drop_without_shutdown();
1775        _result
1776    }
1777
1778    fn send_raw(&self) -> Result<(), fidl::Error> {
1779        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
1780            (),
1781            self.tx_id,
1782            0x16e7130ddcaf877c,
1783            fidl::encoding::DynamicFlags::empty(),
1784        )
1785    }
1786}
1787
1788#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1789pub struct TouchButtonsListenerMarker;
1790
1791impl fidl::endpoints::ProtocolMarker for TouchButtonsListenerMarker {
1792    type Proxy = TouchButtonsListenerProxy;
1793    type RequestStream = TouchButtonsListenerRequestStream;
1794    #[cfg(target_os = "fuchsia")]
1795    type SynchronousProxy = TouchButtonsListenerSynchronousProxy;
1796
1797    const DEBUG_NAME: &'static str = "(anonymous) TouchButtonsListener";
1798}
1799
1800pub trait TouchButtonsListenerProxyInterface: Send + Sync {
1801    type OnEventResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
1802    fn r#on_event(
1803        &self,
1804        event: fidl_fuchsia_ui_input::TouchButtonsEvent,
1805    ) -> Self::OnEventResponseFut;
1806}
1807#[derive(Debug)]
1808#[cfg(target_os = "fuchsia")]
1809pub struct TouchButtonsListenerSynchronousProxy {
1810    client: fidl::client::sync::Client,
1811}
1812
1813#[cfg(target_os = "fuchsia")]
1814impl fidl::endpoints::SynchronousProxy for TouchButtonsListenerSynchronousProxy {
1815    type Proxy = TouchButtonsListenerProxy;
1816    type Protocol = TouchButtonsListenerMarker;
1817
1818    fn from_channel(inner: fidl::Channel) -> Self {
1819        Self::new(inner)
1820    }
1821
1822    fn into_channel(self) -> fidl::Channel {
1823        self.client.into_channel()
1824    }
1825
1826    fn as_channel(&self) -> &fidl::Channel {
1827        self.client.as_channel()
1828    }
1829}
1830
1831#[cfg(target_os = "fuchsia")]
1832impl TouchButtonsListenerSynchronousProxy {
1833    pub fn new(channel: fidl::Channel) -> Self {
1834        Self { client: fidl::client::sync::Client::new(channel) }
1835    }
1836
1837    pub fn into_channel(self) -> fidl::Channel {
1838        self.client.into_channel()
1839    }
1840
1841    /// Waits until an event arrives and returns it. It is safe for other
1842    /// threads to make concurrent requests while waiting for an event.
1843    pub fn wait_for_event(
1844        &self,
1845        deadline: zx::MonotonicInstant,
1846    ) -> Result<TouchButtonsListenerEvent, fidl::Error> {
1847        TouchButtonsListenerEvent::decode(
1848            self.client.wait_for_event::<TouchButtonsListenerMarker>(deadline)?,
1849        )
1850    }
1851
1852    pub fn r#on_event(
1853        &self,
1854        mut event: fidl_fuchsia_ui_input::TouchButtonsEvent,
1855        ___deadline: zx::MonotonicInstant,
1856    ) -> Result<(), fidl::Error> {
1857        let _response = self.client.send_query::<
1858            TouchButtonsListenerOnEventRequest,
1859            fidl::encoding::EmptyPayload,
1860            TouchButtonsListenerMarker,
1861        >(
1862            (&mut event,),
1863            0x476b549161542f92,
1864            fidl::encoding::DynamicFlags::empty(),
1865            ___deadline,
1866        )?;
1867        Ok(_response)
1868    }
1869}
1870
1871#[cfg(target_os = "fuchsia")]
1872impl From<TouchButtonsListenerSynchronousProxy> for zx::NullableHandle {
1873    fn from(value: TouchButtonsListenerSynchronousProxy) -> Self {
1874        value.into_channel().into()
1875    }
1876}
1877
1878#[cfg(target_os = "fuchsia")]
1879impl From<fidl::Channel> for TouchButtonsListenerSynchronousProxy {
1880    fn from(value: fidl::Channel) -> Self {
1881        Self::new(value)
1882    }
1883}
1884
1885#[cfg(target_os = "fuchsia")]
1886impl fidl::endpoints::FromClient for TouchButtonsListenerSynchronousProxy {
1887    type Protocol = TouchButtonsListenerMarker;
1888
1889    fn from_client(value: fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>) -> Self {
1890        Self::new(value.into_channel())
1891    }
1892}
1893
1894#[derive(Debug, Clone)]
1895pub struct TouchButtonsListenerProxy {
1896    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1897}
1898
1899impl fidl::endpoints::Proxy for TouchButtonsListenerProxy {
1900    type Protocol = TouchButtonsListenerMarker;
1901
1902    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1903        Self::new(inner)
1904    }
1905
1906    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1907        self.client.into_channel().map_err(|client| Self { client })
1908    }
1909
1910    fn as_channel(&self) -> &::fidl::AsyncChannel {
1911        self.client.as_channel()
1912    }
1913}
1914
1915impl TouchButtonsListenerProxy {
1916    /// Create a new Proxy for fuchsia.ui.policy/TouchButtonsListener.
1917    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1918        let protocol_name =
1919            <TouchButtonsListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1920        Self { client: fidl::client::Client::new(channel, protocol_name) }
1921    }
1922
1923    /// Get a Stream of events from the remote end of the protocol.
1924    ///
1925    /// # Panics
1926    ///
1927    /// Panics if the event stream was already taken.
1928    pub fn take_event_stream(&self) -> TouchButtonsListenerEventStream {
1929        TouchButtonsListenerEventStream { event_receiver: self.client.take_event_receiver() }
1930    }
1931
1932    pub fn r#on_event(
1933        &self,
1934        mut event: fidl_fuchsia_ui_input::TouchButtonsEvent,
1935    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
1936        TouchButtonsListenerProxyInterface::r#on_event(self, event)
1937    }
1938}
1939
1940impl TouchButtonsListenerProxyInterface for TouchButtonsListenerProxy {
1941    type OnEventResponseFut =
1942        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
1943    fn r#on_event(
1944        &self,
1945        mut event: fidl_fuchsia_ui_input::TouchButtonsEvent,
1946    ) -> Self::OnEventResponseFut {
1947        fn _decode(
1948            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1949        ) -> Result<(), fidl::Error> {
1950            let _response = fidl::client::decode_transaction_body::<
1951                fidl::encoding::EmptyPayload,
1952                fidl::encoding::DefaultFuchsiaResourceDialect,
1953                0x476b549161542f92,
1954            >(_buf?)?;
1955            Ok(_response)
1956        }
1957        self.client.send_query_and_decode::<TouchButtonsListenerOnEventRequest, ()>(
1958            (&mut event,),
1959            0x476b549161542f92,
1960            fidl::encoding::DynamicFlags::empty(),
1961            _decode,
1962        )
1963    }
1964}
1965
1966pub struct TouchButtonsListenerEventStream {
1967    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1968}
1969
1970impl std::marker::Unpin for TouchButtonsListenerEventStream {}
1971
1972impl futures::stream::FusedStream for TouchButtonsListenerEventStream {
1973    fn is_terminated(&self) -> bool {
1974        self.event_receiver.is_terminated()
1975    }
1976}
1977
1978impl futures::Stream for TouchButtonsListenerEventStream {
1979    type Item = Result<TouchButtonsListenerEvent, fidl::Error>;
1980
1981    fn poll_next(
1982        mut self: std::pin::Pin<&mut Self>,
1983        cx: &mut std::task::Context<'_>,
1984    ) -> std::task::Poll<Option<Self::Item>> {
1985        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1986            &mut self.event_receiver,
1987            cx
1988        )?) {
1989            Some(buf) => std::task::Poll::Ready(Some(TouchButtonsListenerEvent::decode(buf))),
1990            None => std::task::Poll::Ready(None),
1991        }
1992    }
1993}
1994
1995#[derive(Debug)]
1996pub enum TouchButtonsListenerEvent {
1997    #[non_exhaustive]
1998    _UnknownEvent {
1999        /// Ordinal of the event that was sent.
2000        ordinal: u64,
2001    },
2002}
2003
2004impl TouchButtonsListenerEvent {
2005    /// Decodes a message buffer as a [`TouchButtonsListenerEvent`].
2006    fn decode(
2007        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2008    ) -> Result<TouchButtonsListenerEvent, fidl::Error> {
2009        let (bytes, _handles) = buf.split_mut();
2010        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2011        debug_assert_eq!(tx_header.tx_id, 0);
2012        match tx_header.ordinal {
2013            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2014                Ok(TouchButtonsListenerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
2015            }
2016            _ => Err(fidl::Error::UnknownOrdinal {
2017                ordinal: tx_header.ordinal,
2018                protocol_name:
2019                    <TouchButtonsListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2020            }),
2021        }
2022    }
2023}
2024
2025/// A Stream of incoming requests for fuchsia.ui.policy/TouchButtonsListener.
2026pub struct TouchButtonsListenerRequestStream {
2027    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2028    is_terminated: bool,
2029}
2030
2031impl std::marker::Unpin for TouchButtonsListenerRequestStream {}
2032
2033impl futures::stream::FusedStream for TouchButtonsListenerRequestStream {
2034    fn is_terminated(&self) -> bool {
2035        self.is_terminated
2036    }
2037}
2038
2039impl fidl::endpoints::RequestStream for TouchButtonsListenerRequestStream {
2040    type Protocol = TouchButtonsListenerMarker;
2041    type ControlHandle = TouchButtonsListenerControlHandle;
2042
2043    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2044        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2045    }
2046
2047    fn control_handle(&self) -> Self::ControlHandle {
2048        TouchButtonsListenerControlHandle { inner: self.inner.clone() }
2049    }
2050
2051    fn into_inner(
2052        self,
2053    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2054    {
2055        (self.inner, self.is_terminated)
2056    }
2057
2058    fn from_inner(
2059        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2060        is_terminated: bool,
2061    ) -> Self {
2062        Self { inner, is_terminated }
2063    }
2064}
2065
2066impl futures::Stream for TouchButtonsListenerRequestStream {
2067    type Item = Result<TouchButtonsListenerRequest, fidl::Error>;
2068
2069    fn poll_next(
2070        mut self: std::pin::Pin<&mut Self>,
2071        cx: &mut std::task::Context<'_>,
2072    ) -> std::task::Poll<Option<Self::Item>> {
2073        let this = &mut *self;
2074        if this.inner.check_shutdown(cx) {
2075            this.is_terminated = true;
2076            return std::task::Poll::Ready(None);
2077        }
2078        if this.is_terminated {
2079            panic!("polled TouchButtonsListenerRequestStream after completion");
2080        }
2081        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2082            |bytes, handles| {
2083                match this.inner.channel().read_etc(cx, bytes, handles) {
2084                    std::task::Poll::Ready(Ok(())) => {}
2085                    std::task::Poll::Pending => return std::task::Poll::Pending,
2086                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2087                        this.is_terminated = true;
2088                        return std::task::Poll::Ready(None);
2089                    }
2090                    std::task::Poll::Ready(Err(e)) => {
2091                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2092                            e.into(),
2093                        ))));
2094                    }
2095                }
2096
2097                // A message has been received from the channel
2098                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2099
2100                std::task::Poll::Ready(Some(match header.ordinal {
2101                0x476b549161542f92 => {
2102                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2103                    let mut req = fidl::new_empty!(TouchButtonsListenerOnEventRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
2104                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<TouchButtonsListenerOnEventRequest>(&header, _body_bytes, handles, &mut req)?;
2105                    let control_handle = TouchButtonsListenerControlHandle {
2106                        inner: this.inner.clone(),
2107                    };
2108                    Ok(TouchButtonsListenerRequest::OnEvent {event: req.event,
2109
2110                        responder: TouchButtonsListenerOnEventResponder {
2111                            control_handle: std::mem::ManuallyDrop::new(control_handle),
2112                            tx_id: header.tx_id,
2113                        },
2114                    })
2115                }
2116                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2117                    Ok(TouchButtonsListenerRequest::_UnknownMethod {
2118                        ordinal: header.ordinal,
2119                        control_handle: TouchButtonsListenerControlHandle { inner: this.inner.clone() },
2120                        method_type: fidl::MethodType::OneWay,
2121                    })
2122                }
2123                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2124                    this.inner.send_framework_err(
2125                        fidl::encoding::FrameworkErr::UnknownMethod,
2126                        header.tx_id,
2127                        header.ordinal,
2128                        header.dynamic_flags(),
2129                        (bytes, handles),
2130                    )?;
2131                    Ok(TouchButtonsListenerRequest::_UnknownMethod {
2132                        ordinal: header.ordinal,
2133                        control_handle: TouchButtonsListenerControlHandle { inner: this.inner.clone() },
2134                        method_type: fidl::MethodType::TwoWay,
2135                    })
2136                }
2137                _ => Err(fidl::Error::UnknownOrdinal {
2138                    ordinal: header.ordinal,
2139                    protocol_name: <TouchButtonsListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2140                }),
2141            }))
2142            },
2143        )
2144    }
2145}
2146
2147#[derive(Debug)]
2148pub enum TouchButtonsListenerRequest {
2149    OnEvent {
2150        event: fidl_fuchsia_ui_input::TouchButtonsEvent,
2151        responder: TouchButtonsListenerOnEventResponder,
2152    },
2153    /// An interaction was received which does not match any known method.
2154    #[non_exhaustive]
2155    _UnknownMethod {
2156        /// Ordinal of the method that was called.
2157        ordinal: u64,
2158        control_handle: TouchButtonsListenerControlHandle,
2159        method_type: fidl::MethodType,
2160    },
2161}
2162
2163impl TouchButtonsListenerRequest {
2164    #[allow(irrefutable_let_patterns)]
2165    pub fn into_on_event(
2166        self,
2167    ) -> Option<(fidl_fuchsia_ui_input::TouchButtonsEvent, TouchButtonsListenerOnEventResponder)>
2168    {
2169        if let TouchButtonsListenerRequest::OnEvent { event, responder } = self {
2170            Some((event, responder))
2171        } else {
2172            None
2173        }
2174    }
2175
2176    /// Name of the method defined in FIDL
2177    pub fn method_name(&self) -> &'static str {
2178        match *self {
2179            TouchButtonsListenerRequest::OnEvent { .. } => "on_event",
2180            TouchButtonsListenerRequest::_UnknownMethod {
2181                method_type: fidl::MethodType::OneWay,
2182                ..
2183            } => "unknown one-way method",
2184            TouchButtonsListenerRequest::_UnknownMethod {
2185                method_type: fidl::MethodType::TwoWay,
2186                ..
2187            } => "unknown two-way method",
2188        }
2189    }
2190}
2191
2192#[derive(Debug, Clone)]
2193pub struct TouchButtonsListenerControlHandle {
2194    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2195}
2196
2197impl fidl::endpoints::ControlHandle for TouchButtonsListenerControlHandle {
2198    fn shutdown(&self) {
2199        self.inner.shutdown()
2200    }
2201
2202    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2203        self.inner.shutdown_with_epitaph(status)
2204    }
2205
2206    fn is_closed(&self) -> bool {
2207        self.inner.channel().is_closed()
2208    }
2209    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2210        self.inner.channel().on_closed()
2211    }
2212
2213    #[cfg(target_os = "fuchsia")]
2214    fn signal_peer(
2215        &self,
2216        clear_mask: zx::Signals,
2217        set_mask: zx::Signals,
2218    ) -> Result<(), zx_status::Status> {
2219        use fidl::Peered;
2220        self.inner.channel().signal_peer(clear_mask, set_mask)
2221    }
2222}
2223
2224impl TouchButtonsListenerControlHandle {}
2225
2226#[must_use = "FIDL methods require a response to be sent"]
2227#[derive(Debug)]
2228pub struct TouchButtonsListenerOnEventResponder {
2229    control_handle: std::mem::ManuallyDrop<TouchButtonsListenerControlHandle>,
2230    tx_id: u32,
2231}
2232
2233/// Set the the channel to be shutdown (see [`TouchButtonsListenerControlHandle::shutdown`])
2234/// if the responder is dropped without sending a response, so that the client
2235/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2236impl std::ops::Drop for TouchButtonsListenerOnEventResponder {
2237    fn drop(&mut self) {
2238        self.control_handle.shutdown();
2239        // Safety: drops once, never accessed again
2240        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2241    }
2242}
2243
2244impl fidl::endpoints::Responder for TouchButtonsListenerOnEventResponder {
2245    type ControlHandle = TouchButtonsListenerControlHandle;
2246
2247    fn control_handle(&self) -> &TouchButtonsListenerControlHandle {
2248        &self.control_handle
2249    }
2250
2251    fn drop_without_shutdown(mut self) {
2252        // Safety: drops once, never accessed again due to mem::forget
2253        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2254        // Prevent Drop from running (which would shut down the channel)
2255        std::mem::forget(self);
2256    }
2257}
2258
2259impl TouchButtonsListenerOnEventResponder {
2260    /// Sends a response to the FIDL transaction.
2261    ///
2262    /// Sets the channel to shutdown if an error occurs.
2263    pub fn send(self) -> Result<(), fidl::Error> {
2264        let _result = self.send_raw();
2265        if _result.is_err() {
2266            self.control_handle.shutdown();
2267        }
2268        self.drop_without_shutdown();
2269        _result
2270    }
2271
2272    /// Similar to "send" but does not shutdown the channel if an error occurs.
2273    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
2274        let _result = self.send_raw();
2275        self.drop_without_shutdown();
2276        _result
2277    }
2278
2279    fn send_raw(&self) -> Result<(), fidl::Error> {
2280        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
2281            (),
2282            self.tx_id,
2283            0x476b549161542f92,
2284            fidl::encoding::DynamicFlags::empty(),
2285        )
2286    }
2287}
2288
2289mod internal {
2290    use super::*;
2291
2292    impl fidl::encoding::ResourceTypeMarker for DeviceListenerRegistryRegisterListenerRequest {
2293        type Borrowed<'a> = &'a mut Self;
2294        fn take_or_borrow<'a>(
2295            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2296        ) -> Self::Borrowed<'a> {
2297            value
2298        }
2299    }
2300
2301    unsafe impl fidl::encoding::TypeMarker for DeviceListenerRegistryRegisterListenerRequest {
2302        type Owned = Self;
2303
2304        #[inline(always)]
2305        fn inline_align(_context: fidl::encoding::Context) -> usize {
2306            4
2307        }
2308
2309        #[inline(always)]
2310        fn inline_size(_context: fidl::encoding::Context) -> usize {
2311            4
2312        }
2313    }
2314
2315    unsafe impl
2316        fidl::encoding::Encode<
2317            DeviceListenerRegistryRegisterListenerRequest,
2318            fidl::encoding::DefaultFuchsiaResourceDialect,
2319        > for &mut DeviceListenerRegistryRegisterListenerRequest
2320    {
2321        #[inline]
2322        unsafe fn encode(
2323            self,
2324            encoder: &mut fidl::encoding::Encoder<
2325                '_,
2326                fidl::encoding::DefaultFuchsiaResourceDialect,
2327            >,
2328            offset: usize,
2329            _depth: fidl::encoding::Depth,
2330        ) -> fidl::Result<()> {
2331            encoder.debug_check_bounds::<DeviceListenerRegistryRegisterListenerRequest>(offset);
2332            // Delegate to tuple encoding.
2333            fidl::encoding::Encode::<
2334                DeviceListenerRegistryRegisterListenerRequest,
2335                fidl::encoding::DefaultFuchsiaResourceDialect,
2336            >::encode(
2337                (
2338                    <fidl::encoding::Endpoint<
2339                        fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
2340                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
2341                        &mut self.listener
2342                    ),
2343                ),
2344                encoder,
2345                offset,
2346                _depth,
2347            )
2348        }
2349    }
2350    unsafe impl<
2351        T0: fidl::encoding::Encode<
2352                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>>,
2353                fidl::encoding::DefaultFuchsiaResourceDialect,
2354            >,
2355    >
2356        fidl::encoding::Encode<
2357            DeviceListenerRegistryRegisterListenerRequest,
2358            fidl::encoding::DefaultFuchsiaResourceDialect,
2359        > for (T0,)
2360    {
2361        #[inline]
2362        unsafe fn encode(
2363            self,
2364            encoder: &mut fidl::encoding::Encoder<
2365                '_,
2366                fidl::encoding::DefaultFuchsiaResourceDialect,
2367            >,
2368            offset: usize,
2369            depth: fidl::encoding::Depth,
2370        ) -> fidl::Result<()> {
2371            encoder.debug_check_bounds::<DeviceListenerRegistryRegisterListenerRequest>(offset);
2372            // Zero out padding regions. There's no need to apply masks
2373            // because the unmasked parts will be overwritten by fields.
2374            // Write the fields.
2375            self.0.encode(encoder, offset + 0, depth)?;
2376            Ok(())
2377        }
2378    }
2379
2380    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2381        for DeviceListenerRegistryRegisterListenerRequest
2382    {
2383        #[inline(always)]
2384        fn new_empty() -> Self {
2385            Self {
2386                listener: fidl::new_empty!(
2387                    fidl::encoding::Endpoint<
2388                        fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
2389                    >,
2390                    fidl::encoding::DefaultFuchsiaResourceDialect
2391                ),
2392            }
2393        }
2394
2395        #[inline]
2396        unsafe fn decode(
2397            &mut self,
2398            decoder: &mut fidl::encoding::Decoder<
2399                '_,
2400                fidl::encoding::DefaultFuchsiaResourceDialect,
2401            >,
2402            offset: usize,
2403            _depth: fidl::encoding::Depth,
2404        ) -> fidl::Result<()> {
2405            decoder.debug_check_bounds::<Self>(offset);
2406            // Verify that padding bytes are zero.
2407            fidl::decode!(
2408                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>>,
2409                fidl::encoding::DefaultFuchsiaResourceDialect,
2410                &mut self.listener,
2411                decoder,
2412                offset + 0,
2413                _depth
2414            )?;
2415            Ok(())
2416        }
2417    }
2418
2419    impl fidl::encoding::ResourceTypeMarker
2420        for DeviceListenerRegistryRegisterMediaButtonsListenerRequest
2421    {
2422        type Borrowed<'a> = &'a mut Self;
2423        fn take_or_borrow<'a>(
2424            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2425        ) -> Self::Borrowed<'a> {
2426            value
2427        }
2428    }
2429
2430    unsafe impl fidl::encoding::TypeMarker
2431        for DeviceListenerRegistryRegisterMediaButtonsListenerRequest
2432    {
2433        type Owned = Self;
2434
2435        #[inline(always)]
2436        fn inline_align(_context: fidl::encoding::Context) -> usize {
2437            4
2438        }
2439
2440        #[inline(always)]
2441        fn inline_size(_context: fidl::encoding::Context) -> usize {
2442            4
2443        }
2444    }
2445
2446    unsafe impl
2447        fidl::encoding::Encode<
2448            DeviceListenerRegistryRegisterMediaButtonsListenerRequest,
2449            fidl::encoding::DefaultFuchsiaResourceDialect,
2450        > for &mut DeviceListenerRegistryRegisterMediaButtonsListenerRequest
2451    {
2452        #[inline]
2453        unsafe fn encode(
2454            self,
2455            encoder: &mut fidl::encoding::Encoder<
2456                '_,
2457                fidl::encoding::DefaultFuchsiaResourceDialect,
2458            >,
2459            offset: usize,
2460            _depth: fidl::encoding::Depth,
2461        ) -> fidl::Result<()> {
2462            encoder
2463                .debug_check_bounds::<DeviceListenerRegistryRegisterMediaButtonsListenerRequest>(
2464                    offset,
2465                );
2466            // Delegate to tuple encoding.
2467            fidl::encoding::Encode::<
2468                DeviceListenerRegistryRegisterMediaButtonsListenerRequest,
2469                fidl::encoding::DefaultFuchsiaResourceDialect,
2470            >::encode(
2471                (
2472                    <fidl::encoding::Endpoint<
2473                        fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
2474                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
2475                        &mut self.listener
2476                    ),
2477                ),
2478                encoder,
2479                offset,
2480                _depth,
2481            )
2482        }
2483    }
2484    unsafe impl<
2485        T0: fidl::encoding::Encode<
2486                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>>,
2487                fidl::encoding::DefaultFuchsiaResourceDialect,
2488            >,
2489    >
2490        fidl::encoding::Encode<
2491            DeviceListenerRegistryRegisterMediaButtonsListenerRequest,
2492            fidl::encoding::DefaultFuchsiaResourceDialect,
2493        > for (T0,)
2494    {
2495        #[inline]
2496        unsafe fn encode(
2497            self,
2498            encoder: &mut fidl::encoding::Encoder<
2499                '_,
2500                fidl::encoding::DefaultFuchsiaResourceDialect,
2501            >,
2502            offset: usize,
2503            depth: fidl::encoding::Depth,
2504        ) -> fidl::Result<()> {
2505            encoder
2506                .debug_check_bounds::<DeviceListenerRegistryRegisterMediaButtonsListenerRequest>(
2507                    offset,
2508                );
2509            // Zero out padding regions. There's no need to apply masks
2510            // because the unmasked parts will be overwritten by fields.
2511            // Write the fields.
2512            self.0.encode(encoder, offset + 0, depth)?;
2513            Ok(())
2514        }
2515    }
2516
2517    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2518        for DeviceListenerRegistryRegisterMediaButtonsListenerRequest
2519    {
2520        #[inline(always)]
2521        fn new_empty() -> Self {
2522            Self {
2523                listener: fidl::new_empty!(
2524                    fidl::encoding::Endpoint<
2525                        fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>,
2526                    >,
2527                    fidl::encoding::DefaultFuchsiaResourceDialect
2528                ),
2529            }
2530        }
2531
2532        #[inline]
2533        unsafe fn decode(
2534            &mut self,
2535            decoder: &mut fidl::encoding::Decoder<
2536                '_,
2537                fidl::encoding::DefaultFuchsiaResourceDialect,
2538            >,
2539            offset: usize,
2540            _depth: fidl::encoding::Depth,
2541        ) -> fidl::Result<()> {
2542            decoder.debug_check_bounds::<Self>(offset);
2543            // Verify that padding bytes are zero.
2544            fidl::decode!(
2545                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<MediaButtonsListenerMarker>>,
2546                fidl::encoding::DefaultFuchsiaResourceDialect,
2547                &mut self.listener,
2548                decoder,
2549                offset + 0,
2550                _depth
2551            )?;
2552            Ok(())
2553        }
2554    }
2555
2556    impl fidl::encoding::ResourceTypeMarker
2557        for DeviceListenerRegistryRegisterTouchButtonsListenerRequest
2558    {
2559        type Borrowed<'a> = &'a mut Self;
2560        fn take_or_borrow<'a>(
2561            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2562        ) -> Self::Borrowed<'a> {
2563            value
2564        }
2565    }
2566
2567    unsafe impl fidl::encoding::TypeMarker
2568        for DeviceListenerRegistryRegisterTouchButtonsListenerRequest
2569    {
2570        type Owned = Self;
2571
2572        #[inline(always)]
2573        fn inline_align(_context: fidl::encoding::Context) -> usize {
2574            4
2575        }
2576
2577        #[inline(always)]
2578        fn inline_size(_context: fidl::encoding::Context) -> usize {
2579            4
2580        }
2581    }
2582
2583    unsafe impl
2584        fidl::encoding::Encode<
2585            DeviceListenerRegistryRegisterTouchButtonsListenerRequest,
2586            fidl::encoding::DefaultFuchsiaResourceDialect,
2587        > for &mut DeviceListenerRegistryRegisterTouchButtonsListenerRequest
2588    {
2589        #[inline]
2590        unsafe fn encode(
2591            self,
2592            encoder: &mut fidl::encoding::Encoder<
2593                '_,
2594                fidl::encoding::DefaultFuchsiaResourceDialect,
2595            >,
2596            offset: usize,
2597            _depth: fidl::encoding::Depth,
2598        ) -> fidl::Result<()> {
2599            encoder
2600                .debug_check_bounds::<DeviceListenerRegistryRegisterTouchButtonsListenerRequest>(
2601                    offset,
2602                );
2603            // Delegate to tuple encoding.
2604            fidl::encoding::Encode::<
2605                DeviceListenerRegistryRegisterTouchButtonsListenerRequest,
2606                fidl::encoding::DefaultFuchsiaResourceDialect,
2607            >::encode(
2608                (
2609                    <fidl::encoding::Endpoint<
2610                        fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
2611                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
2612                        &mut self.listener
2613                    ),
2614                ),
2615                encoder,
2616                offset,
2617                _depth,
2618            )
2619        }
2620    }
2621    unsafe impl<
2622        T0: fidl::encoding::Encode<
2623                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>>,
2624                fidl::encoding::DefaultFuchsiaResourceDialect,
2625            >,
2626    >
2627        fidl::encoding::Encode<
2628            DeviceListenerRegistryRegisterTouchButtonsListenerRequest,
2629            fidl::encoding::DefaultFuchsiaResourceDialect,
2630        > for (T0,)
2631    {
2632        #[inline]
2633        unsafe fn encode(
2634            self,
2635            encoder: &mut fidl::encoding::Encoder<
2636                '_,
2637                fidl::encoding::DefaultFuchsiaResourceDialect,
2638            >,
2639            offset: usize,
2640            depth: fidl::encoding::Depth,
2641        ) -> fidl::Result<()> {
2642            encoder
2643                .debug_check_bounds::<DeviceListenerRegistryRegisterTouchButtonsListenerRequest>(
2644                    offset,
2645                );
2646            // Zero out padding regions. There's no need to apply masks
2647            // because the unmasked parts will be overwritten by fields.
2648            // Write the fields.
2649            self.0.encode(encoder, offset + 0, depth)?;
2650            Ok(())
2651        }
2652    }
2653
2654    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2655        for DeviceListenerRegistryRegisterTouchButtonsListenerRequest
2656    {
2657        #[inline(always)]
2658        fn new_empty() -> Self {
2659            Self {
2660                listener: fidl::new_empty!(
2661                    fidl::encoding::Endpoint<
2662                        fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>,
2663                    >,
2664                    fidl::encoding::DefaultFuchsiaResourceDialect
2665                ),
2666            }
2667        }
2668
2669        #[inline]
2670        unsafe fn decode(
2671            &mut self,
2672            decoder: &mut fidl::encoding::Decoder<
2673                '_,
2674                fidl::encoding::DefaultFuchsiaResourceDialect,
2675            >,
2676            offset: usize,
2677            _depth: fidl::encoding::Depth,
2678        ) -> fidl::Result<()> {
2679            decoder.debug_check_bounds::<Self>(offset);
2680            // Verify that padding bytes are zero.
2681            fidl::decode!(
2682                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<TouchButtonsListenerMarker>>,
2683                fidl::encoding::DefaultFuchsiaResourceDialect,
2684                &mut self.listener,
2685                decoder,
2686                offset + 0,
2687                _depth
2688            )?;
2689            Ok(())
2690        }
2691    }
2692
2693    impl fidl::encoding::ResourceTypeMarker for MediaButtonsListenerOnEventRequest {
2694        type Borrowed<'a> = &'a mut Self;
2695        fn take_or_borrow<'a>(
2696            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2697        ) -> Self::Borrowed<'a> {
2698            value
2699        }
2700    }
2701
2702    unsafe impl fidl::encoding::TypeMarker for MediaButtonsListenerOnEventRequest {
2703        type Owned = Self;
2704
2705        #[inline(always)]
2706        fn inline_align(_context: fidl::encoding::Context) -> usize {
2707            8
2708        }
2709
2710        #[inline(always)]
2711        fn inline_size(_context: fidl::encoding::Context) -> usize {
2712            16
2713        }
2714    }
2715
2716    unsafe impl
2717        fidl::encoding::Encode<
2718            MediaButtonsListenerOnEventRequest,
2719            fidl::encoding::DefaultFuchsiaResourceDialect,
2720        > for &mut MediaButtonsListenerOnEventRequest
2721    {
2722        #[inline]
2723        unsafe fn encode(
2724            self,
2725            encoder: &mut fidl::encoding::Encoder<
2726                '_,
2727                fidl::encoding::DefaultFuchsiaResourceDialect,
2728            >,
2729            offset: usize,
2730            _depth: fidl::encoding::Depth,
2731        ) -> fidl::Result<()> {
2732            encoder.debug_check_bounds::<MediaButtonsListenerOnEventRequest>(offset);
2733            // Delegate to tuple encoding.
2734            fidl::encoding::Encode::<MediaButtonsListenerOnEventRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2735                (
2736                    <fidl_fuchsia_ui_input::MediaButtonsEvent as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.event),
2737                ),
2738                encoder, offset, _depth
2739            )
2740        }
2741    }
2742    unsafe impl<
2743        T0: fidl::encoding::Encode<
2744                fidl_fuchsia_ui_input::MediaButtonsEvent,
2745                fidl::encoding::DefaultFuchsiaResourceDialect,
2746            >,
2747    >
2748        fidl::encoding::Encode<
2749            MediaButtonsListenerOnEventRequest,
2750            fidl::encoding::DefaultFuchsiaResourceDialect,
2751        > for (T0,)
2752    {
2753        #[inline]
2754        unsafe fn encode(
2755            self,
2756            encoder: &mut fidl::encoding::Encoder<
2757                '_,
2758                fidl::encoding::DefaultFuchsiaResourceDialect,
2759            >,
2760            offset: usize,
2761            depth: fidl::encoding::Depth,
2762        ) -> fidl::Result<()> {
2763            encoder.debug_check_bounds::<MediaButtonsListenerOnEventRequest>(offset);
2764            // Zero out padding regions. There's no need to apply masks
2765            // because the unmasked parts will be overwritten by fields.
2766            // Write the fields.
2767            self.0.encode(encoder, offset + 0, depth)?;
2768            Ok(())
2769        }
2770    }
2771
2772    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2773        for MediaButtonsListenerOnEventRequest
2774    {
2775        #[inline(always)]
2776        fn new_empty() -> Self {
2777            Self {
2778                event: fidl::new_empty!(
2779                    fidl_fuchsia_ui_input::MediaButtonsEvent,
2780                    fidl::encoding::DefaultFuchsiaResourceDialect
2781                ),
2782            }
2783        }
2784
2785        #[inline]
2786        unsafe fn decode(
2787            &mut self,
2788            decoder: &mut fidl::encoding::Decoder<
2789                '_,
2790                fidl::encoding::DefaultFuchsiaResourceDialect,
2791            >,
2792            offset: usize,
2793            _depth: fidl::encoding::Depth,
2794        ) -> fidl::Result<()> {
2795            decoder.debug_check_bounds::<Self>(offset);
2796            // Verify that padding bytes are zero.
2797            fidl::decode!(
2798                fidl_fuchsia_ui_input::MediaButtonsEvent,
2799                fidl::encoding::DefaultFuchsiaResourceDialect,
2800                &mut self.event,
2801                decoder,
2802                offset + 0,
2803                _depth
2804            )?;
2805            Ok(())
2806        }
2807    }
2808
2809    impl fidl::encoding::ResourceTypeMarker for MediaButtonsListenerOnMediaButtonsEventRequest {
2810        type Borrowed<'a> = &'a mut Self;
2811        fn take_or_borrow<'a>(
2812            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2813        ) -> Self::Borrowed<'a> {
2814            value
2815        }
2816    }
2817
2818    unsafe impl fidl::encoding::TypeMarker for MediaButtonsListenerOnMediaButtonsEventRequest {
2819        type Owned = Self;
2820
2821        #[inline(always)]
2822        fn inline_align(_context: fidl::encoding::Context) -> usize {
2823            8
2824        }
2825
2826        #[inline(always)]
2827        fn inline_size(_context: fidl::encoding::Context) -> usize {
2828            16
2829        }
2830    }
2831
2832    unsafe impl
2833        fidl::encoding::Encode<
2834            MediaButtonsListenerOnMediaButtonsEventRequest,
2835            fidl::encoding::DefaultFuchsiaResourceDialect,
2836        > for &mut MediaButtonsListenerOnMediaButtonsEventRequest
2837    {
2838        #[inline]
2839        unsafe fn encode(
2840            self,
2841            encoder: &mut fidl::encoding::Encoder<
2842                '_,
2843                fidl::encoding::DefaultFuchsiaResourceDialect,
2844            >,
2845            offset: usize,
2846            _depth: fidl::encoding::Depth,
2847        ) -> fidl::Result<()> {
2848            encoder.debug_check_bounds::<MediaButtonsListenerOnMediaButtonsEventRequest>(offset);
2849            // Delegate to tuple encoding.
2850            fidl::encoding::Encode::<MediaButtonsListenerOnMediaButtonsEventRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2851                (
2852                    <fidl_fuchsia_ui_input::MediaButtonsEvent as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.event),
2853                ),
2854                encoder, offset, _depth
2855            )
2856        }
2857    }
2858    unsafe impl<
2859        T0: fidl::encoding::Encode<
2860                fidl_fuchsia_ui_input::MediaButtonsEvent,
2861                fidl::encoding::DefaultFuchsiaResourceDialect,
2862            >,
2863    >
2864        fidl::encoding::Encode<
2865            MediaButtonsListenerOnMediaButtonsEventRequest,
2866            fidl::encoding::DefaultFuchsiaResourceDialect,
2867        > for (T0,)
2868    {
2869        #[inline]
2870        unsafe fn encode(
2871            self,
2872            encoder: &mut fidl::encoding::Encoder<
2873                '_,
2874                fidl::encoding::DefaultFuchsiaResourceDialect,
2875            >,
2876            offset: usize,
2877            depth: fidl::encoding::Depth,
2878        ) -> fidl::Result<()> {
2879            encoder.debug_check_bounds::<MediaButtonsListenerOnMediaButtonsEventRequest>(offset);
2880            // Zero out padding regions. There's no need to apply masks
2881            // because the unmasked parts will be overwritten by fields.
2882            // Write the fields.
2883            self.0.encode(encoder, offset + 0, depth)?;
2884            Ok(())
2885        }
2886    }
2887
2888    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2889        for MediaButtonsListenerOnMediaButtonsEventRequest
2890    {
2891        #[inline(always)]
2892        fn new_empty() -> Self {
2893            Self {
2894                event: fidl::new_empty!(
2895                    fidl_fuchsia_ui_input::MediaButtonsEvent,
2896                    fidl::encoding::DefaultFuchsiaResourceDialect
2897                ),
2898            }
2899        }
2900
2901        #[inline]
2902        unsafe fn decode(
2903            &mut self,
2904            decoder: &mut fidl::encoding::Decoder<
2905                '_,
2906                fidl::encoding::DefaultFuchsiaResourceDialect,
2907            >,
2908            offset: usize,
2909            _depth: fidl::encoding::Depth,
2910        ) -> fidl::Result<()> {
2911            decoder.debug_check_bounds::<Self>(offset);
2912            // Verify that padding bytes are zero.
2913            fidl::decode!(
2914                fidl_fuchsia_ui_input::MediaButtonsEvent,
2915                fidl::encoding::DefaultFuchsiaResourceDialect,
2916                &mut self.event,
2917                decoder,
2918                offset + 0,
2919                _depth
2920            )?;
2921            Ok(())
2922        }
2923    }
2924
2925    impl fidl::encoding::ResourceTypeMarker for TouchButtonsListenerOnEventRequest {
2926        type Borrowed<'a> = &'a mut Self;
2927        fn take_or_borrow<'a>(
2928            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2929        ) -> Self::Borrowed<'a> {
2930            value
2931        }
2932    }
2933
2934    unsafe impl fidl::encoding::TypeMarker for TouchButtonsListenerOnEventRequest {
2935        type Owned = Self;
2936
2937        #[inline(always)]
2938        fn inline_align(_context: fidl::encoding::Context) -> usize {
2939            8
2940        }
2941
2942        #[inline(always)]
2943        fn inline_size(_context: fidl::encoding::Context) -> usize {
2944            16
2945        }
2946    }
2947
2948    unsafe impl
2949        fidl::encoding::Encode<
2950            TouchButtonsListenerOnEventRequest,
2951            fidl::encoding::DefaultFuchsiaResourceDialect,
2952        > for &mut TouchButtonsListenerOnEventRequest
2953    {
2954        #[inline]
2955        unsafe fn encode(
2956            self,
2957            encoder: &mut fidl::encoding::Encoder<
2958                '_,
2959                fidl::encoding::DefaultFuchsiaResourceDialect,
2960            >,
2961            offset: usize,
2962            _depth: fidl::encoding::Depth,
2963        ) -> fidl::Result<()> {
2964            encoder.debug_check_bounds::<TouchButtonsListenerOnEventRequest>(offset);
2965            // Delegate to tuple encoding.
2966            fidl::encoding::Encode::<TouchButtonsListenerOnEventRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2967                (
2968                    <fidl_fuchsia_ui_input::TouchButtonsEvent as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.event),
2969                ),
2970                encoder, offset, _depth
2971            )
2972        }
2973    }
2974    unsafe impl<
2975        T0: fidl::encoding::Encode<
2976                fidl_fuchsia_ui_input::TouchButtonsEvent,
2977                fidl::encoding::DefaultFuchsiaResourceDialect,
2978            >,
2979    >
2980        fidl::encoding::Encode<
2981            TouchButtonsListenerOnEventRequest,
2982            fidl::encoding::DefaultFuchsiaResourceDialect,
2983        > for (T0,)
2984    {
2985        #[inline]
2986        unsafe fn encode(
2987            self,
2988            encoder: &mut fidl::encoding::Encoder<
2989                '_,
2990                fidl::encoding::DefaultFuchsiaResourceDialect,
2991            >,
2992            offset: usize,
2993            depth: fidl::encoding::Depth,
2994        ) -> fidl::Result<()> {
2995            encoder.debug_check_bounds::<TouchButtonsListenerOnEventRequest>(offset);
2996            // Zero out padding regions. There's no need to apply masks
2997            // because the unmasked parts will be overwritten by fields.
2998            // Write the fields.
2999            self.0.encode(encoder, offset + 0, depth)?;
3000            Ok(())
3001        }
3002    }
3003
3004    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3005        for TouchButtonsListenerOnEventRequest
3006    {
3007        #[inline(always)]
3008        fn new_empty() -> Self {
3009            Self {
3010                event: fidl::new_empty!(
3011                    fidl_fuchsia_ui_input::TouchButtonsEvent,
3012                    fidl::encoding::DefaultFuchsiaResourceDialect
3013                ),
3014            }
3015        }
3016
3017        #[inline]
3018        unsafe fn decode(
3019            &mut self,
3020            decoder: &mut fidl::encoding::Decoder<
3021                '_,
3022                fidl::encoding::DefaultFuchsiaResourceDialect,
3023            >,
3024            offset: usize,
3025            _depth: fidl::encoding::Depth,
3026        ) -> fidl::Result<()> {
3027            decoder.debug_check_bounds::<Self>(offset);
3028            // Verify that padding bytes are zero.
3029            fidl::decode!(
3030                fidl_fuchsia_ui_input::TouchButtonsEvent,
3031                fidl::encoding::DefaultFuchsiaResourceDialect,
3032                &mut self.event,
3033                decoder,
3034                offset + 0,
3035                _depth
3036            )?;
3037            Ok(())
3038        }
3039    }
3040}