Skip to main content

fidl_fuchsia_ui_activity/
fidl_fuchsia_ui_activity.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_activity__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct ProviderWatchStateRequest {
16    pub listener: fidl::endpoints::ClientEnd<ListenerMarker>,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ProviderWatchStateRequest {}
20
21#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
22pub struct ListenerMarker;
23
24impl fidl::endpoints::ProtocolMarker for ListenerMarker {
25    type Proxy = ListenerProxy;
26    type RequestStream = ListenerRequestStream;
27    #[cfg(target_os = "fuchsia")]
28    type SynchronousProxy = ListenerSynchronousProxy;
29
30    const DEBUG_NAME: &'static str = "(anonymous) Listener";
31}
32
33pub trait ListenerProxyInterface: Send + Sync {
34    type OnStateChangedResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
35    fn r#on_state_changed(
36        &self,
37        state: State,
38        transition_time: i64,
39    ) -> Self::OnStateChangedResponseFut;
40}
41#[derive(Debug)]
42#[cfg(target_os = "fuchsia")]
43pub struct ListenerSynchronousProxy {
44    client: fidl::client::sync::Client,
45}
46
47#[cfg(target_os = "fuchsia")]
48impl fidl::endpoints::SynchronousProxy for ListenerSynchronousProxy {
49    type Proxy = ListenerProxy;
50    type Protocol = ListenerMarker;
51
52    fn from_channel(inner: fidl::Channel) -> Self {
53        Self::new(inner)
54    }
55
56    fn into_channel(self) -> fidl::Channel {
57        self.client.into_channel()
58    }
59
60    fn as_channel(&self) -> &fidl::Channel {
61        self.client.as_channel()
62    }
63}
64
65#[cfg(target_os = "fuchsia")]
66impl ListenerSynchronousProxy {
67    pub fn new(channel: fidl::Channel) -> Self {
68        Self { client: fidl::client::sync::Client::new(channel) }
69    }
70
71    pub fn into_channel(self) -> fidl::Channel {
72        self.client.into_channel()
73    }
74
75    /// Waits until an event arrives and returns it. It is safe for other
76    /// threads to make concurrent requests while waiting for an event.
77    pub fn wait_for_event(
78        &self,
79        deadline: zx::MonotonicInstant,
80    ) -> Result<ListenerEvent, fidl::Error> {
81        ListenerEvent::decode(self.client.wait_for_event::<ListenerMarker>(deadline)?)
82    }
83
84    /// Callback that is invoked whenever the system state changes.
85    /// The Listener is expected to acknowledge each call explicitly and will
86    /// not receive new state until this acknowledgement is done.
87    pub fn r#on_state_changed(
88        &self,
89        mut state: State,
90        mut transition_time: i64,
91        ___deadline: zx::MonotonicInstant,
92    ) -> Result<(), fidl::Error> {
93        let _response = self.client.send_query::<
94            ListenerOnStateChangedRequest,
95            fidl::encoding::EmptyPayload,
96            ListenerMarker,
97        >(
98            (state, transition_time,),
99            0xf74db3e6d5ba415,
100            fidl::encoding::DynamicFlags::empty(),
101            ___deadline,
102        )?;
103        Ok(_response)
104    }
105}
106
107#[cfg(target_os = "fuchsia")]
108impl From<ListenerSynchronousProxy> for zx::NullableHandle {
109    fn from(value: ListenerSynchronousProxy) -> Self {
110        value.into_channel().into()
111    }
112}
113
114#[cfg(target_os = "fuchsia")]
115impl From<fidl::Channel> for ListenerSynchronousProxy {
116    fn from(value: fidl::Channel) -> Self {
117        Self::new(value)
118    }
119}
120
121#[cfg(target_os = "fuchsia")]
122impl fidl::endpoints::FromClient for ListenerSynchronousProxy {
123    type Protocol = ListenerMarker;
124
125    fn from_client(value: fidl::endpoints::ClientEnd<ListenerMarker>) -> Self {
126        Self::new(value.into_channel())
127    }
128}
129
130#[derive(Debug, Clone)]
131pub struct ListenerProxy {
132    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
133}
134
135impl fidl::endpoints::Proxy for ListenerProxy {
136    type Protocol = ListenerMarker;
137
138    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
139        Self::new(inner)
140    }
141
142    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
143        self.client.into_channel().map_err(|client| Self { client })
144    }
145
146    fn as_channel(&self) -> &::fidl::AsyncChannel {
147        self.client.as_channel()
148    }
149}
150
151impl ListenerProxy {
152    /// Create a new Proxy for fuchsia.ui.activity/Listener.
153    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
154        let protocol_name = <ListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
155        Self { client: fidl::client::Client::new(channel, protocol_name) }
156    }
157
158    /// Get a Stream of events from the remote end of the protocol.
159    ///
160    /// # Panics
161    ///
162    /// Panics if the event stream was already taken.
163    pub fn take_event_stream(&self) -> ListenerEventStream {
164        ListenerEventStream { event_receiver: self.client.take_event_receiver() }
165    }
166
167    /// Callback that is invoked whenever the system state changes.
168    /// The Listener is expected to acknowledge each call explicitly and will
169    /// not receive new state until this acknowledgement is done.
170    pub fn r#on_state_changed(
171        &self,
172        mut state: State,
173        mut transition_time: i64,
174    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
175        ListenerProxyInterface::r#on_state_changed(self, state, transition_time)
176    }
177}
178
179impl ListenerProxyInterface for ListenerProxy {
180    type OnStateChangedResponseFut =
181        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
182    fn r#on_state_changed(
183        &self,
184        mut state: State,
185        mut transition_time: i64,
186    ) -> Self::OnStateChangedResponseFut {
187        fn _decode(
188            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
189        ) -> Result<(), fidl::Error> {
190            let _response = fidl::client::decode_transaction_body::<
191                fidl::encoding::EmptyPayload,
192                fidl::encoding::DefaultFuchsiaResourceDialect,
193                0xf74db3e6d5ba415,
194            >(_buf?)?;
195            Ok(_response)
196        }
197        self.client.send_query_and_decode::<ListenerOnStateChangedRequest, ()>(
198            (state, transition_time),
199            0xf74db3e6d5ba415,
200            fidl::encoding::DynamicFlags::empty(),
201            _decode,
202        )
203    }
204}
205
206pub struct ListenerEventStream {
207    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
208}
209
210impl std::marker::Unpin for ListenerEventStream {}
211
212impl futures::stream::FusedStream for ListenerEventStream {
213    fn is_terminated(&self) -> bool {
214        self.event_receiver.is_terminated()
215    }
216}
217
218impl futures::Stream for ListenerEventStream {
219    type Item = Result<ListenerEvent, fidl::Error>;
220
221    fn poll_next(
222        mut self: std::pin::Pin<&mut Self>,
223        cx: &mut std::task::Context<'_>,
224    ) -> std::task::Poll<Option<Self::Item>> {
225        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
226            &mut self.event_receiver,
227            cx
228        )?) {
229            Some(buf) => std::task::Poll::Ready(Some(ListenerEvent::decode(buf))),
230            None => std::task::Poll::Ready(None),
231        }
232    }
233}
234
235#[derive(Debug)]
236pub enum ListenerEvent {}
237
238impl ListenerEvent {
239    /// Decodes a message buffer as a [`ListenerEvent`].
240    fn decode(
241        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
242    ) -> Result<ListenerEvent, fidl::Error> {
243        let (bytes, _handles) = buf.split_mut();
244        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
245        debug_assert_eq!(tx_header.tx_id, 0);
246        match tx_header.ordinal {
247            _ => Err(fidl::Error::UnknownOrdinal {
248                ordinal: tx_header.ordinal,
249                protocol_name: <ListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
250            }),
251        }
252    }
253}
254
255/// A Stream of incoming requests for fuchsia.ui.activity/Listener.
256pub struct ListenerRequestStream {
257    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
258    is_terminated: bool,
259}
260
261impl std::marker::Unpin for ListenerRequestStream {}
262
263impl futures::stream::FusedStream for ListenerRequestStream {
264    fn is_terminated(&self) -> bool {
265        self.is_terminated
266    }
267}
268
269impl fidl::endpoints::RequestStream for ListenerRequestStream {
270    type Protocol = ListenerMarker;
271    type ControlHandle = ListenerControlHandle;
272
273    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
274        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
275    }
276
277    fn control_handle(&self) -> Self::ControlHandle {
278        ListenerControlHandle { inner: self.inner.clone() }
279    }
280
281    fn into_inner(
282        self,
283    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
284    {
285        (self.inner, self.is_terminated)
286    }
287
288    fn from_inner(
289        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
290        is_terminated: bool,
291    ) -> Self {
292        Self { inner, is_terminated }
293    }
294}
295
296impl futures::Stream for ListenerRequestStream {
297    type Item = Result<ListenerRequest, fidl::Error>;
298
299    fn poll_next(
300        mut self: std::pin::Pin<&mut Self>,
301        cx: &mut std::task::Context<'_>,
302    ) -> std::task::Poll<Option<Self::Item>> {
303        let this = &mut *self;
304        if this.inner.check_shutdown(cx) {
305            this.is_terminated = true;
306            return std::task::Poll::Ready(None);
307        }
308        if this.is_terminated {
309            panic!("polled ListenerRequestStream after completion");
310        }
311        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
312            |bytes, handles| {
313                match this.inner.channel().read_etc(cx, bytes, handles) {
314                    std::task::Poll::Ready(Ok(())) => {}
315                    std::task::Poll::Pending => return std::task::Poll::Pending,
316                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
317                        this.is_terminated = true;
318                        return std::task::Poll::Ready(None);
319                    }
320                    std::task::Poll::Ready(Err(e)) => {
321                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
322                            e.into(),
323                        ))));
324                    }
325                }
326
327                // A message has been received from the channel
328                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
329
330                std::task::Poll::Ready(Some(match header.ordinal {
331                    0xf74db3e6d5ba415 => {
332                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
333                        let mut req = fidl::new_empty!(
334                            ListenerOnStateChangedRequest,
335                            fidl::encoding::DefaultFuchsiaResourceDialect
336                        );
337                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ListenerOnStateChangedRequest>(&header, _body_bytes, handles, &mut req)?;
338                        let control_handle = ListenerControlHandle { inner: this.inner.clone() };
339                        Ok(ListenerRequest::OnStateChanged {
340                            state: req.state,
341                            transition_time: req.transition_time,
342
343                            responder: ListenerOnStateChangedResponder {
344                                control_handle: std::mem::ManuallyDrop::new(control_handle),
345                                tx_id: header.tx_id,
346                            },
347                        })
348                    }
349                    _ => Err(fidl::Error::UnknownOrdinal {
350                        ordinal: header.ordinal,
351                        protocol_name:
352                            <ListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
353                    }),
354                }))
355            },
356        )
357    }
358}
359
360/// The Listener protocol subscribes to changes in the system's activity
361/// state. Clients which care about the activity state of the system are
362/// expected to implement this protocol and subscribe via Provider.WatchState.
363#[derive(Debug)]
364pub enum ListenerRequest {
365    /// Callback that is invoked whenever the system state changes.
366    /// The Listener is expected to acknowledge each call explicitly and will
367    /// not receive new state until this acknowledgement is done.
368    OnStateChanged {
369        state: State,
370        transition_time: i64,
371        responder: ListenerOnStateChangedResponder,
372    },
373}
374
375impl ListenerRequest {
376    #[allow(irrefutable_let_patterns)]
377    pub fn into_on_state_changed(self) -> Option<(State, i64, ListenerOnStateChangedResponder)> {
378        if let ListenerRequest::OnStateChanged { state, transition_time, responder } = self {
379            Some((state, transition_time, responder))
380        } else {
381            None
382        }
383    }
384
385    /// Name of the method defined in FIDL
386    pub fn method_name(&self) -> &'static str {
387        match *self {
388            ListenerRequest::OnStateChanged { .. } => "on_state_changed",
389        }
390    }
391}
392
393#[derive(Debug, Clone)]
394pub struct ListenerControlHandle {
395    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
396}
397
398impl fidl::endpoints::ControlHandle for ListenerControlHandle {
399    fn shutdown(&self) {
400        self.inner.shutdown()
401    }
402
403    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
404        self.inner.shutdown_with_epitaph(status)
405    }
406
407    fn is_closed(&self) -> bool {
408        self.inner.channel().is_closed()
409    }
410    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
411        self.inner.channel().on_closed()
412    }
413
414    #[cfg(target_os = "fuchsia")]
415    fn signal_peer(
416        &self,
417        clear_mask: zx::Signals,
418        set_mask: zx::Signals,
419    ) -> Result<(), zx_status::Status> {
420        use fidl::Peered;
421        self.inner.channel().signal_peer(clear_mask, set_mask)
422    }
423}
424
425impl ListenerControlHandle {}
426
427#[must_use = "FIDL methods require a response to be sent"]
428#[derive(Debug)]
429pub struct ListenerOnStateChangedResponder {
430    control_handle: std::mem::ManuallyDrop<ListenerControlHandle>,
431    tx_id: u32,
432}
433
434/// Set the the channel to be shutdown (see [`ListenerControlHandle::shutdown`])
435/// if the responder is dropped without sending a response, so that the client
436/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
437impl std::ops::Drop for ListenerOnStateChangedResponder {
438    fn drop(&mut self) {
439        self.control_handle.shutdown();
440        // Safety: drops once, never accessed again
441        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
442    }
443}
444
445impl fidl::endpoints::Responder for ListenerOnStateChangedResponder {
446    type ControlHandle = ListenerControlHandle;
447
448    fn control_handle(&self) -> &ListenerControlHandle {
449        &self.control_handle
450    }
451
452    fn drop_without_shutdown(mut self) {
453        // Safety: drops once, never accessed again due to mem::forget
454        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
455        // Prevent Drop from running (which would shut down the channel)
456        std::mem::forget(self);
457    }
458}
459
460impl ListenerOnStateChangedResponder {
461    /// Sends a response to the FIDL transaction.
462    ///
463    /// Sets the channel to shutdown if an error occurs.
464    pub fn send(self) -> Result<(), fidl::Error> {
465        let _result = self.send_raw();
466        if _result.is_err() {
467            self.control_handle.shutdown();
468        }
469        self.drop_without_shutdown();
470        _result
471    }
472
473    /// Similar to "send" but does not shutdown the channel if an error occurs.
474    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
475        let _result = self.send_raw();
476        self.drop_without_shutdown();
477        _result
478    }
479
480    fn send_raw(&self) -> Result<(), fidl::Error> {
481        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
482            (),
483            self.tx_id,
484            0xf74db3e6d5ba415,
485            fidl::encoding::DynamicFlags::empty(),
486        )
487    }
488}
489
490#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
491pub struct ProviderMarker;
492
493impl fidl::endpoints::ProtocolMarker for ProviderMarker {
494    type Proxy = ProviderProxy;
495    type RequestStream = ProviderRequestStream;
496    #[cfg(target_os = "fuchsia")]
497    type SynchronousProxy = ProviderSynchronousProxy;
498
499    const DEBUG_NAME: &'static str = "fuchsia.ui.activity.Provider";
500}
501impl fidl::endpoints::DiscoverableProtocolMarker for ProviderMarker {}
502
503pub trait ProviderProxyInterface: Send + Sync {
504    fn r#watch_state(
505        &self,
506        listener: fidl::endpoints::ClientEnd<ListenerMarker>,
507    ) -> Result<(), fidl::Error>;
508}
509#[derive(Debug)]
510#[cfg(target_os = "fuchsia")]
511pub struct ProviderSynchronousProxy {
512    client: fidl::client::sync::Client,
513}
514
515#[cfg(target_os = "fuchsia")]
516impl fidl::endpoints::SynchronousProxy for ProviderSynchronousProxy {
517    type Proxy = ProviderProxy;
518    type Protocol = ProviderMarker;
519
520    fn from_channel(inner: fidl::Channel) -> Self {
521        Self::new(inner)
522    }
523
524    fn into_channel(self) -> fidl::Channel {
525        self.client.into_channel()
526    }
527
528    fn as_channel(&self) -> &fidl::Channel {
529        self.client.as_channel()
530    }
531}
532
533#[cfg(target_os = "fuchsia")]
534impl ProviderSynchronousProxy {
535    pub fn new(channel: fidl::Channel) -> Self {
536        Self { client: fidl::client::sync::Client::new(channel) }
537    }
538
539    pub fn into_channel(self) -> fidl::Channel {
540        self.client.into_channel()
541    }
542
543    /// Waits until an event arrives and returns it. It is safe for other
544    /// threads to make concurrent requests while waiting for an event.
545    pub fn wait_for_event(
546        &self,
547        deadline: zx::MonotonicInstant,
548    ) -> Result<ProviderEvent, fidl::Error> {
549        ProviderEvent::decode(self.client.wait_for_event::<ProviderMarker>(deadline)?)
550    }
551
552    /// Subscribe to changes in the system's state.
553    /// The server will always invoke listener.OnStateChanged at least once with
554    /// the initial state, and after that invoke listener.OnStateChanged
555    /// whenever the system's state changes.
556    pub fn r#watch_state(
557        &self,
558        mut listener: fidl::endpoints::ClientEnd<ListenerMarker>,
559    ) -> Result<(), fidl::Error> {
560        self.client.send::<ProviderWatchStateRequest>(
561            (listener,),
562            0x592e25a4cbe7f884,
563            fidl::encoding::DynamicFlags::empty(),
564        )
565    }
566}
567
568#[cfg(target_os = "fuchsia")]
569impl From<ProviderSynchronousProxy> for zx::NullableHandle {
570    fn from(value: ProviderSynchronousProxy) -> Self {
571        value.into_channel().into()
572    }
573}
574
575#[cfg(target_os = "fuchsia")]
576impl From<fidl::Channel> for ProviderSynchronousProxy {
577    fn from(value: fidl::Channel) -> Self {
578        Self::new(value)
579    }
580}
581
582#[cfg(target_os = "fuchsia")]
583impl fidl::endpoints::FromClient for ProviderSynchronousProxy {
584    type Protocol = ProviderMarker;
585
586    fn from_client(value: fidl::endpoints::ClientEnd<ProviderMarker>) -> Self {
587        Self::new(value.into_channel())
588    }
589}
590
591#[derive(Debug, Clone)]
592pub struct ProviderProxy {
593    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
594}
595
596impl fidl::endpoints::Proxy for ProviderProxy {
597    type Protocol = ProviderMarker;
598
599    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
600        Self::new(inner)
601    }
602
603    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
604        self.client.into_channel().map_err(|client| Self { client })
605    }
606
607    fn as_channel(&self) -> &::fidl::AsyncChannel {
608        self.client.as_channel()
609    }
610}
611
612impl ProviderProxy {
613    /// Create a new Proxy for fuchsia.ui.activity/Provider.
614    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
615        let protocol_name = <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
616        Self { client: fidl::client::Client::new(channel, protocol_name) }
617    }
618
619    /// Get a Stream of events from the remote end of the protocol.
620    ///
621    /// # Panics
622    ///
623    /// Panics if the event stream was already taken.
624    pub fn take_event_stream(&self) -> ProviderEventStream {
625        ProviderEventStream { event_receiver: self.client.take_event_receiver() }
626    }
627
628    /// Subscribe to changes in the system's state.
629    /// The server will always invoke listener.OnStateChanged at least once with
630    /// the initial state, and after that invoke listener.OnStateChanged
631    /// whenever the system's state changes.
632    pub fn r#watch_state(
633        &self,
634        mut listener: fidl::endpoints::ClientEnd<ListenerMarker>,
635    ) -> Result<(), fidl::Error> {
636        ProviderProxyInterface::r#watch_state(self, listener)
637    }
638}
639
640impl ProviderProxyInterface for ProviderProxy {
641    fn r#watch_state(
642        &self,
643        mut listener: fidl::endpoints::ClientEnd<ListenerMarker>,
644    ) -> Result<(), fidl::Error> {
645        self.client.send::<ProviderWatchStateRequest>(
646            (listener,),
647            0x592e25a4cbe7f884,
648            fidl::encoding::DynamicFlags::empty(),
649        )
650    }
651}
652
653pub struct ProviderEventStream {
654    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
655}
656
657impl std::marker::Unpin for ProviderEventStream {}
658
659impl futures::stream::FusedStream for ProviderEventStream {
660    fn is_terminated(&self) -> bool {
661        self.event_receiver.is_terminated()
662    }
663}
664
665impl futures::Stream for ProviderEventStream {
666    type Item = Result<ProviderEvent, fidl::Error>;
667
668    fn poll_next(
669        mut self: std::pin::Pin<&mut Self>,
670        cx: &mut std::task::Context<'_>,
671    ) -> std::task::Poll<Option<Self::Item>> {
672        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
673            &mut self.event_receiver,
674            cx
675        )?) {
676            Some(buf) => std::task::Poll::Ready(Some(ProviderEvent::decode(buf))),
677            None => std::task::Poll::Ready(None),
678        }
679    }
680}
681
682#[derive(Debug)]
683pub enum ProviderEvent {}
684
685impl ProviderEvent {
686    /// Decodes a message buffer as a [`ProviderEvent`].
687    fn decode(
688        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
689    ) -> Result<ProviderEvent, fidl::Error> {
690        let (bytes, _handles) = buf.split_mut();
691        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
692        debug_assert_eq!(tx_header.tx_id, 0);
693        match tx_header.ordinal {
694            _ => Err(fidl::Error::UnknownOrdinal {
695                ordinal: tx_header.ordinal,
696                protocol_name: <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
697            }),
698        }
699    }
700}
701
702/// A Stream of incoming requests for fuchsia.ui.activity/Provider.
703pub struct ProviderRequestStream {
704    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
705    is_terminated: bool,
706}
707
708impl std::marker::Unpin for ProviderRequestStream {}
709
710impl futures::stream::FusedStream for ProviderRequestStream {
711    fn is_terminated(&self) -> bool {
712        self.is_terminated
713    }
714}
715
716impl fidl::endpoints::RequestStream for ProviderRequestStream {
717    type Protocol = ProviderMarker;
718    type ControlHandle = ProviderControlHandle;
719
720    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
721        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
722    }
723
724    fn control_handle(&self) -> Self::ControlHandle {
725        ProviderControlHandle { inner: self.inner.clone() }
726    }
727
728    fn into_inner(
729        self,
730    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
731    {
732        (self.inner, self.is_terminated)
733    }
734
735    fn from_inner(
736        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
737        is_terminated: bool,
738    ) -> Self {
739        Self { inner, is_terminated }
740    }
741}
742
743impl futures::Stream for ProviderRequestStream {
744    type Item = Result<ProviderRequest, fidl::Error>;
745
746    fn poll_next(
747        mut self: std::pin::Pin<&mut Self>,
748        cx: &mut std::task::Context<'_>,
749    ) -> std::task::Poll<Option<Self::Item>> {
750        let this = &mut *self;
751        if this.inner.check_shutdown(cx) {
752            this.is_terminated = true;
753            return std::task::Poll::Ready(None);
754        }
755        if this.is_terminated {
756            panic!("polled ProviderRequestStream after completion");
757        }
758        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
759            |bytes, handles| {
760                match this.inner.channel().read_etc(cx, bytes, handles) {
761                    std::task::Poll::Ready(Ok(())) => {}
762                    std::task::Poll::Pending => return std::task::Poll::Pending,
763                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
764                        this.is_terminated = true;
765                        return std::task::Poll::Ready(None);
766                    }
767                    std::task::Poll::Ready(Err(e)) => {
768                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
769                            e.into(),
770                        ))));
771                    }
772                }
773
774                // A message has been received from the channel
775                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
776
777                std::task::Poll::Ready(Some(match header.ordinal {
778                    0x592e25a4cbe7f884 => {
779                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
780                        let mut req = fidl::new_empty!(
781                            ProviderWatchStateRequest,
782                            fidl::encoding::DefaultFuchsiaResourceDialect
783                        );
784                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderWatchStateRequest>(&header, _body_bytes, handles, &mut req)?;
785                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
786                        Ok(ProviderRequest::WatchState { listener: req.listener, control_handle })
787                    }
788                    _ => Err(fidl::Error::UnknownOrdinal {
789                        ordinal: header.ordinal,
790                        protocol_name:
791                            <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
792                    }),
793                }))
794            },
795        )
796    }
797}
798
799/// The Provider protocol offers a subscription interface through
800/// which clients can watch for changes in the system's activity state.
801#[derive(Debug)]
802pub enum ProviderRequest {
803    /// Subscribe to changes in the system's state.
804    /// The server will always invoke listener.OnStateChanged at least once with
805    /// the initial state, and after that invoke listener.OnStateChanged
806    /// whenever the system's state changes.
807    WatchState {
808        listener: fidl::endpoints::ClientEnd<ListenerMarker>,
809        control_handle: ProviderControlHandle,
810    },
811}
812
813impl ProviderRequest {
814    #[allow(irrefutable_let_patterns)]
815    pub fn into_watch_state(
816        self,
817    ) -> Option<(fidl::endpoints::ClientEnd<ListenerMarker>, ProviderControlHandle)> {
818        if let ProviderRequest::WatchState { listener, control_handle } = self {
819            Some((listener, control_handle))
820        } else {
821            None
822        }
823    }
824
825    /// Name of the method defined in FIDL
826    pub fn method_name(&self) -> &'static str {
827        match *self {
828            ProviderRequest::WatchState { .. } => "watch_state",
829        }
830    }
831}
832
833#[derive(Debug, Clone)]
834pub struct ProviderControlHandle {
835    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
836}
837
838impl fidl::endpoints::ControlHandle for ProviderControlHandle {
839    fn shutdown(&self) {
840        self.inner.shutdown()
841    }
842
843    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
844        self.inner.shutdown_with_epitaph(status)
845    }
846
847    fn is_closed(&self) -> bool {
848        self.inner.channel().is_closed()
849    }
850    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
851        self.inner.channel().on_closed()
852    }
853
854    #[cfg(target_os = "fuchsia")]
855    fn signal_peer(
856        &self,
857        clear_mask: zx::Signals,
858        set_mask: zx::Signals,
859    ) -> Result<(), zx_status::Status> {
860        use fidl::Peered;
861        self.inner.channel().signal_peer(clear_mask, set_mask)
862    }
863}
864
865impl ProviderControlHandle {}
866
867mod internal {
868    use super::*;
869
870    impl fidl::encoding::ResourceTypeMarker for ProviderWatchStateRequest {
871        type Borrowed<'a> = &'a mut Self;
872        fn take_or_borrow<'a>(
873            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
874        ) -> Self::Borrowed<'a> {
875            value
876        }
877    }
878
879    unsafe impl fidl::encoding::TypeMarker for ProviderWatchStateRequest {
880        type Owned = Self;
881
882        #[inline(always)]
883        fn inline_align(_context: fidl::encoding::Context) -> usize {
884            4
885        }
886
887        #[inline(always)]
888        fn inline_size(_context: fidl::encoding::Context) -> usize {
889            4
890        }
891    }
892
893    unsafe impl
894        fidl::encoding::Encode<
895            ProviderWatchStateRequest,
896            fidl::encoding::DefaultFuchsiaResourceDialect,
897        > for &mut ProviderWatchStateRequest
898    {
899        #[inline]
900        unsafe fn encode(
901            self,
902            encoder: &mut fidl::encoding::Encoder<
903                '_,
904                fidl::encoding::DefaultFuchsiaResourceDialect,
905            >,
906            offset: usize,
907            _depth: fidl::encoding::Depth,
908        ) -> fidl::Result<()> {
909            encoder.debug_check_bounds::<ProviderWatchStateRequest>(offset);
910            // Delegate to tuple encoding.
911            fidl::encoding::Encode::<ProviderWatchStateRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
912                (
913                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ListenerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.listener),
914                ),
915                encoder, offset, _depth
916            )
917        }
918    }
919    unsafe impl<
920        T0: fidl::encoding::Encode<
921                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ListenerMarker>>,
922                fidl::encoding::DefaultFuchsiaResourceDialect,
923            >,
924    >
925        fidl::encoding::Encode<
926            ProviderWatchStateRequest,
927            fidl::encoding::DefaultFuchsiaResourceDialect,
928        > for (T0,)
929    {
930        #[inline]
931        unsafe fn encode(
932            self,
933            encoder: &mut fidl::encoding::Encoder<
934                '_,
935                fidl::encoding::DefaultFuchsiaResourceDialect,
936            >,
937            offset: usize,
938            depth: fidl::encoding::Depth,
939        ) -> fidl::Result<()> {
940            encoder.debug_check_bounds::<ProviderWatchStateRequest>(offset);
941            // Zero out padding regions. There's no need to apply masks
942            // because the unmasked parts will be overwritten by fields.
943            // Write the fields.
944            self.0.encode(encoder, offset + 0, depth)?;
945            Ok(())
946        }
947    }
948
949    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
950        for ProviderWatchStateRequest
951    {
952        #[inline(always)]
953        fn new_empty() -> Self {
954            Self {
955                listener: fidl::new_empty!(
956                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ListenerMarker>>,
957                    fidl::encoding::DefaultFuchsiaResourceDialect
958                ),
959            }
960        }
961
962        #[inline]
963        unsafe fn decode(
964            &mut self,
965            decoder: &mut fidl::encoding::Decoder<
966                '_,
967                fidl::encoding::DefaultFuchsiaResourceDialect,
968            >,
969            offset: usize,
970            _depth: fidl::encoding::Depth,
971        ) -> fidl::Result<()> {
972            decoder.debug_check_bounds::<Self>(offset);
973            // Verify that padding bytes are zero.
974            fidl::decode!(
975                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ListenerMarker>>,
976                fidl::encoding::DefaultFuchsiaResourceDialect,
977                &mut self.listener,
978                decoder,
979                offset + 0,
980                _depth
981            )?;
982            Ok(())
983        }
984    }
985}