Skip to main content

fidl_fuchsia_ui_policy/
fidl_fuchsia_ui_policy.rs

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