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