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