fidl_fuchsia_settings/
fidl_fuchsia_settings.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_settings__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
15pub struct AccessibilityMarker;
16
17impl fidl::endpoints::ProtocolMarker for AccessibilityMarker {
18    type Proxy = AccessibilityProxy;
19    type RequestStream = AccessibilityRequestStream;
20    #[cfg(target_os = "fuchsia")]
21    type SynchronousProxy = AccessibilitySynchronousProxy;
22
23    const DEBUG_NAME: &'static str = "fuchsia.settings.Accessibility";
24}
25impl fidl::endpoints::DiscoverableProtocolMarker for AccessibilityMarker {}
26pub type AccessibilitySetResult = Result<(), Error>;
27
28pub trait AccessibilityProxyInterface: Send + Sync {
29    type WatchResponseFut: std::future::Future<Output = Result<AccessibilitySettings, fidl::Error>>
30        + Send;
31    fn r#watch(&self) -> Self::WatchResponseFut;
32    type SetResponseFut: std::future::Future<Output = Result<AccessibilitySetResult, fidl::Error>>
33        + Send;
34    fn r#set(&self, settings: &AccessibilitySettings) -> Self::SetResponseFut;
35}
36#[derive(Debug)]
37#[cfg(target_os = "fuchsia")]
38pub struct AccessibilitySynchronousProxy {
39    client: fidl::client::sync::Client,
40}
41
42#[cfg(target_os = "fuchsia")]
43impl fidl::endpoints::SynchronousProxy for AccessibilitySynchronousProxy {
44    type Proxy = AccessibilityProxy;
45    type Protocol = AccessibilityMarker;
46
47    fn from_channel(inner: fidl::Channel) -> Self {
48        Self::new(inner)
49    }
50
51    fn into_channel(self) -> fidl::Channel {
52        self.client.into_channel()
53    }
54
55    fn as_channel(&self) -> &fidl::Channel {
56        self.client.as_channel()
57    }
58}
59
60#[cfg(target_os = "fuchsia")]
61impl AccessibilitySynchronousProxy {
62    pub fn new(channel: fidl::Channel) -> Self {
63        let protocol_name = <AccessibilityMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
64        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
65    }
66
67    pub fn into_channel(self) -> fidl::Channel {
68        self.client.into_channel()
69    }
70
71    /// Waits until an event arrives and returns it. It is safe for other
72    /// threads to make concurrent requests while waiting for an event.
73    pub fn wait_for_event(
74        &self,
75        deadline: zx::MonotonicInstant,
76    ) -> Result<AccessibilityEvent, fidl::Error> {
77        AccessibilityEvent::decode(self.client.wait_for_event(deadline)?)
78    }
79
80    /// Gets the current value of all accessibility settings. Returns
81    /// immediately on first call; subsequent calls return when any of the
82    /// values change.
83    ///
84    /// - `settings` all current values of the accessibility settings.
85    /// * see [`AccessibilitySettings`] for their meaning.
86    ///
87    /// If this call fails, it is considered a fatal error and the channel
88    /// will be closed.
89    pub fn r#watch(
90        &self,
91        ___deadline: zx::MonotonicInstant,
92    ) -> Result<AccessibilitySettings, fidl::Error> {
93        let _response =
94            self.client.send_query::<fidl::encoding::EmptyPayload, AccessibilityWatchResponse>(
95                (),
96                0x417d0b95ddbf7674,
97                fidl::encoding::DynamicFlags::empty(),
98                ___deadline,
99            )?;
100        Ok(_response.settings)
101    }
102
103    /// Sets [AccessibilitySettings] settings. Any field not explicitly set in the table performs a
104    /// no-op, and will not make any changes.
105    pub fn r#set(
106        &self,
107        mut settings: &AccessibilitySettings,
108        ___deadline: zx::MonotonicInstant,
109    ) -> Result<AccessibilitySetResult, fidl::Error> {
110        let _response = self.client.send_query::<
111            AccessibilitySetRequest,
112            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
113        >(
114            (settings,),
115            0x298485ef354fb8cb,
116            fidl::encoding::DynamicFlags::empty(),
117            ___deadline,
118        )?;
119        Ok(_response.map(|x| x))
120    }
121}
122
123#[cfg(target_os = "fuchsia")]
124impl From<AccessibilitySynchronousProxy> for zx::Handle {
125    fn from(value: AccessibilitySynchronousProxy) -> Self {
126        value.into_channel().into()
127    }
128}
129
130#[cfg(target_os = "fuchsia")]
131impl From<fidl::Channel> for AccessibilitySynchronousProxy {
132    fn from(value: fidl::Channel) -> Self {
133        Self::new(value)
134    }
135}
136
137#[cfg(target_os = "fuchsia")]
138impl fidl::endpoints::FromClient for AccessibilitySynchronousProxy {
139    type Protocol = AccessibilityMarker;
140
141    fn from_client(value: fidl::endpoints::ClientEnd<AccessibilityMarker>) -> Self {
142        Self::new(value.into_channel())
143    }
144}
145
146#[derive(Debug, Clone)]
147pub struct AccessibilityProxy {
148    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
149}
150
151impl fidl::endpoints::Proxy for AccessibilityProxy {
152    type Protocol = AccessibilityMarker;
153
154    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
155        Self::new(inner)
156    }
157
158    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
159        self.client.into_channel().map_err(|client| Self { client })
160    }
161
162    fn as_channel(&self) -> &::fidl::AsyncChannel {
163        self.client.as_channel()
164    }
165}
166
167impl AccessibilityProxy {
168    /// Create a new Proxy for fuchsia.settings/Accessibility.
169    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
170        let protocol_name = <AccessibilityMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
171        Self { client: fidl::client::Client::new(channel, protocol_name) }
172    }
173
174    /// Get a Stream of events from the remote end of the protocol.
175    ///
176    /// # Panics
177    ///
178    /// Panics if the event stream was already taken.
179    pub fn take_event_stream(&self) -> AccessibilityEventStream {
180        AccessibilityEventStream { event_receiver: self.client.take_event_receiver() }
181    }
182
183    /// Gets the current value of all accessibility settings. Returns
184    /// immediately on first call; subsequent calls return when any of the
185    /// values change.
186    ///
187    /// - `settings` all current values of the accessibility settings.
188    /// * see [`AccessibilitySettings`] for their meaning.
189    ///
190    /// If this call fails, it is considered a fatal error and the channel
191    /// will be closed.
192    pub fn r#watch(
193        &self,
194    ) -> fidl::client::QueryResponseFut<
195        AccessibilitySettings,
196        fidl::encoding::DefaultFuchsiaResourceDialect,
197    > {
198        AccessibilityProxyInterface::r#watch(self)
199    }
200
201    /// Sets [AccessibilitySettings] settings. Any field not explicitly set in the table performs a
202    /// no-op, and will not make any changes.
203    pub fn r#set(
204        &self,
205        mut settings: &AccessibilitySettings,
206    ) -> fidl::client::QueryResponseFut<
207        AccessibilitySetResult,
208        fidl::encoding::DefaultFuchsiaResourceDialect,
209    > {
210        AccessibilityProxyInterface::r#set(self, settings)
211    }
212}
213
214impl AccessibilityProxyInterface for AccessibilityProxy {
215    type WatchResponseFut = fidl::client::QueryResponseFut<
216        AccessibilitySettings,
217        fidl::encoding::DefaultFuchsiaResourceDialect,
218    >;
219    fn r#watch(&self) -> Self::WatchResponseFut {
220        fn _decode(
221            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
222        ) -> Result<AccessibilitySettings, fidl::Error> {
223            let _response = fidl::client::decode_transaction_body::<
224                AccessibilityWatchResponse,
225                fidl::encoding::DefaultFuchsiaResourceDialect,
226                0x417d0b95ddbf7674,
227            >(_buf?)?;
228            Ok(_response.settings)
229        }
230        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, AccessibilitySettings>(
231            (),
232            0x417d0b95ddbf7674,
233            fidl::encoding::DynamicFlags::empty(),
234            _decode,
235        )
236    }
237
238    type SetResponseFut = fidl::client::QueryResponseFut<
239        AccessibilitySetResult,
240        fidl::encoding::DefaultFuchsiaResourceDialect,
241    >;
242    fn r#set(&self, mut settings: &AccessibilitySettings) -> Self::SetResponseFut {
243        fn _decode(
244            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
245        ) -> Result<AccessibilitySetResult, fidl::Error> {
246            let _response = fidl::client::decode_transaction_body::<
247                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
248                fidl::encoding::DefaultFuchsiaResourceDialect,
249                0x298485ef354fb8cb,
250            >(_buf?)?;
251            Ok(_response.map(|x| x))
252        }
253        self.client.send_query_and_decode::<AccessibilitySetRequest, AccessibilitySetResult>(
254            (settings,),
255            0x298485ef354fb8cb,
256            fidl::encoding::DynamicFlags::empty(),
257            _decode,
258        )
259    }
260}
261
262pub struct AccessibilityEventStream {
263    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
264}
265
266impl std::marker::Unpin for AccessibilityEventStream {}
267
268impl futures::stream::FusedStream for AccessibilityEventStream {
269    fn is_terminated(&self) -> bool {
270        self.event_receiver.is_terminated()
271    }
272}
273
274impl futures::Stream for AccessibilityEventStream {
275    type Item = Result<AccessibilityEvent, fidl::Error>;
276
277    fn poll_next(
278        mut self: std::pin::Pin<&mut Self>,
279        cx: &mut std::task::Context<'_>,
280    ) -> std::task::Poll<Option<Self::Item>> {
281        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
282            &mut self.event_receiver,
283            cx
284        )?) {
285            Some(buf) => std::task::Poll::Ready(Some(AccessibilityEvent::decode(buf))),
286            None => std::task::Poll::Ready(None),
287        }
288    }
289}
290
291#[derive(Debug)]
292pub enum AccessibilityEvent {}
293
294impl AccessibilityEvent {
295    /// Decodes a message buffer as a [`AccessibilityEvent`].
296    fn decode(
297        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
298    ) -> Result<AccessibilityEvent, fidl::Error> {
299        let (bytes, _handles) = buf.split_mut();
300        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
301        debug_assert_eq!(tx_header.tx_id, 0);
302        match tx_header.ordinal {
303            _ => Err(fidl::Error::UnknownOrdinal {
304                ordinal: tx_header.ordinal,
305                protocol_name: <AccessibilityMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
306            }),
307        }
308    }
309}
310
311/// A Stream of incoming requests for fuchsia.settings/Accessibility.
312pub struct AccessibilityRequestStream {
313    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
314    is_terminated: bool,
315}
316
317impl std::marker::Unpin for AccessibilityRequestStream {}
318
319impl futures::stream::FusedStream for AccessibilityRequestStream {
320    fn is_terminated(&self) -> bool {
321        self.is_terminated
322    }
323}
324
325impl fidl::endpoints::RequestStream for AccessibilityRequestStream {
326    type Protocol = AccessibilityMarker;
327    type ControlHandle = AccessibilityControlHandle;
328
329    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
330        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
331    }
332
333    fn control_handle(&self) -> Self::ControlHandle {
334        AccessibilityControlHandle { inner: self.inner.clone() }
335    }
336
337    fn into_inner(
338        self,
339    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
340    {
341        (self.inner, self.is_terminated)
342    }
343
344    fn from_inner(
345        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
346        is_terminated: bool,
347    ) -> Self {
348        Self { inner, is_terminated }
349    }
350}
351
352impl futures::Stream for AccessibilityRequestStream {
353    type Item = Result<AccessibilityRequest, fidl::Error>;
354
355    fn poll_next(
356        mut self: std::pin::Pin<&mut Self>,
357        cx: &mut std::task::Context<'_>,
358    ) -> std::task::Poll<Option<Self::Item>> {
359        let this = &mut *self;
360        if this.inner.check_shutdown(cx) {
361            this.is_terminated = true;
362            return std::task::Poll::Ready(None);
363        }
364        if this.is_terminated {
365            panic!("polled AccessibilityRequestStream after completion");
366        }
367        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
368            |bytes, handles| {
369                match this.inner.channel().read_etc(cx, bytes, handles) {
370                    std::task::Poll::Ready(Ok(())) => {}
371                    std::task::Poll::Pending => return std::task::Poll::Pending,
372                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
373                        this.is_terminated = true;
374                        return std::task::Poll::Ready(None);
375                    }
376                    std::task::Poll::Ready(Err(e)) => {
377                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
378                            e.into(),
379                        ))));
380                    }
381                }
382
383                // A message has been received from the channel
384                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
385
386                std::task::Poll::Ready(Some(match header.ordinal {
387                    0x417d0b95ddbf7674 => {
388                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
389                        let mut req = fidl::new_empty!(
390                            fidl::encoding::EmptyPayload,
391                            fidl::encoding::DefaultFuchsiaResourceDialect
392                        );
393                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
394                        let control_handle =
395                            AccessibilityControlHandle { inner: this.inner.clone() };
396                        Ok(AccessibilityRequest::Watch {
397                            responder: AccessibilityWatchResponder {
398                                control_handle: std::mem::ManuallyDrop::new(control_handle),
399                                tx_id: header.tx_id,
400                            },
401                        })
402                    }
403                    0x298485ef354fb8cb => {
404                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
405                        let mut req = fidl::new_empty!(
406                            AccessibilitySetRequest,
407                            fidl::encoding::DefaultFuchsiaResourceDialect
408                        );
409                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<AccessibilitySetRequest>(&header, _body_bytes, handles, &mut req)?;
410                        let control_handle =
411                            AccessibilityControlHandle { inner: this.inner.clone() };
412                        Ok(AccessibilityRequest::Set {
413                            settings: req.settings,
414
415                            responder: AccessibilitySetResponder {
416                                control_handle: std::mem::ManuallyDrop::new(control_handle),
417                                tx_id: header.tx_id,
418                            },
419                        })
420                    }
421                    _ => Err(fidl::Error::UnknownOrdinal {
422                        ordinal: header.ordinal,
423                        protocol_name:
424                            <AccessibilityMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
425                    }),
426                }))
427            },
428        )
429    }
430}
431
432/// Modify or watch accessibility settings that are persisted.
433///
434/// Supported SettingsEpitaph enums:
435/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
436#[derive(Debug)]
437pub enum AccessibilityRequest {
438    /// Gets the current value of all accessibility settings. Returns
439    /// immediately on first call; subsequent calls return when any of the
440    /// values change.
441    ///
442    /// - `settings` all current values of the accessibility settings.
443    /// * see [`AccessibilitySettings`] for their meaning.
444    ///
445    /// If this call fails, it is considered a fatal error and the channel
446    /// will be closed.
447    Watch { responder: AccessibilityWatchResponder },
448    /// Sets [AccessibilitySettings] settings. Any field not explicitly set in the table performs a
449    /// no-op, and will not make any changes.
450    Set { settings: AccessibilitySettings, responder: AccessibilitySetResponder },
451}
452
453impl AccessibilityRequest {
454    #[allow(irrefutable_let_patterns)]
455    pub fn into_watch(self) -> Option<(AccessibilityWatchResponder)> {
456        if let AccessibilityRequest::Watch { responder } = self { Some((responder)) } else { None }
457    }
458
459    #[allow(irrefutable_let_patterns)]
460    pub fn into_set(self) -> Option<(AccessibilitySettings, AccessibilitySetResponder)> {
461        if let AccessibilityRequest::Set { settings, responder } = self {
462            Some((settings, responder))
463        } else {
464            None
465        }
466    }
467
468    /// Name of the method defined in FIDL
469    pub fn method_name(&self) -> &'static str {
470        match *self {
471            AccessibilityRequest::Watch { .. } => "watch",
472            AccessibilityRequest::Set { .. } => "set",
473        }
474    }
475}
476
477#[derive(Debug, Clone)]
478pub struct AccessibilityControlHandle {
479    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
480}
481
482impl fidl::endpoints::ControlHandle for AccessibilityControlHandle {
483    fn shutdown(&self) {
484        self.inner.shutdown()
485    }
486    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
487        self.inner.shutdown_with_epitaph(status)
488    }
489
490    fn is_closed(&self) -> bool {
491        self.inner.channel().is_closed()
492    }
493    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
494        self.inner.channel().on_closed()
495    }
496
497    #[cfg(target_os = "fuchsia")]
498    fn signal_peer(
499        &self,
500        clear_mask: zx::Signals,
501        set_mask: zx::Signals,
502    ) -> Result<(), zx_status::Status> {
503        use fidl::Peered;
504        self.inner.channel().signal_peer(clear_mask, set_mask)
505    }
506}
507
508impl AccessibilityControlHandle {}
509
510#[must_use = "FIDL methods require a response to be sent"]
511#[derive(Debug)]
512pub struct AccessibilityWatchResponder {
513    control_handle: std::mem::ManuallyDrop<AccessibilityControlHandle>,
514    tx_id: u32,
515}
516
517/// Set the the channel to be shutdown (see [`AccessibilityControlHandle::shutdown`])
518/// if the responder is dropped without sending a response, so that the client
519/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
520impl std::ops::Drop for AccessibilityWatchResponder {
521    fn drop(&mut self) {
522        self.control_handle.shutdown();
523        // Safety: drops once, never accessed again
524        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
525    }
526}
527
528impl fidl::endpoints::Responder for AccessibilityWatchResponder {
529    type ControlHandle = AccessibilityControlHandle;
530
531    fn control_handle(&self) -> &AccessibilityControlHandle {
532        &self.control_handle
533    }
534
535    fn drop_without_shutdown(mut self) {
536        // Safety: drops once, never accessed again due to mem::forget
537        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
538        // Prevent Drop from running (which would shut down the channel)
539        std::mem::forget(self);
540    }
541}
542
543impl AccessibilityWatchResponder {
544    /// Sends a response to the FIDL transaction.
545    ///
546    /// Sets the channel to shutdown if an error occurs.
547    pub fn send(self, mut settings: &AccessibilitySettings) -> Result<(), fidl::Error> {
548        let _result = self.send_raw(settings);
549        if _result.is_err() {
550            self.control_handle.shutdown();
551        }
552        self.drop_without_shutdown();
553        _result
554    }
555
556    /// Similar to "send" but does not shutdown the channel if an error occurs.
557    pub fn send_no_shutdown_on_err(
558        self,
559        mut settings: &AccessibilitySettings,
560    ) -> Result<(), fidl::Error> {
561        let _result = self.send_raw(settings);
562        self.drop_without_shutdown();
563        _result
564    }
565
566    fn send_raw(&self, mut settings: &AccessibilitySettings) -> Result<(), fidl::Error> {
567        self.control_handle.inner.send::<AccessibilityWatchResponse>(
568            (settings,),
569            self.tx_id,
570            0x417d0b95ddbf7674,
571            fidl::encoding::DynamicFlags::empty(),
572        )
573    }
574}
575
576#[must_use = "FIDL methods require a response to be sent"]
577#[derive(Debug)]
578pub struct AccessibilitySetResponder {
579    control_handle: std::mem::ManuallyDrop<AccessibilityControlHandle>,
580    tx_id: u32,
581}
582
583/// Set the the channel to be shutdown (see [`AccessibilityControlHandle::shutdown`])
584/// if the responder is dropped without sending a response, so that the client
585/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
586impl std::ops::Drop for AccessibilitySetResponder {
587    fn drop(&mut self) {
588        self.control_handle.shutdown();
589        // Safety: drops once, never accessed again
590        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
591    }
592}
593
594impl fidl::endpoints::Responder for AccessibilitySetResponder {
595    type ControlHandle = AccessibilityControlHandle;
596
597    fn control_handle(&self) -> &AccessibilityControlHandle {
598        &self.control_handle
599    }
600
601    fn drop_without_shutdown(mut self) {
602        // Safety: drops once, never accessed again due to mem::forget
603        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
604        // Prevent Drop from running (which would shut down the channel)
605        std::mem::forget(self);
606    }
607}
608
609impl AccessibilitySetResponder {
610    /// Sends a response to the FIDL transaction.
611    ///
612    /// Sets the channel to shutdown if an error occurs.
613    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
614        let _result = self.send_raw(result);
615        if _result.is_err() {
616            self.control_handle.shutdown();
617        }
618        self.drop_without_shutdown();
619        _result
620    }
621
622    /// Similar to "send" but does not shutdown the channel if an error occurs.
623    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
624        let _result = self.send_raw(result);
625        self.drop_without_shutdown();
626        _result
627    }
628
629    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
630        self.control_handle
631            .inner
632            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
633                result,
634                self.tx_id,
635                0x298485ef354fb8cb,
636                fidl::encoding::DynamicFlags::empty(),
637            )
638    }
639}
640
641#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
642pub struct AudioMarker;
643
644impl fidl::endpoints::ProtocolMarker for AudioMarker {
645    type Proxy = AudioProxy;
646    type RequestStream = AudioRequestStream;
647    #[cfg(target_os = "fuchsia")]
648    type SynchronousProxy = AudioSynchronousProxy;
649
650    const DEBUG_NAME: &'static str = "fuchsia.settings.Audio";
651}
652impl fidl::endpoints::DiscoverableProtocolMarker for AudioMarker {}
653pub type AudioSetResult = Result<(), Error>;
654pub type AudioSet2Result = Result<(), Error>;
655
656pub trait AudioProxyInterface: Send + Sync {
657    type WatchResponseFut: std::future::Future<Output = Result<AudioSettings, fidl::Error>> + Send;
658    fn r#watch(&self) -> Self::WatchResponseFut;
659    type Watch2ResponseFut: std::future::Future<Output = Result<AudioSettings2, fidl::Error>> + Send;
660    fn r#watch2(&self) -> Self::Watch2ResponseFut;
661    type SetResponseFut: std::future::Future<Output = Result<AudioSetResult, fidl::Error>> + Send;
662    fn r#set(&self, settings: &AudioSettings) -> Self::SetResponseFut;
663    type Set2ResponseFut: std::future::Future<Output = Result<AudioSet2Result, fidl::Error>> + Send;
664    fn r#set2(&self, settings: &AudioSettings2) -> Self::Set2ResponseFut;
665}
666#[derive(Debug)]
667#[cfg(target_os = "fuchsia")]
668pub struct AudioSynchronousProxy {
669    client: fidl::client::sync::Client,
670}
671
672#[cfg(target_os = "fuchsia")]
673impl fidl::endpoints::SynchronousProxy for AudioSynchronousProxy {
674    type Proxy = AudioProxy;
675    type Protocol = AudioMarker;
676
677    fn from_channel(inner: fidl::Channel) -> Self {
678        Self::new(inner)
679    }
680
681    fn into_channel(self) -> fidl::Channel {
682        self.client.into_channel()
683    }
684
685    fn as_channel(&self) -> &fidl::Channel {
686        self.client.as_channel()
687    }
688}
689
690#[cfg(target_os = "fuchsia")]
691impl AudioSynchronousProxy {
692    pub fn new(channel: fidl::Channel) -> Self {
693        let protocol_name = <AudioMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
694        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
695    }
696
697    pub fn into_channel(self) -> fidl::Channel {
698        self.client.into_channel()
699    }
700
701    /// Waits until an event arrives and returns it. It is safe for other
702    /// threads to make concurrent requests while waiting for an event.
703    pub fn wait_for_event(
704        &self,
705        deadline: zx::MonotonicInstant,
706    ) -> Result<AudioEvent, fidl::Error> {
707        AudioEvent::decode(self.client.wait_for_event(deadline)?)
708    }
709
710    /// Gets the current [AudioSettings]. Returns immediately on first call;
711    /// subsequent calls return when the value changes.
712    ///
713    /// If this call fails, it is considered a fatal error and the channel
714    /// will be closed.
715    pub fn r#watch(&self, ___deadline: zx::MonotonicInstant) -> Result<AudioSettings, fidl::Error> {
716        let _response =
717            self.client.send_query::<fidl::encoding::EmptyPayload, AudioWatchResponse>(
718                (),
719                0x2995cf83f9d0f805,
720                fidl::encoding::DynamicFlags::empty(),
721                ___deadline,
722            )?;
723        Ok(_response.settings)
724    }
725
726    /// Gets the current [AudioSettings2]. Returns immediately on first call;
727    /// subsequent calls return when the value changes.
728    ///
729    /// If this call fails, it is considered a fatal error and the channel will be closed.
730    pub fn r#watch2(
731        &self,
732        ___deadline: zx::MonotonicInstant,
733    ) -> Result<AudioSettings2, fidl::Error> {
734        let _response = self.client.send_query::<
735            fidl::encoding::EmptyPayload,
736            fidl::encoding::FlexibleType<AudioWatch2Response>,
737        >(
738            (),
739            0x4d10b204de1796e2,
740            fidl::encoding::DynamicFlags::FLEXIBLE,
741            ___deadline,
742        )?
743        .into_result::<AudioMarker>("watch2")?;
744        Ok(_response.settings)
745    }
746
747    /// Sets audio settings. Any field not explicitly set in the table performs a
748    /// no-op, and will not make any changes.
749    pub fn r#set(
750        &self,
751        mut settings: &AudioSettings,
752        ___deadline: zx::MonotonicInstant,
753    ) -> Result<AudioSetResult, fidl::Error> {
754        let _response = self.client.send_query::<AudioSetRequest, fidl::encoding::ResultType<
755            fidl::encoding::EmptyStruct,
756            Error,
757        >>(
758            (settings,),
759            0x4f3865db04da626c,
760            fidl::encoding::DynamicFlags::empty(),
761            ___deadline,
762        )?;
763        Ok(_response.map(|x| x))
764    }
765
766    /// Sets audio settings. Only table fields that are set will lead to any changes; otherwise
767    /// existing settings are unchanged.
768    pub fn r#set2(
769        &self,
770        mut settings: &AudioSettings2,
771        ___deadline: zx::MonotonicInstant,
772    ) -> Result<AudioSet2Result, fidl::Error> {
773        let _response = self.client.send_query::<
774            AudioSet2Request,
775            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
776        >(
777            (settings,),
778            0x1f027e9ed7beefe3,
779            fidl::encoding::DynamicFlags::FLEXIBLE,
780            ___deadline,
781        )?
782        .into_result::<AudioMarker>("set2")?;
783        Ok(_response.map(|x| x))
784    }
785}
786
787#[cfg(target_os = "fuchsia")]
788impl From<AudioSynchronousProxy> for zx::Handle {
789    fn from(value: AudioSynchronousProxy) -> Self {
790        value.into_channel().into()
791    }
792}
793
794#[cfg(target_os = "fuchsia")]
795impl From<fidl::Channel> for AudioSynchronousProxy {
796    fn from(value: fidl::Channel) -> Self {
797        Self::new(value)
798    }
799}
800
801#[cfg(target_os = "fuchsia")]
802impl fidl::endpoints::FromClient for AudioSynchronousProxy {
803    type Protocol = AudioMarker;
804
805    fn from_client(value: fidl::endpoints::ClientEnd<AudioMarker>) -> Self {
806        Self::new(value.into_channel())
807    }
808}
809
810#[derive(Debug, Clone)]
811pub struct AudioProxy {
812    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
813}
814
815impl fidl::endpoints::Proxy for AudioProxy {
816    type Protocol = AudioMarker;
817
818    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
819        Self::new(inner)
820    }
821
822    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
823        self.client.into_channel().map_err(|client| Self { client })
824    }
825
826    fn as_channel(&self) -> &::fidl::AsyncChannel {
827        self.client.as_channel()
828    }
829}
830
831impl AudioProxy {
832    /// Create a new Proxy for fuchsia.settings/Audio.
833    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
834        let protocol_name = <AudioMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
835        Self { client: fidl::client::Client::new(channel, protocol_name) }
836    }
837
838    /// Get a Stream of events from the remote end of the protocol.
839    ///
840    /// # Panics
841    ///
842    /// Panics if the event stream was already taken.
843    pub fn take_event_stream(&self) -> AudioEventStream {
844        AudioEventStream { event_receiver: self.client.take_event_receiver() }
845    }
846
847    /// Gets the current [AudioSettings]. Returns immediately on first call;
848    /// subsequent calls return when the value changes.
849    ///
850    /// If this call fails, it is considered a fatal error and the channel
851    /// will be closed.
852    pub fn r#watch(
853        &self,
854    ) -> fidl::client::QueryResponseFut<AudioSettings, fidl::encoding::DefaultFuchsiaResourceDialect>
855    {
856        AudioProxyInterface::r#watch(self)
857    }
858
859    /// Gets the current [AudioSettings2]. Returns immediately on first call;
860    /// subsequent calls return when the value changes.
861    ///
862    /// If this call fails, it is considered a fatal error and the channel will be closed.
863    pub fn r#watch2(
864        &self,
865    ) -> fidl::client::QueryResponseFut<AudioSettings2, fidl::encoding::DefaultFuchsiaResourceDialect>
866    {
867        AudioProxyInterface::r#watch2(self)
868    }
869
870    /// Sets audio settings. Any field not explicitly set in the table performs a
871    /// no-op, and will not make any changes.
872    pub fn r#set(
873        &self,
874        mut settings: &AudioSettings,
875    ) -> fidl::client::QueryResponseFut<AudioSetResult, fidl::encoding::DefaultFuchsiaResourceDialect>
876    {
877        AudioProxyInterface::r#set(self, settings)
878    }
879
880    /// Sets audio settings. Only table fields that are set will lead to any changes; otherwise
881    /// existing settings are unchanged.
882    pub fn r#set2(
883        &self,
884        mut settings: &AudioSettings2,
885    ) -> fidl::client::QueryResponseFut<
886        AudioSet2Result,
887        fidl::encoding::DefaultFuchsiaResourceDialect,
888    > {
889        AudioProxyInterface::r#set2(self, settings)
890    }
891}
892
893impl AudioProxyInterface for AudioProxy {
894    type WatchResponseFut = fidl::client::QueryResponseFut<
895        AudioSettings,
896        fidl::encoding::DefaultFuchsiaResourceDialect,
897    >;
898    fn r#watch(&self) -> Self::WatchResponseFut {
899        fn _decode(
900            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
901        ) -> Result<AudioSettings, fidl::Error> {
902            let _response = fidl::client::decode_transaction_body::<
903                AudioWatchResponse,
904                fidl::encoding::DefaultFuchsiaResourceDialect,
905                0x2995cf83f9d0f805,
906            >(_buf?)?;
907            Ok(_response.settings)
908        }
909        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, AudioSettings>(
910            (),
911            0x2995cf83f9d0f805,
912            fidl::encoding::DynamicFlags::empty(),
913            _decode,
914        )
915    }
916
917    type Watch2ResponseFut = fidl::client::QueryResponseFut<
918        AudioSettings2,
919        fidl::encoding::DefaultFuchsiaResourceDialect,
920    >;
921    fn r#watch2(&self) -> Self::Watch2ResponseFut {
922        fn _decode(
923            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
924        ) -> Result<AudioSettings2, fidl::Error> {
925            let _response = fidl::client::decode_transaction_body::<
926                fidl::encoding::FlexibleType<AudioWatch2Response>,
927                fidl::encoding::DefaultFuchsiaResourceDialect,
928                0x4d10b204de1796e2,
929            >(_buf?)?
930            .into_result::<AudioMarker>("watch2")?;
931            Ok(_response.settings)
932        }
933        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, AudioSettings2>(
934            (),
935            0x4d10b204de1796e2,
936            fidl::encoding::DynamicFlags::FLEXIBLE,
937            _decode,
938        )
939    }
940
941    type SetResponseFut = fidl::client::QueryResponseFut<
942        AudioSetResult,
943        fidl::encoding::DefaultFuchsiaResourceDialect,
944    >;
945    fn r#set(&self, mut settings: &AudioSettings) -> Self::SetResponseFut {
946        fn _decode(
947            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
948        ) -> Result<AudioSetResult, fidl::Error> {
949            let _response = fidl::client::decode_transaction_body::<
950                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
951                fidl::encoding::DefaultFuchsiaResourceDialect,
952                0x4f3865db04da626c,
953            >(_buf?)?;
954            Ok(_response.map(|x| x))
955        }
956        self.client.send_query_and_decode::<AudioSetRequest, AudioSetResult>(
957            (settings,),
958            0x4f3865db04da626c,
959            fidl::encoding::DynamicFlags::empty(),
960            _decode,
961        )
962    }
963
964    type Set2ResponseFut = fidl::client::QueryResponseFut<
965        AudioSet2Result,
966        fidl::encoding::DefaultFuchsiaResourceDialect,
967    >;
968    fn r#set2(&self, mut settings: &AudioSettings2) -> Self::Set2ResponseFut {
969        fn _decode(
970            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
971        ) -> Result<AudioSet2Result, fidl::Error> {
972            let _response = fidl::client::decode_transaction_body::<
973                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
974                fidl::encoding::DefaultFuchsiaResourceDialect,
975                0x1f027e9ed7beefe3,
976            >(_buf?)?
977            .into_result::<AudioMarker>("set2")?;
978            Ok(_response.map(|x| x))
979        }
980        self.client.send_query_and_decode::<AudioSet2Request, AudioSet2Result>(
981            (settings,),
982            0x1f027e9ed7beefe3,
983            fidl::encoding::DynamicFlags::FLEXIBLE,
984            _decode,
985        )
986    }
987}
988
989pub struct AudioEventStream {
990    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
991}
992
993impl std::marker::Unpin for AudioEventStream {}
994
995impl futures::stream::FusedStream for AudioEventStream {
996    fn is_terminated(&self) -> bool {
997        self.event_receiver.is_terminated()
998    }
999}
1000
1001impl futures::Stream for AudioEventStream {
1002    type Item = Result<AudioEvent, fidl::Error>;
1003
1004    fn poll_next(
1005        mut self: std::pin::Pin<&mut Self>,
1006        cx: &mut std::task::Context<'_>,
1007    ) -> std::task::Poll<Option<Self::Item>> {
1008        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1009            &mut self.event_receiver,
1010            cx
1011        )?) {
1012            Some(buf) => std::task::Poll::Ready(Some(AudioEvent::decode(buf))),
1013            None => std::task::Poll::Ready(None),
1014        }
1015    }
1016}
1017
1018#[derive(Debug)]
1019pub enum AudioEvent {
1020    #[non_exhaustive]
1021    _UnknownEvent {
1022        /// Ordinal of the event that was sent.
1023        ordinal: u64,
1024    },
1025}
1026
1027impl AudioEvent {
1028    /// Decodes a message buffer as a [`AudioEvent`].
1029    fn decode(
1030        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1031    ) -> Result<AudioEvent, fidl::Error> {
1032        let (bytes, _handles) = buf.split_mut();
1033        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1034        debug_assert_eq!(tx_header.tx_id, 0);
1035        match tx_header.ordinal {
1036            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1037                Ok(AudioEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1038            }
1039            _ => Err(fidl::Error::UnknownOrdinal {
1040                ordinal: tx_header.ordinal,
1041                protocol_name: <AudioMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1042            }),
1043        }
1044    }
1045}
1046
1047/// A Stream of incoming requests for fuchsia.settings/Audio.
1048pub struct AudioRequestStream {
1049    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1050    is_terminated: bool,
1051}
1052
1053impl std::marker::Unpin for AudioRequestStream {}
1054
1055impl futures::stream::FusedStream for AudioRequestStream {
1056    fn is_terminated(&self) -> bool {
1057        self.is_terminated
1058    }
1059}
1060
1061impl fidl::endpoints::RequestStream for AudioRequestStream {
1062    type Protocol = AudioMarker;
1063    type ControlHandle = AudioControlHandle;
1064
1065    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1066        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1067    }
1068
1069    fn control_handle(&self) -> Self::ControlHandle {
1070        AudioControlHandle { inner: self.inner.clone() }
1071    }
1072
1073    fn into_inner(
1074        self,
1075    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1076    {
1077        (self.inner, self.is_terminated)
1078    }
1079
1080    fn from_inner(
1081        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1082        is_terminated: bool,
1083    ) -> Self {
1084        Self { inner, is_terminated }
1085    }
1086}
1087
1088impl futures::Stream for AudioRequestStream {
1089    type Item = Result<AudioRequest, fidl::Error>;
1090
1091    fn poll_next(
1092        mut self: std::pin::Pin<&mut Self>,
1093        cx: &mut std::task::Context<'_>,
1094    ) -> std::task::Poll<Option<Self::Item>> {
1095        let this = &mut *self;
1096        if this.inner.check_shutdown(cx) {
1097            this.is_terminated = true;
1098            return std::task::Poll::Ready(None);
1099        }
1100        if this.is_terminated {
1101            panic!("polled AudioRequestStream after completion");
1102        }
1103        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1104            |bytes, handles| {
1105                match this.inner.channel().read_etc(cx, bytes, handles) {
1106                    std::task::Poll::Ready(Ok(())) => {}
1107                    std::task::Poll::Pending => return std::task::Poll::Pending,
1108                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1109                        this.is_terminated = true;
1110                        return std::task::Poll::Ready(None);
1111                    }
1112                    std::task::Poll::Ready(Err(e)) => {
1113                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1114                            e.into(),
1115                        ))));
1116                    }
1117                }
1118
1119                // A message has been received from the channel
1120                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1121
1122                std::task::Poll::Ready(Some(match header.ordinal {
1123                    0x2995cf83f9d0f805 => {
1124                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1125                        let mut req = fidl::new_empty!(
1126                            fidl::encoding::EmptyPayload,
1127                            fidl::encoding::DefaultFuchsiaResourceDialect
1128                        );
1129                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1130                        let control_handle = AudioControlHandle { inner: this.inner.clone() };
1131                        Ok(AudioRequest::Watch {
1132                            responder: AudioWatchResponder {
1133                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1134                                tx_id: header.tx_id,
1135                            },
1136                        })
1137                    }
1138                    0x4d10b204de1796e2 => {
1139                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1140                        let mut req = fidl::new_empty!(
1141                            fidl::encoding::EmptyPayload,
1142                            fidl::encoding::DefaultFuchsiaResourceDialect
1143                        );
1144                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1145                        let control_handle = AudioControlHandle { inner: this.inner.clone() };
1146                        Ok(AudioRequest::Watch2 {
1147                            responder: AudioWatch2Responder {
1148                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1149                                tx_id: header.tx_id,
1150                            },
1151                        })
1152                    }
1153                    0x4f3865db04da626c => {
1154                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1155                        let mut req = fidl::new_empty!(
1156                            AudioSetRequest,
1157                            fidl::encoding::DefaultFuchsiaResourceDialect
1158                        );
1159                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<AudioSetRequest>(&header, _body_bytes, handles, &mut req)?;
1160                        let control_handle = AudioControlHandle { inner: this.inner.clone() };
1161                        Ok(AudioRequest::Set {
1162                            settings: req.settings,
1163
1164                            responder: AudioSetResponder {
1165                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1166                                tx_id: header.tx_id,
1167                            },
1168                        })
1169                    }
1170                    0x1f027e9ed7beefe3 => {
1171                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1172                        let mut req = fidl::new_empty!(
1173                            AudioSet2Request,
1174                            fidl::encoding::DefaultFuchsiaResourceDialect
1175                        );
1176                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<AudioSet2Request>(&header, _body_bytes, handles, &mut req)?;
1177                        let control_handle = AudioControlHandle { inner: this.inner.clone() };
1178                        Ok(AudioRequest::Set2 {
1179                            settings: req.settings,
1180
1181                            responder: AudioSet2Responder {
1182                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1183                                tx_id: header.tx_id,
1184                            },
1185                        })
1186                    }
1187                    _ if header.tx_id == 0
1188                        && header
1189                            .dynamic_flags()
1190                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1191                    {
1192                        Ok(AudioRequest::_UnknownMethod {
1193                            ordinal: header.ordinal,
1194                            control_handle: AudioControlHandle { inner: this.inner.clone() },
1195                            method_type: fidl::MethodType::OneWay,
1196                        })
1197                    }
1198                    _ if header
1199                        .dynamic_flags()
1200                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1201                    {
1202                        this.inner.send_framework_err(
1203                            fidl::encoding::FrameworkErr::UnknownMethod,
1204                            header.tx_id,
1205                            header.ordinal,
1206                            header.dynamic_flags(),
1207                            (bytes, handles),
1208                        )?;
1209                        Ok(AudioRequest::_UnknownMethod {
1210                            ordinal: header.ordinal,
1211                            control_handle: AudioControlHandle { inner: this.inner.clone() },
1212                            method_type: fidl::MethodType::TwoWay,
1213                        })
1214                    }
1215                    _ => Err(fidl::Error::UnknownOrdinal {
1216                        ordinal: header.ordinal,
1217                        protocol_name: <AudioMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1218                    }),
1219                }))
1220            },
1221        )
1222    }
1223}
1224
1225/// Settings related to audio.
1226///
1227/// Supported SettingsEpitaph enums:
1228/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
1229#[derive(Debug)]
1230pub enum AudioRequest {
1231    /// Gets the current [AudioSettings]. Returns immediately on first call;
1232    /// subsequent calls return when the value changes.
1233    ///
1234    /// If this call fails, it is considered a fatal error and the channel
1235    /// will be closed.
1236    Watch { responder: AudioWatchResponder },
1237    /// Gets the current [AudioSettings2]. Returns immediately on first call;
1238    /// subsequent calls return when the value changes.
1239    ///
1240    /// If this call fails, it is considered a fatal error and the channel will be closed.
1241    Watch2 { responder: AudioWatch2Responder },
1242    /// Sets audio settings. Any field not explicitly set in the table performs a
1243    /// no-op, and will not make any changes.
1244    Set { settings: AudioSettings, responder: AudioSetResponder },
1245    /// Sets audio settings. Only table fields that are set will lead to any changes; otherwise
1246    /// existing settings are unchanged.
1247    Set2 { settings: AudioSettings2, responder: AudioSet2Responder },
1248    /// An interaction was received which does not match any known method.
1249    #[non_exhaustive]
1250    _UnknownMethod {
1251        /// Ordinal of the method that was called.
1252        ordinal: u64,
1253        control_handle: AudioControlHandle,
1254        method_type: fidl::MethodType,
1255    },
1256}
1257
1258impl AudioRequest {
1259    #[allow(irrefutable_let_patterns)]
1260    pub fn into_watch(self) -> Option<(AudioWatchResponder)> {
1261        if let AudioRequest::Watch { responder } = self { Some((responder)) } else { None }
1262    }
1263
1264    #[allow(irrefutable_let_patterns)]
1265    pub fn into_watch2(self) -> Option<(AudioWatch2Responder)> {
1266        if let AudioRequest::Watch2 { responder } = self { Some((responder)) } else { None }
1267    }
1268
1269    #[allow(irrefutable_let_patterns)]
1270    pub fn into_set(self) -> Option<(AudioSettings, AudioSetResponder)> {
1271        if let AudioRequest::Set { settings, responder } = self {
1272            Some((settings, responder))
1273        } else {
1274            None
1275        }
1276    }
1277
1278    #[allow(irrefutable_let_patterns)]
1279    pub fn into_set2(self) -> Option<(AudioSettings2, AudioSet2Responder)> {
1280        if let AudioRequest::Set2 { settings, responder } = self {
1281            Some((settings, responder))
1282        } else {
1283            None
1284        }
1285    }
1286
1287    /// Name of the method defined in FIDL
1288    pub fn method_name(&self) -> &'static str {
1289        match *self {
1290            AudioRequest::Watch { .. } => "watch",
1291            AudioRequest::Watch2 { .. } => "watch2",
1292            AudioRequest::Set { .. } => "set",
1293            AudioRequest::Set2 { .. } => "set2",
1294            AudioRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
1295                "unknown one-way method"
1296            }
1297            AudioRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
1298                "unknown two-way method"
1299            }
1300        }
1301    }
1302}
1303
1304#[derive(Debug, Clone)]
1305pub struct AudioControlHandle {
1306    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1307}
1308
1309impl fidl::endpoints::ControlHandle for AudioControlHandle {
1310    fn shutdown(&self) {
1311        self.inner.shutdown()
1312    }
1313    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1314        self.inner.shutdown_with_epitaph(status)
1315    }
1316
1317    fn is_closed(&self) -> bool {
1318        self.inner.channel().is_closed()
1319    }
1320    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1321        self.inner.channel().on_closed()
1322    }
1323
1324    #[cfg(target_os = "fuchsia")]
1325    fn signal_peer(
1326        &self,
1327        clear_mask: zx::Signals,
1328        set_mask: zx::Signals,
1329    ) -> Result<(), zx_status::Status> {
1330        use fidl::Peered;
1331        self.inner.channel().signal_peer(clear_mask, set_mask)
1332    }
1333}
1334
1335impl AudioControlHandle {}
1336
1337#[must_use = "FIDL methods require a response to be sent"]
1338#[derive(Debug)]
1339pub struct AudioWatchResponder {
1340    control_handle: std::mem::ManuallyDrop<AudioControlHandle>,
1341    tx_id: u32,
1342}
1343
1344/// Set the the channel to be shutdown (see [`AudioControlHandle::shutdown`])
1345/// if the responder is dropped without sending a response, so that the client
1346/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1347impl std::ops::Drop for AudioWatchResponder {
1348    fn drop(&mut self) {
1349        self.control_handle.shutdown();
1350        // Safety: drops once, never accessed again
1351        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1352    }
1353}
1354
1355impl fidl::endpoints::Responder for AudioWatchResponder {
1356    type ControlHandle = AudioControlHandle;
1357
1358    fn control_handle(&self) -> &AudioControlHandle {
1359        &self.control_handle
1360    }
1361
1362    fn drop_without_shutdown(mut self) {
1363        // Safety: drops once, never accessed again due to mem::forget
1364        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1365        // Prevent Drop from running (which would shut down the channel)
1366        std::mem::forget(self);
1367    }
1368}
1369
1370impl AudioWatchResponder {
1371    /// Sends a response to the FIDL transaction.
1372    ///
1373    /// Sets the channel to shutdown if an error occurs.
1374    pub fn send(self, mut settings: &AudioSettings) -> Result<(), fidl::Error> {
1375        let _result = self.send_raw(settings);
1376        if _result.is_err() {
1377            self.control_handle.shutdown();
1378        }
1379        self.drop_without_shutdown();
1380        _result
1381    }
1382
1383    /// Similar to "send" but does not shutdown the channel if an error occurs.
1384    pub fn send_no_shutdown_on_err(self, mut settings: &AudioSettings) -> Result<(), fidl::Error> {
1385        let _result = self.send_raw(settings);
1386        self.drop_without_shutdown();
1387        _result
1388    }
1389
1390    fn send_raw(&self, mut settings: &AudioSettings) -> Result<(), fidl::Error> {
1391        self.control_handle.inner.send::<AudioWatchResponse>(
1392            (settings,),
1393            self.tx_id,
1394            0x2995cf83f9d0f805,
1395            fidl::encoding::DynamicFlags::empty(),
1396        )
1397    }
1398}
1399
1400#[must_use = "FIDL methods require a response to be sent"]
1401#[derive(Debug)]
1402pub struct AudioWatch2Responder {
1403    control_handle: std::mem::ManuallyDrop<AudioControlHandle>,
1404    tx_id: u32,
1405}
1406
1407/// Set the the channel to be shutdown (see [`AudioControlHandle::shutdown`])
1408/// if the responder is dropped without sending a response, so that the client
1409/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1410impl std::ops::Drop for AudioWatch2Responder {
1411    fn drop(&mut self) {
1412        self.control_handle.shutdown();
1413        // Safety: drops once, never accessed again
1414        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1415    }
1416}
1417
1418impl fidl::endpoints::Responder for AudioWatch2Responder {
1419    type ControlHandle = AudioControlHandle;
1420
1421    fn control_handle(&self) -> &AudioControlHandle {
1422        &self.control_handle
1423    }
1424
1425    fn drop_without_shutdown(mut self) {
1426        // Safety: drops once, never accessed again due to mem::forget
1427        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1428        // Prevent Drop from running (which would shut down the channel)
1429        std::mem::forget(self);
1430    }
1431}
1432
1433impl AudioWatch2Responder {
1434    /// Sends a response to the FIDL transaction.
1435    ///
1436    /// Sets the channel to shutdown if an error occurs.
1437    pub fn send(self, mut settings: &AudioSettings2) -> Result<(), fidl::Error> {
1438        let _result = self.send_raw(settings);
1439        if _result.is_err() {
1440            self.control_handle.shutdown();
1441        }
1442        self.drop_without_shutdown();
1443        _result
1444    }
1445
1446    /// Similar to "send" but does not shutdown the channel if an error occurs.
1447    pub fn send_no_shutdown_on_err(self, mut settings: &AudioSettings2) -> Result<(), fidl::Error> {
1448        let _result = self.send_raw(settings);
1449        self.drop_without_shutdown();
1450        _result
1451    }
1452
1453    fn send_raw(&self, mut settings: &AudioSettings2) -> Result<(), fidl::Error> {
1454        self.control_handle.inner.send::<fidl::encoding::FlexibleType<AudioWatch2Response>>(
1455            fidl::encoding::Flexible::new((settings,)),
1456            self.tx_id,
1457            0x4d10b204de1796e2,
1458            fidl::encoding::DynamicFlags::FLEXIBLE,
1459        )
1460    }
1461}
1462
1463#[must_use = "FIDL methods require a response to be sent"]
1464#[derive(Debug)]
1465pub struct AudioSetResponder {
1466    control_handle: std::mem::ManuallyDrop<AudioControlHandle>,
1467    tx_id: u32,
1468}
1469
1470/// Set the the channel to be shutdown (see [`AudioControlHandle::shutdown`])
1471/// if the responder is dropped without sending a response, so that the client
1472/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1473impl std::ops::Drop for AudioSetResponder {
1474    fn drop(&mut self) {
1475        self.control_handle.shutdown();
1476        // Safety: drops once, never accessed again
1477        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1478    }
1479}
1480
1481impl fidl::endpoints::Responder for AudioSetResponder {
1482    type ControlHandle = AudioControlHandle;
1483
1484    fn control_handle(&self) -> &AudioControlHandle {
1485        &self.control_handle
1486    }
1487
1488    fn drop_without_shutdown(mut self) {
1489        // Safety: drops once, never accessed again due to mem::forget
1490        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1491        // Prevent Drop from running (which would shut down the channel)
1492        std::mem::forget(self);
1493    }
1494}
1495
1496impl AudioSetResponder {
1497    /// Sends a response to the FIDL transaction.
1498    ///
1499    /// Sets the channel to shutdown if an error occurs.
1500    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1501        let _result = self.send_raw(result);
1502        if _result.is_err() {
1503            self.control_handle.shutdown();
1504        }
1505        self.drop_without_shutdown();
1506        _result
1507    }
1508
1509    /// Similar to "send" but does not shutdown the channel if an error occurs.
1510    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1511        let _result = self.send_raw(result);
1512        self.drop_without_shutdown();
1513        _result
1514    }
1515
1516    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1517        self.control_handle
1518            .inner
1519            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
1520                result,
1521                self.tx_id,
1522                0x4f3865db04da626c,
1523                fidl::encoding::DynamicFlags::empty(),
1524            )
1525    }
1526}
1527
1528#[must_use = "FIDL methods require a response to be sent"]
1529#[derive(Debug)]
1530pub struct AudioSet2Responder {
1531    control_handle: std::mem::ManuallyDrop<AudioControlHandle>,
1532    tx_id: u32,
1533}
1534
1535/// Set the the channel to be shutdown (see [`AudioControlHandle::shutdown`])
1536/// if the responder is dropped without sending a response, so that the client
1537/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1538impl std::ops::Drop for AudioSet2Responder {
1539    fn drop(&mut self) {
1540        self.control_handle.shutdown();
1541        // Safety: drops once, never accessed again
1542        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1543    }
1544}
1545
1546impl fidl::endpoints::Responder for AudioSet2Responder {
1547    type ControlHandle = AudioControlHandle;
1548
1549    fn control_handle(&self) -> &AudioControlHandle {
1550        &self.control_handle
1551    }
1552
1553    fn drop_without_shutdown(mut self) {
1554        // Safety: drops once, never accessed again due to mem::forget
1555        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1556        // Prevent Drop from running (which would shut down the channel)
1557        std::mem::forget(self);
1558    }
1559}
1560
1561impl AudioSet2Responder {
1562    /// Sends a response to the FIDL transaction.
1563    ///
1564    /// Sets the channel to shutdown if an error occurs.
1565    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1566        let _result = self.send_raw(result);
1567        if _result.is_err() {
1568            self.control_handle.shutdown();
1569        }
1570        self.drop_without_shutdown();
1571        _result
1572    }
1573
1574    /// Similar to "send" but does not shutdown the channel if an error occurs.
1575    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1576        let _result = self.send_raw(result);
1577        self.drop_without_shutdown();
1578        _result
1579    }
1580
1581    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1582        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1583            fidl::encoding::EmptyStruct,
1584            Error,
1585        >>(
1586            fidl::encoding::FlexibleResult::new(result),
1587            self.tx_id,
1588            0x1f027e9ed7beefe3,
1589            fidl::encoding::DynamicFlags::FLEXIBLE,
1590        )
1591    }
1592}
1593
1594#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1595pub struct DisplayMarker;
1596
1597impl fidl::endpoints::ProtocolMarker for DisplayMarker {
1598    type Proxy = DisplayProxy;
1599    type RequestStream = DisplayRequestStream;
1600    #[cfg(target_os = "fuchsia")]
1601    type SynchronousProxy = DisplaySynchronousProxy;
1602
1603    const DEBUG_NAME: &'static str = "fuchsia.settings.Display";
1604}
1605impl fidl::endpoints::DiscoverableProtocolMarker for DisplayMarker {}
1606pub type DisplaySetResult = Result<(), Error>;
1607
1608pub trait DisplayProxyInterface: Send + Sync {
1609    type WatchResponseFut: std::future::Future<Output = Result<DisplaySettings, fidl::Error>> + Send;
1610    fn r#watch(&self) -> Self::WatchResponseFut;
1611    type SetResponseFut: std::future::Future<Output = Result<DisplaySetResult, fidl::Error>> + Send;
1612    fn r#set(&self, settings: &DisplaySettings) -> Self::SetResponseFut;
1613}
1614#[derive(Debug)]
1615#[cfg(target_os = "fuchsia")]
1616pub struct DisplaySynchronousProxy {
1617    client: fidl::client::sync::Client,
1618}
1619
1620#[cfg(target_os = "fuchsia")]
1621impl fidl::endpoints::SynchronousProxy for DisplaySynchronousProxy {
1622    type Proxy = DisplayProxy;
1623    type Protocol = DisplayMarker;
1624
1625    fn from_channel(inner: fidl::Channel) -> Self {
1626        Self::new(inner)
1627    }
1628
1629    fn into_channel(self) -> fidl::Channel {
1630        self.client.into_channel()
1631    }
1632
1633    fn as_channel(&self) -> &fidl::Channel {
1634        self.client.as_channel()
1635    }
1636}
1637
1638#[cfg(target_os = "fuchsia")]
1639impl DisplaySynchronousProxy {
1640    pub fn new(channel: fidl::Channel) -> Self {
1641        let protocol_name = <DisplayMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1642        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1643    }
1644
1645    pub fn into_channel(self) -> fidl::Channel {
1646        self.client.into_channel()
1647    }
1648
1649    /// Waits until an event arrives and returns it. It is safe for other
1650    /// threads to make concurrent requests while waiting for an event.
1651    pub fn wait_for_event(
1652        &self,
1653        deadline: zx::MonotonicInstant,
1654    ) -> Result<DisplayEvent, fidl::Error> {
1655        DisplayEvent::decode(self.client.wait_for_event(deadline)?)
1656    }
1657
1658    /// Gets the current [DisplaySettings]. Returns immediately on first call;
1659    /// subsequent calls return when the value changes.
1660    ///
1661    /// If this call fails, it is considered a fatal error and the channel
1662    /// will be closed.
1663    pub fn r#watch(
1664        &self,
1665        ___deadline: zx::MonotonicInstant,
1666    ) -> Result<DisplaySettings, fidl::Error> {
1667        let _response =
1668            self.client.send_query::<fidl::encoding::EmptyPayload, DisplayWatchResponse>(
1669                (),
1670                0x7da3212470364db1,
1671                fidl::encoding::DynamicFlags::empty(),
1672                ___deadline,
1673            )?;
1674        Ok(_response.settings)
1675    }
1676
1677    /// Sets display settings. Any field not explicitly set in the table performs a
1678    /// no-op, and will not make any changes.
1679    pub fn r#set(
1680        &self,
1681        mut settings: &DisplaySettings,
1682        ___deadline: zx::MonotonicInstant,
1683    ) -> Result<DisplaySetResult, fidl::Error> {
1684        let _response = self.client.send_query::<DisplaySetRequest, fidl::encoding::ResultType<
1685            fidl::encoding::EmptyStruct,
1686            Error,
1687        >>(
1688            (settings,),
1689            0x1029e06ace17479c,
1690            fidl::encoding::DynamicFlags::empty(),
1691            ___deadline,
1692        )?;
1693        Ok(_response.map(|x| x))
1694    }
1695}
1696
1697#[cfg(target_os = "fuchsia")]
1698impl From<DisplaySynchronousProxy> for zx::Handle {
1699    fn from(value: DisplaySynchronousProxy) -> Self {
1700        value.into_channel().into()
1701    }
1702}
1703
1704#[cfg(target_os = "fuchsia")]
1705impl From<fidl::Channel> for DisplaySynchronousProxy {
1706    fn from(value: fidl::Channel) -> Self {
1707        Self::new(value)
1708    }
1709}
1710
1711#[cfg(target_os = "fuchsia")]
1712impl fidl::endpoints::FromClient for DisplaySynchronousProxy {
1713    type Protocol = DisplayMarker;
1714
1715    fn from_client(value: fidl::endpoints::ClientEnd<DisplayMarker>) -> Self {
1716        Self::new(value.into_channel())
1717    }
1718}
1719
1720#[derive(Debug, Clone)]
1721pub struct DisplayProxy {
1722    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1723}
1724
1725impl fidl::endpoints::Proxy for DisplayProxy {
1726    type Protocol = DisplayMarker;
1727
1728    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1729        Self::new(inner)
1730    }
1731
1732    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1733        self.client.into_channel().map_err(|client| Self { client })
1734    }
1735
1736    fn as_channel(&self) -> &::fidl::AsyncChannel {
1737        self.client.as_channel()
1738    }
1739}
1740
1741impl DisplayProxy {
1742    /// Create a new Proxy for fuchsia.settings/Display.
1743    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1744        let protocol_name = <DisplayMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1745        Self { client: fidl::client::Client::new(channel, protocol_name) }
1746    }
1747
1748    /// Get a Stream of events from the remote end of the protocol.
1749    ///
1750    /// # Panics
1751    ///
1752    /// Panics if the event stream was already taken.
1753    pub fn take_event_stream(&self) -> DisplayEventStream {
1754        DisplayEventStream { event_receiver: self.client.take_event_receiver() }
1755    }
1756
1757    /// Gets the current [DisplaySettings]. Returns immediately on first call;
1758    /// subsequent calls return when the value changes.
1759    ///
1760    /// If this call fails, it is considered a fatal error and the channel
1761    /// will be closed.
1762    pub fn r#watch(
1763        &self,
1764    ) -> fidl::client::QueryResponseFut<
1765        DisplaySettings,
1766        fidl::encoding::DefaultFuchsiaResourceDialect,
1767    > {
1768        DisplayProxyInterface::r#watch(self)
1769    }
1770
1771    /// Sets display settings. Any field not explicitly set in the table performs a
1772    /// no-op, and will not make any changes.
1773    pub fn r#set(
1774        &self,
1775        mut settings: &DisplaySettings,
1776    ) -> fidl::client::QueryResponseFut<
1777        DisplaySetResult,
1778        fidl::encoding::DefaultFuchsiaResourceDialect,
1779    > {
1780        DisplayProxyInterface::r#set(self, settings)
1781    }
1782}
1783
1784impl DisplayProxyInterface for DisplayProxy {
1785    type WatchResponseFut = fidl::client::QueryResponseFut<
1786        DisplaySettings,
1787        fidl::encoding::DefaultFuchsiaResourceDialect,
1788    >;
1789    fn r#watch(&self) -> Self::WatchResponseFut {
1790        fn _decode(
1791            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1792        ) -> Result<DisplaySettings, fidl::Error> {
1793            let _response = fidl::client::decode_transaction_body::<
1794                DisplayWatchResponse,
1795                fidl::encoding::DefaultFuchsiaResourceDialect,
1796                0x7da3212470364db1,
1797            >(_buf?)?;
1798            Ok(_response.settings)
1799        }
1800        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, DisplaySettings>(
1801            (),
1802            0x7da3212470364db1,
1803            fidl::encoding::DynamicFlags::empty(),
1804            _decode,
1805        )
1806    }
1807
1808    type SetResponseFut = fidl::client::QueryResponseFut<
1809        DisplaySetResult,
1810        fidl::encoding::DefaultFuchsiaResourceDialect,
1811    >;
1812    fn r#set(&self, mut settings: &DisplaySettings) -> Self::SetResponseFut {
1813        fn _decode(
1814            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1815        ) -> Result<DisplaySetResult, fidl::Error> {
1816            let _response = fidl::client::decode_transaction_body::<
1817                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1818                fidl::encoding::DefaultFuchsiaResourceDialect,
1819                0x1029e06ace17479c,
1820            >(_buf?)?;
1821            Ok(_response.map(|x| x))
1822        }
1823        self.client.send_query_and_decode::<DisplaySetRequest, DisplaySetResult>(
1824            (settings,),
1825            0x1029e06ace17479c,
1826            fidl::encoding::DynamicFlags::empty(),
1827            _decode,
1828        )
1829    }
1830}
1831
1832pub struct DisplayEventStream {
1833    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1834}
1835
1836impl std::marker::Unpin for DisplayEventStream {}
1837
1838impl futures::stream::FusedStream for DisplayEventStream {
1839    fn is_terminated(&self) -> bool {
1840        self.event_receiver.is_terminated()
1841    }
1842}
1843
1844impl futures::Stream for DisplayEventStream {
1845    type Item = Result<DisplayEvent, fidl::Error>;
1846
1847    fn poll_next(
1848        mut self: std::pin::Pin<&mut Self>,
1849        cx: &mut std::task::Context<'_>,
1850    ) -> std::task::Poll<Option<Self::Item>> {
1851        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1852            &mut self.event_receiver,
1853            cx
1854        )?) {
1855            Some(buf) => std::task::Poll::Ready(Some(DisplayEvent::decode(buf))),
1856            None => std::task::Poll::Ready(None),
1857        }
1858    }
1859}
1860
1861#[derive(Debug)]
1862pub enum DisplayEvent {}
1863
1864impl DisplayEvent {
1865    /// Decodes a message buffer as a [`DisplayEvent`].
1866    fn decode(
1867        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1868    ) -> Result<DisplayEvent, fidl::Error> {
1869        let (bytes, _handles) = buf.split_mut();
1870        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1871        debug_assert_eq!(tx_header.tx_id, 0);
1872        match tx_header.ordinal {
1873            _ => Err(fidl::Error::UnknownOrdinal {
1874                ordinal: tx_header.ordinal,
1875                protocol_name: <DisplayMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1876            }),
1877        }
1878    }
1879}
1880
1881/// A Stream of incoming requests for fuchsia.settings/Display.
1882pub struct DisplayRequestStream {
1883    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1884    is_terminated: bool,
1885}
1886
1887impl std::marker::Unpin for DisplayRequestStream {}
1888
1889impl futures::stream::FusedStream for DisplayRequestStream {
1890    fn is_terminated(&self) -> bool {
1891        self.is_terminated
1892    }
1893}
1894
1895impl fidl::endpoints::RequestStream for DisplayRequestStream {
1896    type Protocol = DisplayMarker;
1897    type ControlHandle = DisplayControlHandle;
1898
1899    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1900        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1901    }
1902
1903    fn control_handle(&self) -> Self::ControlHandle {
1904        DisplayControlHandle { inner: self.inner.clone() }
1905    }
1906
1907    fn into_inner(
1908        self,
1909    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1910    {
1911        (self.inner, self.is_terminated)
1912    }
1913
1914    fn from_inner(
1915        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1916        is_terminated: bool,
1917    ) -> Self {
1918        Self { inner, is_terminated }
1919    }
1920}
1921
1922impl futures::Stream for DisplayRequestStream {
1923    type Item = Result<DisplayRequest, fidl::Error>;
1924
1925    fn poll_next(
1926        mut self: std::pin::Pin<&mut Self>,
1927        cx: &mut std::task::Context<'_>,
1928    ) -> std::task::Poll<Option<Self::Item>> {
1929        let this = &mut *self;
1930        if this.inner.check_shutdown(cx) {
1931            this.is_terminated = true;
1932            return std::task::Poll::Ready(None);
1933        }
1934        if this.is_terminated {
1935            panic!("polled DisplayRequestStream after completion");
1936        }
1937        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1938            |bytes, handles| {
1939                match this.inner.channel().read_etc(cx, bytes, handles) {
1940                    std::task::Poll::Ready(Ok(())) => {}
1941                    std::task::Poll::Pending => return std::task::Poll::Pending,
1942                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1943                        this.is_terminated = true;
1944                        return std::task::Poll::Ready(None);
1945                    }
1946                    std::task::Poll::Ready(Err(e)) => {
1947                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1948                            e.into(),
1949                        ))));
1950                    }
1951                }
1952
1953                // A message has been received from the channel
1954                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1955
1956                std::task::Poll::Ready(Some(match header.ordinal {
1957                    0x7da3212470364db1 => {
1958                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1959                        let mut req = fidl::new_empty!(
1960                            fidl::encoding::EmptyPayload,
1961                            fidl::encoding::DefaultFuchsiaResourceDialect
1962                        );
1963                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1964                        let control_handle = DisplayControlHandle { inner: this.inner.clone() };
1965                        Ok(DisplayRequest::Watch {
1966                            responder: DisplayWatchResponder {
1967                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1968                                tx_id: header.tx_id,
1969                            },
1970                        })
1971                    }
1972                    0x1029e06ace17479c => {
1973                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1974                        let mut req = fidl::new_empty!(
1975                            DisplaySetRequest,
1976                            fidl::encoding::DefaultFuchsiaResourceDialect
1977                        );
1978                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DisplaySetRequest>(&header, _body_bytes, handles, &mut req)?;
1979                        let control_handle = DisplayControlHandle { inner: this.inner.clone() };
1980                        Ok(DisplayRequest::Set {
1981                            settings: req.settings,
1982
1983                            responder: DisplaySetResponder {
1984                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1985                                tx_id: header.tx_id,
1986                            },
1987                        })
1988                    }
1989                    _ => Err(fidl::Error::UnknownOrdinal {
1990                        ordinal: header.ordinal,
1991                        protocol_name:
1992                            <DisplayMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1993                    }),
1994                }))
1995            },
1996        )
1997    }
1998}
1999
2000/// Settings related to display.
2001///
2002/// Supported SettingsEpitaph enums:
2003/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
2004#[derive(Debug)]
2005pub enum DisplayRequest {
2006    /// Gets the current [DisplaySettings]. Returns immediately on first call;
2007    /// subsequent calls return when the value changes.
2008    ///
2009    /// If this call fails, it is considered a fatal error and the channel
2010    /// will be closed.
2011    Watch { responder: DisplayWatchResponder },
2012    /// Sets display settings. Any field not explicitly set in the table performs a
2013    /// no-op, and will not make any changes.
2014    Set { settings: DisplaySettings, responder: DisplaySetResponder },
2015}
2016
2017impl DisplayRequest {
2018    #[allow(irrefutable_let_patterns)]
2019    pub fn into_watch(self) -> Option<(DisplayWatchResponder)> {
2020        if let DisplayRequest::Watch { responder } = self { Some((responder)) } else { None }
2021    }
2022
2023    #[allow(irrefutable_let_patterns)]
2024    pub fn into_set(self) -> Option<(DisplaySettings, DisplaySetResponder)> {
2025        if let DisplayRequest::Set { settings, responder } = self {
2026            Some((settings, responder))
2027        } else {
2028            None
2029        }
2030    }
2031
2032    /// Name of the method defined in FIDL
2033    pub fn method_name(&self) -> &'static str {
2034        match *self {
2035            DisplayRequest::Watch { .. } => "watch",
2036            DisplayRequest::Set { .. } => "set",
2037        }
2038    }
2039}
2040
2041#[derive(Debug, Clone)]
2042pub struct DisplayControlHandle {
2043    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2044}
2045
2046impl fidl::endpoints::ControlHandle for DisplayControlHandle {
2047    fn shutdown(&self) {
2048        self.inner.shutdown()
2049    }
2050    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2051        self.inner.shutdown_with_epitaph(status)
2052    }
2053
2054    fn is_closed(&self) -> bool {
2055        self.inner.channel().is_closed()
2056    }
2057    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2058        self.inner.channel().on_closed()
2059    }
2060
2061    #[cfg(target_os = "fuchsia")]
2062    fn signal_peer(
2063        &self,
2064        clear_mask: zx::Signals,
2065        set_mask: zx::Signals,
2066    ) -> Result<(), zx_status::Status> {
2067        use fidl::Peered;
2068        self.inner.channel().signal_peer(clear_mask, set_mask)
2069    }
2070}
2071
2072impl DisplayControlHandle {}
2073
2074#[must_use = "FIDL methods require a response to be sent"]
2075#[derive(Debug)]
2076pub struct DisplayWatchResponder {
2077    control_handle: std::mem::ManuallyDrop<DisplayControlHandle>,
2078    tx_id: u32,
2079}
2080
2081/// Set the the channel to be shutdown (see [`DisplayControlHandle::shutdown`])
2082/// if the responder is dropped without sending a response, so that the client
2083/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2084impl std::ops::Drop for DisplayWatchResponder {
2085    fn drop(&mut self) {
2086        self.control_handle.shutdown();
2087        // Safety: drops once, never accessed again
2088        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2089    }
2090}
2091
2092impl fidl::endpoints::Responder for DisplayWatchResponder {
2093    type ControlHandle = DisplayControlHandle;
2094
2095    fn control_handle(&self) -> &DisplayControlHandle {
2096        &self.control_handle
2097    }
2098
2099    fn drop_without_shutdown(mut self) {
2100        // Safety: drops once, never accessed again due to mem::forget
2101        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2102        // Prevent Drop from running (which would shut down the channel)
2103        std::mem::forget(self);
2104    }
2105}
2106
2107impl DisplayWatchResponder {
2108    /// Sends a response to the FIDL transaction.
2109    ///
2110    /// Sets the channel to shutdown if an error occurs.
2111    pub fn send(self, mut settings: &DisplaySettings) -> Result<(), fidl::Error> {
2112        let _result = self.send_raw(settings);
2113        if _result.is_err() {
2114            self.control_handle.shutdown();
2115        }
2116        self.drop_without_shutdown();
2117        _result
2118    }
2119
2120    /// Similar to "send" but does not shutdown the channel if an error occurs.
2121    pub fn send_no_shutdown_on_err(
2122        self,
2123        mut settings: &DisplaySettings,
2124    ) -> Result<(), fidl::Error> {
2125        let _result = self.send_raw(settings);
2126        self.drop_without_shutdown();
2127        _result
2128    }
2129
2130    fn send_raw(&self, mut settings: &DisplaySettings) -> Result<(), fidl::Error> {
2131        self.control_handle.inner.send::<DisplayWatchResponse>(
2132            (settings,),
2133            self.tx_id,
2134            0x7da3212470364db1,
2135            fidl::encoding::DynamicFlags::empty(),
2136        )
2137    }
2138}
2139
2140#[must_use = "FIDL methods require a response to be sent"]
2141#[derive(Debug)]
2142pub struct DisplaySetResponder {
2143    control_handle: std::mem::ManuallyDrop<DisplayControlHandle>,
2144    tx_id: u32,
2145}
2146
2147/// Set the the channel to be shutdown (see [`DisplayControlHandle::shutdown`])
2148/// if the responder is dropped without sending a response, so that the client
2149/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2150impl std::ops::Drop for DisplaySetResponder {
2151    fn drop(&mut self) {
2152        self.control_handle.shutdown();
2153        // Safety: drops once, never accessed again
2154        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2155    }
2156}
2157
2158impl fidl::endpoints::Responder for DisplaySetResponder {
2159    type ControlHandle = DisplayControlHandle;
2160
2161    fn control_handle(&self) -> &DisplayControlHandle {
2162        &self.control_handle
2163    }
2164
2165    fn drop_without_shutdown(mut self) {
2166        // Safety: drops once, never accessed again due to mem::forget
2167        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2168        // Prevent Drop from running (which would shut down the channel)
2169        std::mem::forget(self);
2170    }
2171}
2172
2173impl DisplaySetResponder {
2174    /// Sends a response to the FIDL transaction.
2175    ///
2176    /// Sets the channel to shutdown if an error occurs.
2177    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2178        let _result = self.send_raw(result);
2179        if _result.is_err() {
2180            self.control_handle.shutdown();
2181        }
2182        self.drop_without_shutdown();
2183        _result
2184    }
2185
2186    /// Similar to "send" but does not shutdown the channel if an error occurs.
2187    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2188        let _result = self.send_raw(result);
2189        self.drop_without_shutdown();
2190        _result
2191    }
2192
2193    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2194        self.control_handle
2195            .inner
2196            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
2197                result,
2198                self.tx_id,
2199                0x1029e06ace17479c,
2200                fidl::encoding::DynamicFlags::empty(),
2201            )
2202    }
2203}
2204
2205#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2206pub struct DoNotDisturbMarker;
2207
2208impl fidl::endpoints::ProtocolMarker for DoNotDisturbMarker {
2209    type Proxy = DoNotDisturbProxy;
2210    type RequestStream = DoNotDisturbRequestStream;
2211    #[cfg(target_os = "fuchsia")]
2212    type SynchronousProxy = DoNotDisturbSynchronousProxy;
2213
2214    const DEBUG_NAME: &'static str = "fuchsia.settings.DoNotDisturb";
2215}
2216impl fidl::endpoints::DiscoverableProtocolMarker for DoNotDisturbMarker {}
2217pub type DoNotDisturbSetResult = Result<(), Error>;
2218
2219pub trait DoNotDisturbProxyInterface: Send + Sync {
2220    type WatchResponseFut: std::future::Future<Output = Result<DoNotDisturbSettings, fidl::Error>>
2221        + Send;
2222    fn r#watch(&self) -> Self::WatchResponseFut;
2223    type SetResponseFut: std::future::Future<Output = Result<DoNotDisturbSetResult, fidl::Error>>
2224        + Send;
2225    fn r#set(&self, settings: &DoNotDisturbSettings) -> Self::SetResponseFut;
2226}
2227#[derive(Debug)]
2228#[cfg(target_os = "fuchsia")]
2229pub struct DoNotDisturbSynchronousProxy {
2230    client: fidl::client::sync::Client,
2231}
2232
2233#[cfg(target_os = "fuchsia")]
2234impl fidl::endpoints::SynchronousProxy for DoNotDisturbSynchronousProxy {
2235    type Proxy = DoNotDisturbProxy;
2236    type Protocol = DoNotDisturbMarker;
2237
2238    fn from_channel(inner: fidl::Channel) -> Self {
2239        Self::new(inner)
2240    }
2241
2242    fn into_channel(self) -> fidl::Channel {
2243        self.client.into_channel()
2244    }
2245
2246    fn as_channel(&self) -> &fidl::Channel {
2247        self.client.as_channel()
2248    }
2249}
2250
2251#[cfg(target_os = "fuchsia")]
2252impl DoNotDisturbSynchronousProxy {
2253    pub fn new(channel: fidl::Channel) -> Self {
2254        let protocol_name = <DoNotDisturbMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2255        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
2256    }
2257
2258    pub fn into_channel(self) -> fidl::Channel {
2259        self.client.into_channel()
2260    }
2261
2262    /// Waits until an event arrives and returns it. It is safe for other
2263    /// threads to make concurrent requests while waiting for an event.
2264    pub fn wait_for_event(
2265        &self,
2266        deadline: zx::MonotonicInstant,
2267    ) -> Result<DoNotDisturbEvent, fidl::Error> {
2268        DoNotDisturbEvent::decode(self.client.wait_for_event(deadline)?)
2269    }
2270
2271    /// Gets the current [`DoNotDisturbSettings`]. Returns immediately on first
2272    /// call; subsequent calls return when the values change.
2273    ///
2274    /// If this call fails, it is considered a fatal error and the channel
2275    /// will be closed.
2276    pub fn r#watch(
2277        &self,
2278        ___deadline: zx::MonotonicInstant,
2279    ) -> Result<DoNotDisturbSettings, fidl::Error> {
2280        let _response =
2281            self.client.send_query::<fidl::encoding::EmptyPayload, DoNotDisturbWatchResponse>(
2282                (),
2283                0x1eeae2f97a5547fb,
2284                fidl::encoding::DynamicFlags::empty(),
2285                ___deadline,
2286            )?;
2287        Ok(_response.settings)
2288    }
2289
2290    /// Sets [`DoNotDisturbSettings`] settings. Any field not explicitly set in
2291    /// the table performs a no-op, and will not make any changes.
2292    pub fn r#set(
2293        &self,
2294        mut settings: &DoNotDisturbSettings,
2295        ___deadline: zx::MonotonicInstant,
2296    ) -> Result<DoNotDisturbSetResult, fidl::Error> {
2297        let _response = self.client.send_query::<
2298            DoNotDisturbSetRequest,
2299            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2300        >(
2301            (settings,),
2302            0x7fef934e7f5777b0,
2303            fidl::encoding::DynamicFlags::empty(),
2304            ___deadline,
2305        )?;
2306        Ok(_response.map(|x| x))
2307    }
2308}
2309
2310#[cfg(target_os = "fuchsia")]
2311impl From<DoNotDisturbSynchronousProxy> for zx::Handle {
2312    fn from(value: DoNotDisturbSynchronousProxy) -> Self {
2313        value.into_channel().into()
2314    }
2315}
2316
2317#[cfg(target_os = "fuchsia")]
2318impl From<fidl::Channel> for DoNotDisturbSynchronousProxy {
2319    fn from(value: fidl::Channel) -> Self {
2320        Self::new(value)
2321    }
2322}
2323
2324#[cfg(target_os = "fuchsia")]
2325impl fidl::endpoints::FromClient for DoNotDisturbSynchronousProxy {
2326    type Protocol = DoNotDisturbMarker;
2327
2328    fn from_client(value: fidl::endpoints::ClientEnd<DoNotDisturbMarker>) -> Self {
2329        Self::new(value.into_channel())
2330    }
2331}
2332
2333#[derive(Debug, Clone)]
2334pub struct DoNotDisturbProxy {
2335    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2336}
2337
2338impl fidl::endpoints::Proxy for DoNotDisturbProxy {
2339    type Protocol = DoNotDisturbMarker;
2340
2341    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2342        Self::new(inner)
2343    }
2344
2345    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2346        self.client.into_channel().map_err(|client| Self { client })
2347    }
2348
2349    fn as_channel(&self) -> &::fidl::AsyncChannel {
2350        self.client.as_channel()
2351    }
2352}
2353
2354impl DoNotDisturbProxy {
2355    /// Create a new Proxy for fuchsia.settings/DoNotDisturb.
2356    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2357        let protocol_name = <DoNotDisturbMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2358        Self { client: fidl::client::Client::new(channel, protocol_name) }
2359    }
2360
2361    /// Get a Stream of events from the remote end of the protocol.
2362    ///
2363    /// # Panics
2364    ///
2365    /// Panics if the event stream was already taken.
2366    pub fn take_event_stream(&self) -> DoNotDisturbEventStream {
2367        DoNotDisturbEventStream { event_receiver: self.client.take_event_receiver() }
2368    }
2369
2370    /// Gets the current [`DoNotDisturbSettings`]. Returns immediately on first
2371    /// call; subsequent calls return when the values change.
2372    ///
2373    /// If this call fails, it is considered a fatal error and the channel
2374    /// will be closed.
2375    pub fn r#watch(
2376        &self,
2377    ) -> fidl::client::QueryResponseFut<
2378        DoNotDisturbSettings,
2379        fidl::encoding::DefaultFuchsiaResourceDialect,
2380    > {
2381        DoNotDisturbProxyInterface::r#watch(self)
2382    }
2383
2384    /// Sets [`DoNotDisturbSettings`] settings. Any field not explicitly set in
2385    /// the table performs a no-op, and will not make any changes.
2386    pub fn r#set(
2387        &self,
2388        mut settings: &DoNotDisturbSettings,
2389    ) -> fidl::client::QueryResponseFut<
2390        DoNotDisturbSetResult,
2391        fidl::encoding::DefaultFuchsiaResourceDialect,
2392    > {
2393        DoNotDisturbProxyInterface::r#set(self, settings)
2394    }
2395}
2396
2397impl DoNotDisturbProxyInterface for DoNotDisturbProxy {
2398    type WatchResponseFut = fidl::client::QueryResponseFut<
2399        DoNotDisturbSettings,
2400        fidl::encoding::DefaultFuchsiaResourceDialect,
2401    >;
2402    fn r#watch(&self) -> Self::WatchResponseFut {
2403        fn _decode(
2404            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2405        ) -> Result<DoNotDisturbSettings, fidl::Error> {
2406            let _response = fidl::client::decode_transaction_body::<
2407                DoNotDisturbWatchResponse,
2408                fidl::encoding::DefaultFuchsiaResourceDialect,
2409                0x1eeae2f97a5547fb,
2410            >(_buf?)?;
2411            Ok(_response.settings)
2412        }
2413        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, DoNotDisturbSettings>(
2414            (),
2415            0x1eeae2f97a5547fb,
2416            fidl::encoding::DynamicFlags::empty(),
2417            _decode,
2418        )
2419    }
2420
2421    type SetResponseFut = fidl::client::QueryResponseFut<
2422        DoNotDisturbSetResult,
2423        fidl::encoding::DefaultFuchsiaResourceDialect,
2424    >;
2425    fn r#set(&self, mut settings: &DoNotDisturbSettings) -> Self::SetResponseFut {
2426        fn _decode(
2427            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2428        ) -> Result<DoNotDisturbSetResult, fidl::Error> {
2429            let _response = fidl::client::decode_transaction_body::<
2430                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2431                fidl::encoding::DefaultFuchsiaResourceDialect,
2432                0x7fef934e7f5777b0,
2433            >(_buf?)?;
2434            Ok(_response.map(|x| x))
2435        }
2436        self.client.send_query_and_decode::<DoNotDisturbSetRequest, DoNotDisturbSetResult>(
2437            (settings,),
2438            0x7fef934e7f5777b0,
2439            fidl::encoding::DynamicFlags::empty(),
2440            _decode,
2441        )
2442    }
2443}
2444
2445pub struct DoNotDisturbEventStream {
2446    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2447}
2448
2449impl std::marker::Unpin for DoNotDisturbEventStream {}
2450
2451impl futures::stream::FusedStream for DoNotDisturbEventStream {
2452    fn is_terminated(&self) -> bool {
2453        self.event_receiver.is_terminated()
2454    }
2455}
2456
2457impl futures::Stream for DoNotDisturbEventStream {
2458    type Item = Result<DoNotDisturbEvent, fidl::Error>;
2459
2460    fn poll_next(
2461        mut self: std::pin::Pin<&mut Self>,
2462        cx: &mut std::task::Context<'_>,
2463    ) -> std::task::Poll<Option<Self::Item>> {
2464        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2465            &mut self.event_receiver,
2466            cx
2467        )?) {
2468            Some(buf) => std::task::Poll::Ready(Some(DoNotDisturbEvent::decode(buf))),
2469            None => std::task::Poll::Ready(None),
2470        }
2471    }
2472}
2473
2474#[derive(Debug)]
2475pub enum DoNotDisturbEvent {}
2476
2477impl DoNotDisturbEvent {
2478    /// Decodes a message buffer as a [`DoNotDisturbEvent`].
2479    fn decode(
2480        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2481    ) -> Result<DoNotDisturbEvent, fidl::Error> {
2482        let (bytes, _handles) = buf.split_mut();
2483        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2484        debug_assert_eq!(tx_header.tx_id, 0);
2485        match tx_header.ordinal {
2486            _ => Err(fidl::Error::UnknownOrdinal {
2487                ordinal: tx_header.ordinal,
2488                protocol_name: <DoNotDisturbMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2489            }),
2490        }
2491    }
2492}
2493
2494/// A Stream of incoming requests for fuchsia.settings/DoNotDisturb.
2495pub struct DoNotDisturbRequestStream {
2496    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2497    is_terminated: bool,
2498}
2499
2500impl std::marker::Unpin for DoNotDisturbRequestStream {}
2501
2502impl futures::stream::FusedStream for DoNotDisturbRequestStream {
2503    fn is_terminated(&self) -> bool {
2504        self.is_terminated
2505    }
2506}
2507
2508impl fidl::endpoints::RequestStream for DoNotDisturbRequestStream {
2509    type Protocol = DoNotDisturbMarker;
2510    type ControlHandle = DoNotDisturbControlHandle;
2511
2512    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2513        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2514    }
2515
2516    fn control_handle(&self) -> Self::ControlHandle {
2517        DoNotDisturbControlHandle { inner: self.inner.clone() }
2518    }
2519
2520    fn into_inner(
2521        self,
2522    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2523    {
2524        (self.inner, self.is_terminated)
2525    }
2526
2527    fn from_inner(
2528        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2529        is_terminated: bool,
2530    ) -> Self {
2531        Self { inner, is_terminated }
2532    }
2533}
2534
2535impl futures::Stream for DoNotDisturbRequestStream {
2536    type Item = Result<DoNotDisturbRequest, fidl::Error>;
2537
2538    fn poll_next(
2539        mut self: std::pin::Pin<&mut Self>,
2540        cx: &mut std::task::Context<'_>,
2541    ) -> std::task::Poll<Option<Self::Item>> {
2542        let this = &mut *self;
2543        if this.inner.check_shutdown(cx) {
2544            this.is_terminated = true;
2545            return std::task::Poll::Ready(None);
2546        }
2547        if this.is_terminated {
2548            panic!("polled DoNotDisturbRequestStream after completion");
2549        }
2550        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2551            |bytes, handles| {
2552                match this.inner.channel().read_etc(cx, bytes, handles) {
2553                    std::task::Poll::Ready(Ok(())) => {}
2554                    std::task::Poll::Pending => return std::task::Poll::Pending,
2555                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2556                        this.is_terminated = true;
2557                        return std::task::Poll::Ready(None);
2558                    }
2559                    std::task::Poll::Ready(Err(e)) => {
2560                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2561                            e.into(),
2562                        ))));
2563                    }
2564                }
2565
2566                // A message has been received from the channel
2567                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2568
2569                std::task::Poll::Ready(Some(match header.ordinal {
2570                    0x1eeae2f97a5547fb => {
2571                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2572                        let mut req = fidl::new_empty!(
2573                            fidl::encoding::EmptyPayload,
2574                            fidl::encoding::DefaultFuchsiaResourceDialect
2575                        );
2576                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
2577                        let control_handle =
2578                            DoNotDisturbControlHandle { inner: this.inner.clone() };
2579                        Ok(DoNotDisturbRequest::Watch {
2580                            responder: DoNotDisturbWatchResponder {
2581                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2582                                tx_id: header.tx_id,
2583                            },
2584                        })
2585                    }
2586                    0x7fef934e7f5777b0 => {
2587                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2588                        let mut req = fidl::new_empty!(
2589                            DoNotDisturbSetRequest,
2590                            fidl::encoding::DefaultFuchsiaResourceDialect
2591                        );
2592                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DoNotDisturbSetRequest>(&header, _body_bytes, handles, &mut req)?;
2593                        let control_handle =
2594                            DoNotDisturbControlHandle { inner: this.inner.clone() };
2595                        Ok(DoNotDisturbRequest::Set {
2596                            settings: req.settings,
2597
2598                            responder: DoNotDisturbSetResponder {
2599                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2600                                tx_id: header.tx_id,
2601                            },
2602                        })
2603                    }
2604                    _ => Err(fidl::Error::UnknownOrdinal {
2605                        ordinal: header.ordinal,
2606                        protocol_name:
2607                            <DoNotDisturbMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2608                    }),
2609                }))
2610            },
2611        )
2612    }
2613}
2614
2615/// Modify or watch do-not-disturb (DND) mode. While DND is active, distractions
2616/// created by the device are reduced or eliminated. E.g. bootup is silent,
2617/// incoming calls could be rejected or silent, and notifications could be
2618/// paused, silent, or hidden. High-priority disruptions like alarms can be
2619/// allowed.
2620///
2621/// Supported SettingsEpitaph enums:
2622/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
2623#[derive(Debug)]
2624pub enum DoNotDisturbRequest {
2625    /// Gets the current [`DoNotDisturbSettings`]. Returns immediately on first
2626    /// call; subsequent calls return when the values change.
2627    ///
2628    /// If this call fails, it is considered a fatal error and the channel
2629    /// will be closed.
2630    Watch { responder: DoNotDisturbWatchResponder },
2631    /// Sets [`DoNotDisturbSettings`] settings. Any field not explicitly set in
2632    /// the table performs a no-op, and will not make any changes.
2633    Set { settings: DoNotDisturbSettings, responder: DoNotDisturbSetResponder },
2634}
2635
2636impl DoNotDisturbRequest {
2637    #[allow(irrefutable_let_patterns)]
2638    pub fn into_watch(self) -> Option<(DoNotDisturbWatchResponder)> {
2639        if let DoNotDisturbRequest::Watch { responder } = self { Some((responder)) } else { None }
2640    }
2641
2642    #[allow(irrefutable_let_patterns)]
2643    pub fn into_set(self) -> Option<(DoNotDisturbSettings, DoNotDisturbSetResponder)> {
2644        if let DoNotDisturbRequest::Set { settings, responder } = self {
2645            Some((settings, responder))
2646        } else {
2647            None
2648        }
2649    }
2650
2651    /// Name of the method defined in FIDL
2652    pub fn method_name(&self) -> &'static str {
2653        match *self {
2654            DoNotDisturbRequest::Watch { .. } => "watch",
2655            DoNotDisturbRequest::Set { .. } => "set",
2656        }
2657    }
2658}
2659
2660#[derive(Debug, Clone)]
2661pub struct DoNotDisturbControlHandle {
2662    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2663}
2664
2665impl fidl::endpoints::ControlHandle for DoNotDisturbControlHandle {
2666    fn shutdown(&self) {
2667        self.inner.shutdown()
2668    }
2669    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2670        self.inner.shutdown_with_epitaph(status)
2671    }
2672
2673    fn is_closed(&self) -> bool {
2674        self.inner.channel().is_closed()
2675    }
2676    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2677        self.inner.channel().on_closed()
2678    }
2679
2680    #[cfg(target_os = "fuchsia")]
2681    fn signal_peer(
2682        &self,
2683        clear_mask: zx::Signals,
2684        set_mask: zx::Signals,
2685    ) -> Result<(), zx_status::Status> {
2686        use fidl::Peered;
2687        self.inner.channel().signal_peer(clear_mask, set_mask)
2688    }
2689}
2690
2691impl DoNotDisturbControlHandle {}
2692
2693#[must_use = "FIDL methods require a response to be sent"]
2694#[derive(Debug)]
2695pub struct DoNotDisturbWatchResponder {
2696    control_handle: std::mem::ManuallyDrop<DoNotDisturbControlHandle>,
2697    tx_id: u32,
2698}
2699
2700/// Set the the channel to be shutdown (see [`DoNotDisturbControlHandle::shutdown`])
2701/// if the responder is dropped without sending a response, so that the client
2702/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2703impl std::ops::Drop for DoNotDisturbWatchResponder {
2704    fn drop(&mut self) {
2705        self.control_handle.shutdown();
2706        // Safety: drops once, never accessed again
2707        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2708    }
2709}
2710
2711impl fidl::endpoints::Responder for DoNotDisturbWatchResponder {
2712    type ControlHandle = DoNotDisturbControlHandle;
2713
2714    fn control_handle(&self) -> &DoNotDisturbControlHandle {
2715        &self.control_handle
2716    }
2717
2718    fn drop_without_shutdown(mut self) {
2719        // Safety: drops once, never accessed again due to mem::forget
2720        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2721        // Prevent Drop from running (which would shut down the channel)
2722        std::mem::forget(self);
2723    }
2724}
2725
2726impl DoNotDisturbWatchResponder {
2727    /// Sends a response to the FIDL transaction.
2728    ///
2729    /// Sets the channel to shutdown if an error occurs.
2730    pub fn send(self, mut settings: &DoNotDisturbSettings) -> Result<(), fidl::Error> {
2731        let _result = self.send_raw(settings);
2732        if _result.is_err() {
2733            self.control_handle.shutdown();
2734        }
2735        self.drop_without_shutdown();
2736        _result
2737    }
2738
2739    /// Similar to "send" but does not shutdown the channel if an error occurs.
2740    pub fn send_no_shutdown_on_err(
2741        self,
2742        mut settings: &DoNotDisturbSettings,
2743    ) -> Result<(), fidl::Error> {
2744        let _result = self.send_raw(settings);
2745        self.drop_without_shutdown();
2746        _result
2747    }
2748
2749    fn send_raw(&self, mut settings: &DoNotDisturbSettings) -> Result<(), fidl::Error> {
2750        self.control_handle.inner.send::<DoNotDisturbWatchResponse>(
2751            (settings,),
2752            self.tx_id,
2753            0x1eeae2f97a5547fb,
2754            fidl::encoding::DynamicFlags::empty(),
2755        )
2756    }
2757}
2758
2759#[must_use = "FIDL methods require a response to be sent"]
2760#[derive(Debug)]
2761pub struct DoNotDisturbSetResponder {
2762    control_handle: std::mem::ManuallyDrop<DoNotDisturbControlHandle>,
2763    tx_id: u32,
2764}
2765
2766/// Set the the channel to be shutdown (see [`DoNotDisturbControlHandle::shutdown`])
2767/// if the responder is dropped without sending a response, so that the client
2768/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2769impl std::ops::Drop for DoNotDisturbSetResponder {
2770    fn drop(&mut self) {
2771        self.control_handle.shutdown();
2772        // Safety: drops once, never accessed again
2773        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2774    }
2775}
2776
2777impl fidl::endpoints::Responder for DoNotDisturbSetResponder {
2778    type ControlHandle = DoNotDisturbControlHandle;
2779
2780    fn control_handle(&self) -> &DoNotDisturbControlHandle {
2781        &self.control_handle
2782    }
2783
2784    fn drop_without_shutdown(mut self) {
2785        // Safety: drops once, never accessed again due to mem::forget
2786        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2787        // Prevent Drop from running (which would shut down the channel)
2788        std::mem::forget(self);
2789    }
2790}
2791
2792impl DoNotDisturbSetResponder {
2793    /// Sends a response to the FIDL transaction.
2794    ///
2795    /// Sets the channel to shutdown if an error occurs.
2796    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2797        let _result = self.send_raw(result);
2798        if _result.is_err() {
2799            self.control_handle.shutdown();
2800        }
2801        self.drop_without_shutdown();
2802        _result
2803    }
2804
2805    /// Similar to "send" but does not shutdown the channel if an error occurs.
2806    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2807        let _result = self.send_raw(result);
2808        self.drop_without_shutdown();
2809        _result
2810    }
2811
2812    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2813        self.control_handle
2814            .inner
2815            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
2816                result,
2817                self.tx_id,
2818                0x7fef934e7f5777b0,
2819                fidl::encoding::DynamicFlags::empty(),
2820            )
2821    }
2822}
2823
2824#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2825pub struct FactoryResetMarker;
2826
2827impl fidl::endpoints::ProtocolMarker for FactoryResetMarker {
2828    type Proxy = FactoryResetProxy;
2829    type RequestStream = FactoryResetRequestStream;
2830    #[cfg(target_os = "fuchsia")]
2831    type SynchronousProxy = FactoryResetSynchronousProxy;
2832
2833    const DEBUG_NAME: &'static str = "fuchsia.settings.FactoryReset";
2834}
2835impl fidl::endpoints::DiscoverableProtocolMarker for FactoryResetMarker {}
2836pub type FactoryResetSetResult = Result<(), Error>;
2837
2838pub trait FactoryResetProxyInterface: Send + Sync {
2839    type WatchResponseFut: std::future::Future<Output = Result<FactoryResetSettings, fidl::Error>>
2840        + Send;
2841    fn r#watch(&self) -> Self::WatchResponseFut;
2842    type SetResponseFut: std::future::Future<Output = Result<FactoryResetSetResult, fidl::Error>>
2843        + Send;
2844    fn r#set(&self, settings: &FactoryResetSettings) -> Self::SetResponseFut;
2845}
2846#[derive(Debug)]
2847#[cfg(target_os = "fuchsia")]
2848pub struct FactoryResetSynchronousProxy {
2849    client: fidl::client::sync::Client,
2850}
2851
2852#[cfg(target_os = "fuchsia")]
2853impl fidl::endpoints::SynchronousProxy for FactoryResetSynchronousProxy {
2854    type Proxy = FactoryResetProxy;
2855    type Protocol = FactoryResetMarker;
2856
2857    fn from_channel(inner: fidl::Channel) -> Self {
2858        Self::new(inner)
2859    }
2860
2861    fn into_channel(self) -> fidl::Channel {
2862        self.client.into_channel()
2863    }
2864
2865    fn as_channel(&self) -> &fidl::Channel {
2866        self.client.as_channel()
2867    }
2868}
2869
2870#[cfg(target_os = "fuchsia")]
2871impl FactoryResetSynchronousProxy {
2872    pub fn new(channel: fidl::Channel) -> Self {
2873        let protocol_name = <FactoryResetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2874        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
2875    }
2876
2877    pub fn into_channel(self) -> fidl::Channel {
2878        self.client.into_channel()
2879    }
2880
2881    /// Waits until an event arrives and returns it. It is safe for other
2882    /// threads to make concurrent requests while waiting for an event.
2883    pub fn wait_for_event(
2884        &self,
2885        deadline: zx::MonotonicInstant,
2886    ) -> Result<FactoryResetEvent, fidl::Error> {
2887        FactoryResetEvent::decode(self.client.wait_for_event(deadline)?)
2888    }
2889
2890    /// Notifies of a change in information about the factory reset settings.
2891    ///
2892    /// On a given connection, the first call will return the current `settings`
2893    /// value while subsequent calls will only return the new `settings` value
2894    /// upon a value change. This follows the hanging get pattern.
2895    ///
2896    /// If this call fails, it is considered a fatal error and the channel will
2897    /// be closed.
2898    pub fn r#watch(
2899        &self,
2900        ___deadline: zx::MonotonicInstant,
2901    ) -> Result<FactoryResetSettings, fidl::Error> {
2902        let _response =
2903            self.client.send_query::<fidl::encoding::EmptyPayload, FactoryResetWatchResponse>(
2904                (),
2905                0x50cfc9906eb406a1,
2906                fidl::encoding::DynamicFlags::empty(),
2907                ___deadline,
2908            )?;
2909        Ok(_response.settings)
2910    }
2911
2912    /// Sets factory reset settings. Any field not explicitly set in the table
2913    /// performs a no-op, and will not make any changes.
2914    pub fn r#set(
2915        &self,
2916        mut settings: &FactoryResetSettings,
2917        ___deadline: zx::MonotonicInstant,
2918    ) -> Result<FactoryResetSetResult, fidl::Error> {
2919        let _response = self.client.send_query::<
2920            FactoryResetSetRequest,
2921            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2922        >(
2923            (settings,),
2924            0x5b35942c1cb1eca8,
2925            fidl::encoding::DynamicFlags::empty(),
2926            ___deadline,
2927        )?;
2928        Ok(_response.map(|x| x))
2929    }
2930}
2931
2932#[cfg(target_os = "fuchsia")]
2933impl From<FactoryResetSynchronousProxy> for zx::Handle {
2934    fn from(value: FactoryResetSynchronousProxy) -> Self {
2935        value.into_channel().into()
2936    }
2937}
2938
2939#[cfg(target_os = "fuchsia")]
2940impl From<fidl::Channel> for FactoryResetSynchronousProxy {
2941    fn from(value: fidl::Channel) -> Self {
2942        Self::new(value)
2943    }
2944}
2945
2946#[cfg(target_os = "fuchsia")]
2947impl fidl::endpoints::FromClient for FactoryResetSynchronousProxy {
2948    type Protocol = FactoryResetMarker;
2949
2950    fn from_client(value: fidl::endpoints::ClientEnd<FactoryResetMarker>) -> Self {
2951        Self::new(value.into_channel())
2952    }
2953}
2954
2955#[derive(Debug, Clone)]
2956pub struct FactoryResetProxy {
2957    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2958}
2959
2960impl fidl::endpoints::Proxy for FactoryResetProxy {
2961    type Protocol = FactoryResetMarker;
2962
2963    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2964        Self::new(inner)
2965    }
2966
2967    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2968        self.client.into_channel().map_err(|client| Self { client })
2969    }
2970
2971    fn as_channel(&self) -> &::fidl::AsyncChannel {
2972        self.client.as_channel()
2973    }
2974}
2975
2976impl FactoryResetProxy {
2977    /// Create a new Proxy for fuchsia.settings/FactoryReset.
2978    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2979        let protocol_name = <FactoryResetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2980        Self { client: fidl::client::Client::new(channel, protocol_name) }
2981    }
2982
2983    /// Get a Stream of events from the remote end of the protocol.
2984    ///
2985    /// # Panics
2986    ///
2987    /// Panics if the event stream was already taken.
2988    pub fn take_event_stream(&self) -> FactoryResetEventStream {
2989        FactoryResetEventStream { event_receiver: self.client.take_event_receiver() }
2990    }
2991
2992    /// Notifies of a change in information about the factory reset settings.
2993    ///
2994    /// On a given connection, the first call will return the current `settings`
2995    /// value while subsequent calls will only return the new `settings` value
2996    /// upon a value change. This follows the hanging get pattern.
2997    ///
2998    /// If this call fails, it is considered a fatal error and the channel will
2999    /// be closed.
3000    pub fn r#watch(
3001        &self,
3002    ) -> fidl::client::QueryResponseFut<
3003        FactoryResetSettings,
3004        fidl::encoding::DefaultFuchsiaResourceDialect,
3005    > {
3006        FactoryResetProxyInterface::r#watch(self)
3007    }
3008
3009    /// Sets factory reset settings. Any field not explicitly set in the table
3010    /// performs a no-op, and will not make any changes.
3011    pub fn r#set(
3012        &self,
3013        mut settings: &FactoryResetSettings,
3014    ) -> fidl::client::QueryResponseFut<
3015        FactoryResetSetResult,
3016        fidl::encoding::DefaultFuchsiaResourceDialect,
3017    > {
3018        FactoryResetProxyInterface::r#set(self, settings)
3019    }
3020}
3021
3022impl FactoryResetProxyInterface for FactoryResetProxy {
3023    type WatchResponseFut = fidl::client::QueryResponseFut<
3024        FactoryResetSettings,
3025        fidl::encoding::DefaultFuchsiaResourceDialect,
3026    >;
3027    fn r#watch(&self) -> Self::WatchResponseFut {
3028        fn _decode(
3029            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3030        ) -> Result<FactoryResetSettings, fidl::Error> {
3031            let _response = fidl::client::decode_transaction_body::<
3032                FactoryResetWatchResponse,
3033                fidl::encoding::DefaultFuchsiaResourceDialect,
3034                0x50cfc9906eb406a1,
3035            >(_buf?)?;
3036            Ok(_response.settings)
3037        }
3038        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, FactoryResetSettings>(
3039            (),
3040            0x50cfc9906eb406a1,
3041            fidl::encoding::DynamicFlags::empty(),
3042            _decode,
3043        )
3044    }
3045
3046    type SetResponseFut = fidl::client::QueryResponseFut<
3047        FactoryResetSetResult,
3048        fidl::encoding::DefaultFuchsiaResourceDialect,
3049    >;
3050    fn r#set(&self, mut settings: &FactoryResetSettings) -> Self::SetResponseFut {
3051        fn _decode(
3052            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3053        ) -> Result<FactoryResetSetResult, fidl::Error> {
3054            let _response = fidl::client::decode_transaction_body::<
3055                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
3056                fidl::encoding::DefaultFuchsiaResourceDialect,
3057                0x5b35942c1cb1eca8,
3058            >(_buf?)?;
3059            Ok(_response.map(|x| x))
3060        }
3061        self.client.send_query_and_decode::<FactoryResetSetRequest, FactoryResetSetResult>(
3062            (settings,),
3063            0x5b35942c1cb1eca8,
3064            fidl::encoding::DynamicFlags::empty(),
3065            _decode,
3066        )
3067    }
3068}
3069
3070pub struct FactoryResetEventStream {
3071    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3072}
3073
3074impl std::marker::Unpin for FactoryResetEventStream {}
3075
3076impl futures::stream::FusedStream for FactoryResetEventStream {
3077    fn is_terminated(&self) -> bool {
3078        self.event_receiver.is_terminated()
3079    }
3080}
3081
3082impl futures::Stream for FactoryResetEventStream {
3083    type Item = Result<FactoryResetEvent, fidl::Error>;
3084
3085    fn poll_next(
3086        mut self: std::pin::Pin<&mut Self>,
3087        cx: &mut std::task::Context<'_>,
3088    ) -> std::task::Poll<Option<Self::Item>> {
3089        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3090            &mut self.event_receiver,
3091            cx
3092        )?) {
3093            Some(buf) => std::task::Poll::Ready(Some(FactoryResetEvent::decode(buf))),
3094            None => std::task::Poll::Ready(None),
3095        }
3096    }
3097}
3098
3099#[derive(Debug)]
3100pub enum FactoryResetEvent {}
3101
3102impl FactoryResetEvent {
3103    /// Decodes a message buffer as a [`FactoryResetEvent`].
3104    fn decode(
3105        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3106    ) -> Result<FactoryResetEvent, fidl::Error> {
3107        let (bytes, _handles) = buf.split_mut();
3108        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3109        debug_assert_eq!(tx_header.tx_id, 0);
3110        match tx_header.ordinal {
3111            _ => Err(fidl::Error::UnknownOrdinal {
3112                ordinal: tx_header.ordinal,
3113                protocol_name: <FactoryResetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3114            }),
3115        }
3116    }
3117}
3118
3119/// A Stream of incoming requests for fuchsia.settings/FactoryReset.
3120pub struct FactoryResetRequestStream {
3121    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3122    is_terminated: bool,
3123}
3124
3125impl std::marker::Unpin for FactoryResetRequestStream {}
3126
3127impl futures::stream::FusedStream for FactoryResetRequestStream {
3128    fn is_terminated(&self) -> bool {
3129        self.is_terminated
3130    }
3131}
3132
3133impl fidl::endpoints::RequestStream for FactoryResetRequestStream {
3134    type Protocol = FactoryResetMarker;
3135    type ControlHandle = FactoryResetControlHandle;
3136
3137    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3138        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3139    }
3140
3141    fn control_handle(&self) -> Self::ControlHandle {
3142        FactoryResetControlHandle { inner: self.inner.clone() }
3143    }
3144
3145    fn into_inner(
3146        self,
3147    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3148    {
3149        (self.inner, self.is_terminated)
3150    }
3151
3152    fn from_inner(
3153        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3154        is_terminated: bool,
3155    ) -> Self {
3156        Self { inner, is_terminated }
3157    }
3158}
3159
3160impl futures::Stream for FactoryResetRequestStream {
3161    type Item = Result<FactoryResetRequest, fidl::Error>;
3162
3163    fn poll_next(
3164        mut self: std::pin::Pin<&mut Self>,
3165        cx: &mut std::task::Context<'_>,
3166    ) -> std::task::Poll<Option<Self::Item>> {
3167        let this = &mut *self;
3168        if this.inner.check_shutdown(cx) {
3169            this.is_terminated = true;
3170            return std::task::Poll::Ready(None);
3171        }
3172        if this.is_terminated {
3173            panic!("polled FactoryResetRequestStream after completion");
3174        }
3175        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3176            |bytes, handles| {
3177                match this.inner.channel().read_etc(cx, bytes, handles) {
3178                    std::task::Poll::Ready(Ok(())) => {}
3179                    std::task::Poll::Pending => return std::task::Poll::Pending,
3180                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3181                        this.is_terminated = true;
3182                        return std::task::Poll::Ready(None);
3183                    }
3184                    std::task::Poll::Ready(Err(e)) => {
3185                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3186                            e.into(),
3187                        ))));
3188                    }
3189                }
3190
3191                // A message has been received from the channel
3192                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3193
3194                std::task::Poll::Ready(Some(match header.ordinal {
3195                    0x50cfc9906eb406a1 => {
3196                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3197                        let mut req = fidl::new_empty!(
3198                            fidl::encoding::EmptyPayload,
3199                            fidl::encoding::DefaultFuchsiaResourceDialect
3200                        );
3201                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
3202                        let control_handle =
3203                            FactoryResetControlHandle { inner: this.inner.clone() };
3204                        Ok(FactoryResetRequest::Watch {
3205                            responder: FactoryResetWatchResponder {
3206                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3207                                tx_id: header.tx_id,
3208                            },
3209                        })
3210                    }
3211                    0x5b35942c1cb1eca8 => {
3212                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3213                        let mut req = fidl::new_empty!(
3214                            FactoryResetSetRequest,
3215                            fidl::encoding::DefaultFuchsiaResourceDialect
3216                        );
3217                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<FactoryResetSetRequest>(&header, _body_bytes, handles, &mut req)?;
3218                        let control_handle =
3219                            FactoryResetControlHandle { inner: this.inner.clone() };
3220                        Ok(FactoryResetRequest::Set {
3221                            settings: req.settings,
3222
3223                            responder: FactoryResetSetResponder {
3224                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3225                                tx_id: header.tx_id,
3226                            },
3227                        })
3228                    }
3229                    _ => Err(fidl::Error::UnknownOrdinal {
3230                        ordinal: header.ordinal,
3231                        protocol_name:
3232                            <FactoryResetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3233                    }),
3234                }))
3235            },
3236        )
3237    }
3238}
3239
3240/// Settings related to factory reset.
3241#[derive(Debug)]
3242pub enum FactoryResetRequest {
3243    /// Notifies of a change in information about the factory reset settings.
3244    ///
3245    /// On a given connection, the first call will return the current `settings`
3246    /// value while subsequent calls will only return the new `settings` value
3247    /// upon a value change. This follows the hanging get pattern.
3248    ///
3249    /// If this call fails, it is considered a fatal error and the channel will
3250    /// be closed.
3251    Watch { responder: FactoryResetWatchResponder },
3252    /// Sets factory reset settings. Any field not explicitly set in the table
3253    /// performs a no-op, and will not make any changes.
3254    Set { settings: FactoryResetSettings, responder: FactoryResetSetResponder },
3255}
3256
3257impl FactoryResetRequest {
3258    #[allow(irrefutable_let_patterns)]
3259    pub fn into_watch(self) -> Option<(FactoryResetWatchResponder)> {
3260        if let FactoryResetRequest::Watch { responder } = self { Some((responder)) } else { None }
3261    }
3262
3263    #[allow(irrefutable_let_patterns)]
3264    pub fn into_set(self) -> Option<(FactoryResetSettings, FactoryResetSetResponder)> {
3265        if let FactoryResetRequest::Set { settings, responder } = self {
3266            Some((settings, responder))
3267        } else {
3268            None
3269        }
3270    }
3271
3272    /// Name of the method defined in FIDL
3273    pub fn method_name(&self) -> &'static str {
3274        match *self {
3275            FactoryResetRequest::Watch { .. } => "watch",
3276            FactoryResetRequest::Set { .. } => "set",
3277        }
3278    }
3279}
3280
3281#[derive(Debug, Clone)]
3282pub struct FactoryResetControlHandle {
3283    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3284}
3285
3286impl fidl::endpoints::ControlHandle for FactoryResetControlHandle {
3287    fn shutdown(&self) {
3288        self.inner.shutdown()
3289    }
3290    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
3291        self.inner.shutdown_with_epitaph(status)
3292    }
3293
3294    fn is_closed(&self) -> bool {
3295        self.inner.channel().is_closed()
3296    }
3297    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3298        self.inner.channel().on_closed()
3299    }
3300
3301    #[cfg(target_os = "fuchsia")]
3302    fn signal_peer(
3303        &self,
3304        clear_mask: zx::Signals,
3305        set_mask: zx::Signals,
3306    ) -> Result<(), zx_status::Status> {
3307        use fidl::Peered;
3308        self.inner.channel().signal_peer(clear_mask, set_mask)
3309    }
3310}
3311
3312impl FactoryResetControlHandle {}
3313
3314#[must_use = "FIDL methods require a response to be sent"]
3315#[derive(Debug)]
3316pub struct FactoryResetWatchResponder {
3317    control_handle: std::mem::ManuallyDrop<FactoryResetControlHandle>,
3318    tx_id: u32,
3319}
3320
3321/// Set the the channel to be shutdown (see [`FactoryResetControlHandle::shutdown`])
3322/// if the responder is dropped without sending a response, so that the client
3323/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3324impl std::ops::Drop for FactoryResetWatchResponder {
3325    fn drop(&mut self) {
3326        self.control_handle.shutdown();
3327        // Safety: drops once, never accessed again
3328        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3329    }
3330}
3331
3332impl fidl::endpoints::Responder for FactoryResetWatchResponder {
3333    type ControlHandle = FactoryResetControlHandle;
3334
3335    fn control_handle(&self) -> &FactoryResetControlHandle {
3336        &self.control_handle
3337    }
3338
3339    fn drop_without_shutdown(mut self) {
3340        // Safety: drops once, never accessed again due to mem::forget
3341        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3342        // Prevent Drop from running (which would shut down the channel)
3343        std::mem::forget(self);
3344    }
3345}
3346
3347impl FactoryResetWatchResponder {
3348    /// Sends a response to the FIDL transaction.
3349    ///
3350    /// Sets the channel to shutdown if an error occurs.
3351    pub fn send(self, mut settings: &FactoryResetSettings) -> Result<(), fidl::Error> {
3352        let _result = self.send_raw(settings);
3353        if _result.is_err() {
3354            self.control_handle.shutdown();
3355        }
3356        self.drop_without_shutdown();
3357        _result
3358    }
3359
3360    /// Similar to "send" but does not shutdown the channel if an error occurs.
3361    pub fn send_no_shutdown_on_err(
3362        self,
3363        mut settings: &FactoryResetSettings,
3364    ) -> Result<(), fidl::Error> {
3365        let _result = self.send_raw(settings);
3366        self.drop_without_shutdown();
3367        _result
3368    }
3369
3370    fn send_raw(&self, mut settings: &FactoryResetSettings) -> Result<(), fidl::Error> {
3371        self.control_handle.inner.send::<FactoryResetWatchResponse>(
3372            (settings,),
3373            self.tx_id,
3374            0x50cfc9906eb406a1,
3375            fidl::encoding::DynamicFlags::empty(),
3376        )
3377    }
3378}
3379
3380#[must_use = "FIDL methods require a response to be sent"]
3381#[derive(Debug)]
3382pub struct FactoryResetSetResponder {
3383    control_handle: std::mem::ManuallyDrop<FactoryResetControlHandle>,
3384    tx_id: u32,
3385}
3386
3387/// Set the the channel to be shutdown (see [`FactoryResetControlHandle::shutdown`])
3388/// if the responder is dropped without sending a response, so that the client
3389/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3390impl std::ops::Drop for FactoryResetSetResponder {
3391    fn drop(&mut self) {
3392        self.control_handle.shutdown();
3393        // Safety: drops once, never accessed again
3394        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3395    }
3396}
3397
3398impl fidl::endpoints::Responder for FactoryResetSetResponder {
3399    type ControlHandle = FactoryResetControlHandle;
3400
3401    fn control_handle(&self) -> &FactoryResetControlHandle {
3402        &self.control_handle
3403    }
3404
3405    fn drop_without_shutdown(mut self) {
3406        // Safety: drops once, never accessed again due to mem::forget
3407        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3408        // Prevent Drop from running (which would shut down the channel)
3409        std::mem::forget(self);
3410    }
3411}
3412
3413impl FactoryResetSetResponder {
3414    /// Sends a response to the FIDL transaction.
3415    ///
3416    /// Sets the channel to shutdown if an error occurs.
3417    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3418        let _result = self.send_raw(result);
3419        if _result.is_err() {
3420            self.control_handle.shutdown();
3421        }
3422        self.drop_without_shutdown();
3423        _result
3424    }
3425
3426    /// Similar to "send" but does not shutdown the channel if an error occurs.
3427    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3428        let _result = self.send_raw(result);
3429        self.drop_without_shutdown();
3430        _result
3431    }
3432
3433    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3434        self.control_handle
3435            .inner
3436            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3437                result,
3438                self.tx_id,
3439                0x5b35942c1cb1eca8,
3440                fidl::encoding::DynamicFlags::empty(),
3441            )
3442    }
3443}
3444
3445#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3446pub struct InputMarker;
3447
3448impl fidl::endpoints::ProtocolMarker for InputMarker {
3449    type Proxy = InputProxy;
3450    type RequestStream = InputRequestStream;
3451    #[cfg(target_os = "fuchsia")]
3452    type SynchronousProxy = InputSynchronousProxy;
3453
3454    const DEBUG_NAME: &'static str = "fuchsia.settings.Input";
3455}
3456impl fidl::endpoints::DiscoverableProtocolMarker for InputMarker {}
3457pub type InputSetResult = Result<(), Error>;
3458
3459pub trait InputProxyInterface: Send + Sync {
3460    type WatchResponseFut: std::future::Future<Output = Result<InputSettings, fidl::Error>> + Send;
3461    fn r#watch(&self) -> Self::WatchResponseFut;
3462    type SetResponseFut: std::future::Future<Output = Result<InputSetResult, fidl::Error>> + Send;
3463    fn r#set(&self, input_states: &[InputState]) -> Self::SetResponseFut;
3464}
3465#[derive(Debug)]
3466#[cfg(target_os = "fuchsia")]
3467pub struct InputSynchronousProxy {
3468    client: fidl::client::sync::Client,
3469}
3470
3471#[cfg(target_os = "fuchsia")]
3472impl fidl::endpoints::SynchronousProxy for InputSynchronousProxy {
3473    type Proxy = InputProxy;
3474    type Protocol = InputMarker;
3475
3476    fn from_channel(inner: fidl::Channel) -> Self {
3477        Self::new(inner)
3478    }
3479
3480    fn into_channel(self) -> fidl::Channel {
3481        self.client.into_channel()
3482    }
3483
3484    fn as_channel(&self) -> &fidl::Channel {
3485        self.client.as_channel()
3486    }
3487}
3488
3489#[cfg(target_os = "fuchsia")]
3490impl InputSynchronousProxy {
3491    pub fn new(channel: fidl::Channel) -> Self {
3492        let protocol_name = <InputMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3493        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
3494    }
3495
3496    pub fn into_channel(self) -> fidl::Channel {
3497        self.client.into_channel()
3498    }
3499
3500    /// Waits until an event arrives and returns it. It is safe for other
3501    /// threads to make concurrent requests while waiting for an event.
3502    pub fn wait_for_event(
3503        &self,
3504        deadline: zx::MonotonicInstant,
3505    ) -> Result<InputEvent, fidl::Error> {
3506        InputEvent::decode(self.client.wait_for_event(deadline)?)
3507    }
3508
3509    /// Gets the current |InputSettings|. Returns immediately on first call;
3510    /// subsequent calls return when the value changes.
3511    ///
3512    /// When any of the input devices' states change, this will return the
3513    /// full [InputSettings] object, containing the states for all the
3514    /// available input devices on the target device.
3515    ///
3516    /// To find the state of a specific input device, the devices vector
3517    /// contained in settings can be iterated through to find a specific
3518    /// [DeviceType]. If there are multiple devices of the same [DeviceType],
3519    /// the [InputDevice]'s device_name can be examined in conjunction with
3520    /// the [DeviceType] to find the desired input device. Together, the
3521    /// device_name and [DeviceType] uniquely identify an [InputDevice].
3522    ///
3523    /// If this call fails, it is considered a fatal error and the channel
3524    /// will be closed.
3525    pub fn r#watch(&self, ___deadline: zx::MonotonicInstant) -> Result<InputSettings, fidl::Error> {
3526        let _response =
3527            self.client.send_query::<fidl::encoding::EmptyPayload, InputWatchResponse>(
3528                (),
3529                0x1bc41a7e0edd19c9,
3530                fidl::encoding::DynamicFlags::empty(),
3531                ___deadline,
3532            )?;
3533        Ok(_response.settings)
3534    }
3535
3536    /// Requests software input devices to set their software state. May
3537    /// not necessarily change the overall state of the device, depending on
3538    /// the hardware state. Will modify the software state of the existing
3539    /// device if a known device_name and device_type are passed. Otherwise
3540    /// it will add a new input device. Devices not included in input_states
3541    /// will not be modified.
3542    pub fn r#set(
3543        &self,
3544        mut input_states: &[InputState],
3545        ___deadline: zx::MonotonicInstant,
3546    ) -> Result<InputSetResult, fidl::Error> {
3547        let _response = self.client.send_query::<InputSetRequest, fidl::encoding::ResultType<
3548            fidl::encoding::EmptyStruct,
3549            Error,
3550        >>(
3551            (input_states,),
3552            0x2447379e693141ca,
3553            fidl::encoding::DynamicFlags::empty(),
3554            ___deadline,
3555        )?;
3556        Ok(_response.map(|x| x))
3557    }
3558}
3559
3560#[cfg(target_os = "fuchsia")]
3561impl From<InputSynchronousProxy> for zx::Handle {
3562    fn from(value: InputSynchronousProxy) -> Self {
3563        value.into_channel().into()
3564    }
3565}
3566
3567#[cfg(target_os = "fuchsia")]
3568impl From<fidl::Channel> for InputSynchronousProxy {
3569    fn from(value: fidl::Channel) -> Self {
3570        Self::new(value)
3571    }
3572}
3573
3574#[cfg(target_os = "fuchsia")]
3575impl fidl::endpoints::FromClient for InputSynchronousProxy {
3576    type Protocol = InputMarker;
3577
3578    fn from_client(value: fidl::endpoints::ClientEnd<InputMarker>) -> Self {
3579        Self::new(value.into_channel())
3580    }
3581}
3582
3583#[derive(Debug, Clone)]
3584pub struct InputProxy {
3585    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3586}
3587
3588impl fidl::endpoints::Proxy for InputProxy {
3589    type Protocol = InputMarker;
3590
3591    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3592        Self::new(inner)
3593    }
3594
3595    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3596        self.client.into_channel().map_err(|client| Self { client })
3597    }
3598
3599    fn as_channel(&self) -> &::fidl::AsyncChannel {
3600        self.client.as_channel()
3601    }
3602}
3603
3604impl InputProxy {
3605    /// Create a new Proxy for fuchsia.settings/Input.
3606    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3607        let protocol_name = <InputMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3608        Self { client: fidl::client::Client::new(channel, protocol_name) }
3609    }
3610
3611    /// Get a Stream of events from the remote end of the protocol.
3612    ///
3613    /// # Panics
3614    ///
3615    /// Panics if the event stream was already taken.
3616    pub fn take_event_stream(&self) -> InputEventStream {
3617        InputEventStream { event_receiver: self.client.take_event_receiver() }
3618    }
3619
3620    /// Gets the current |InputSettings|. Returns immediately on first call;
3621    /// subsequent calls return when the value changes.
3622    ///
3623    /// When any of the input devices' states change, this will return the
3624    /// full [InputSettings] object, containing the states for all the
3625    /// available input devices on the target device.
3626    ///
3627    /// To find the state of a specific input device, the devices vector
3628    /// contained in settings can be iterated through to find a specific
3629    /// [DeviceType]. If there are multiple devices of the same [DeviceType],
3630    /// the [InputDevice]'s device_name can be examined in conjunction with
3631    /// the [DeviceType] to find the desired input device. Together, the
3632    /// device_name and [DeviceType] uniquely identify an [InputDevice].
3633    ///
3634    /// If this call fails, it is considered a fatal error and the channel
3635    /// will be closed.
3636    pub fn r#watch(
3637        &self,
3638    ) -> fidl::client::QueryResponseFut<InputSettings, fidl::encoding::DefaultFuchsiaResourceDialect>
3639    {
3640        InputProxyInterface::r#watch(self)
3641    }
3642
3643    /// Requests software input devices to set their software state. May
3644    /// not necessarily change the overall state of the device, depending on
3645    /// the hardware state. Will modify the software state of the existing
3646    /// device if a known device_name and device_type are passed. Otherwise
3647    /// it will add a new input device. Devices not included in input_states
3648    /// will not be modified.
3649    pub fn r#set(
3650        &self,
3651        mut input_states: &[InputState],
3652    ) -> fidl::client::QueryResponseFut<InputSetResult, fidl::encoding::DefaultFuchsiaResourceDialect>
3653    {
3654        InputProxyInterface::r#set(self, input_states)
3655    }
3656}
3657
3658impl InputProxyInterface for InputProxy {
3659    type WatchResponseFut = fidl::client::QueryResponseFut<
3660        InputSettings,
3661        fidl::encoding::DefaultFuchsiaResourceDialect,
3662    >;
3663    fn r#watch(&self) -> Self::WatchResponseFut {
3664        fn _decode(
3665            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3666        ) -> Result<InputSettings, fidl::Error> {
3667            let _response = fidl::client::decode_transaction_body::<
3668                InputWatchResponse,
3669                fidl::encoding::DefaultFuchsiaResourceDialect,
3670                0x1bc41a7e0edd19c9,
3671            >(_buf?)?;
3672            Ok(_response.settings)
3673        }
3674        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, InputSettings>(
3675            (),
3676            0x1bc41a7e0edd19c9,
3677            fidl::encoding::DynamicFlags::empty(),
3678            _decode,
3679        )
3680    }
3681
3682    type SetResponseFut = fidl::client::QueryResponseFut<
3683        InputSetResult,
3684        fidl::encoding::DefaultFuchsiaResourceDialect,
3685    >;
3686    fn r#set(&self, mut input_states: &[InputState]) -> Self::SetResponseFut {
3687        fn _decode(
3688            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3689        ) -> Result<InputSetResult, fidl::Error> {
3690            let _response = fidl::client::decode_transaction_body::<
3691                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
3692                fidl::encoding::DefaultFuchsiaResourceDialect,
3693                0x2447379e693141ca,
3694            >(_buf?)?;
3695            Ok(_response.map(|x| x))
3696        }
3697        self.client.send_query_and_decode::<InputSetRequest, InputSetResult>(
3698            (input_states,),
3699            0x2447379e693141ca,
3700            fidl::encoding::DynamicFlags::empty(),
3701            _decode,
3702        )
3703    }
3704}
3705
3706pub struct InputEventStream {
3707    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3708}
3709
3710impl std::marker::Unpin for InputEventStream {}
3711
3712impl futures::stream::FusedStream for InputEventStream {
3713    fn is_terminated(&self) -> bool {
3714        self.event_receiver.is_terminated()
3715    }
3716}
3717
3718impl futures::Stream for InputEventStream {
3719    type Item = Result<InputEvent, fidl::Error>;
3720
3721    fn poll_next(
3722        mut self: std::pin::Pin<&mut Self>,
3723        cx: &mut std::task::Context<'_>,
3724    ) -> std::task::Poll<Option<Self::Item>> {
3725        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3726            &mut self.event_receiver,
3727            cx
3728        )?) {
3729            Some(buf) => std::task::Poll::Ready(Some(InputEvent::decode(buf))),
3730            None => std::task::Poll::Ready(None),
3731        }
3732    }
3733}
3734
3735#[derive(Debug)]
3736pub enum InputEvent {}
3737
3738impl InputEvent {
3739    /// Decodes a message buffer as a [`InputEvent`].
3740    fn decode(
3741        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3742    ) -> Result<InputEvent, fidl::Error> {
3743        let (bytes, _handles) = buf.split_mut();
3744        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3745        debug_assert_eq!(tx_header.tx_id, 0);
3746        match tx_header.ordinal {
3747            _ => Err(fidl::Error::UnknownOrdinal {
3748                ordinal: tx_header.ordinal,
3749                protocol_name: <InputMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3750            }),
3751        }
3752    }
3753}
3754
3755/// A Stream of incoming requests for fuchsia.settings/Input.
3756pub struct InputRequestStream {
3757    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3758    is_terminated: bool,
3759}
3760
3761impl std::marker::Unpin for InputRequestStream {}
3762
3763impl futures::stream::FusedStream for InputRequestStream {
3764    fn is_terminated(&self) -> bool {
3765        self.is_terminated
3766    }
3767}
3768
3769impl fidl::endpoints::RequestStream for InputRequestStream {
3770    type Protocol = InputMarker;
3771    type ControlHandle = InputControlHandle;
3772
3773    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3774        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3775    }
3776
3777    fn control_handle(&self) -> Self::ControlHandle {
3778        InputControlHandle { inner: self.inner.clone() }
3779    }
3780
3781    fn into_inner(
3782        self,
3783    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3784    {
3785        (self.inner, self.is_terminated)
3786    }
3787
3788    fn from_inner(
3789        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3790        is_terminated: bool,
3791    ) -> Self {
3792        Self { inner, is_terminated }
3793    }
3794}
3795
3796impl futures::Stream for InputRequestStream {
3797    type Item = Result<InputRequest, fidl::Error>;
3798
3799    fn poll_next(
3800        mut self: std::pin::Pin<&mut Self>,
3801        cx: &mut std::task::Context<'_>,
3802    ) -> std::task::Poll<Option<Self::Item>> {
3803        let this = &mut *self;
3804        if this.inner.check_shutdown(cx) {
3805            this.is_terminated = true;
3806            return std::task::Poll::Ready(None);
3807        }
3808        if this.is_terminated {
3809            panic!("polled InputRequestStream after completion");
3810        }
3811        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3812            |bytes, handles| {
3813                match this.inner.channel().read_etc(cx, bytes, handles) {
3814                    std::task::Poll::Ready(Ok(())) => {}
3815                    std::task::Poll::Pending => return std::task::Poll::Pending,
3816                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3817                        this.is_terminated = true;
3818                        return std::task::Poll::Ready(None);
3819                    }
3820                    std::task::Poll::Ready(Err(e)) => {
3821                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3822                            e.into(),
3823                        ))));
3824                    }
3825                }
3826
3827                // A message has been received from the channel
3828                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3829
3830                std::task::Poll::Ready(Some(match header.ordinal {
3831                    0x1bc41a7e0edd19c9 => {
3832                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3833                        let mut req = fidl::new_empty!(
3834                            fidl::encoding::EmptyPayload,
3835                            fidl::encoding::DefaultFuchsiaResourceDialect
3836                        );
3837                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
3838                        let control_handle = InputControlHandle { inner: this.inner.clone() };
3839                        Ok(InputRequest::Watch {
3840                            responder: InputWatchResponder {
3841                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3842                                tx_id: header.tx_id,
3843                            },
3844                        })
3845                    }
3846                    0x2447379e693141ca => {
3847                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3848                        let mut req = fidl::new_empty!(
3849                            InputSetRequest,
3850                            fidl::encoding::DefaultFuchsiaResourceDialect
3851                        );
3852                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<InputSetRequest>(&header, _body_bytes, handles, &mut req)?;
3853                        let control_handle = InputControlHandle { inner: this.inner.clone() };
3854                        Ok(InputRequest::Set {
3855                            input_states: req.input_states,
3856
3857                            responder: InputSetResponder {
3858                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3859                                tx_id: header.tx_id,
3860                            },
3861                        })
3862                    }
3863                    _ => Err(fidl::Error::UnknownOrdinal {
3864                        ordinal: header.ordinal,
3865                        protocol_name: <InputMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3866                    }),
3867                }))
3868            },
3869        )
3870    }
3871}
3872
3873/// Settings related to input to the device.
3874///
3875/// Supported SettingsEpitaph enums:
3876/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
3877#[derive(Debug)]
3878pub enum InputRequest {
3879    /// Gets the current |InputSettings|. Returns immediately on first call;
3880    /// subsequent calls return when the value changes.
3881    ///
3882    /// When any of the input devices' states change, this will return the
3883    /// full [InputSettings] object, containing the states for all the
3884    /// available input devices on the target device.
3885    ///
3886    /// To find the state of a specific input device, the devices vector
3887    /// contained in settings can be iterated through to find a specific
3888    /// [DeviceType]. If there are multiple devices of the same [DeviceType],
3889    /// the [InputDevice]'s device_name can be examined in conjunction with
3890    /// the [DeviceType] to find the desired input device. Together, the
3891    /// device_name and [DeviceType] uniquely identify an [InputDevice].
3892    ///
3893    /// If this call fails, it is considered a fatal error and the channel
3894    /// will be closed.
3895    Watch { responder: InputWatchResponder },
3896    /// Requests software input devices to set their software state. May
3897    /// not necessarily change the overall state of the device, depending on
3898    /// the hardware state. Will modify the software state of the existing
3899    /// device if a known device_name and device_type are passed. Otherwise
3900    /// it will add a new input device. Devices not included in input_states
3901    /// will not be modified.
3902    Set { input_states: Vec<InputState>, responder: InputSetResponder },
3903}
3904
3905impl InputRequest {
3906    #[allow(irrefutable_let_patterns)]
3907    pub fn into_watch(self) -> Option<(InputWatchResponder)> {
3908        if let InputRequest::Watch { responder } = self { Some((responder)) } else { None }
3909    }
3910
3911    #[allow(irrefutable_let_patterns)]
3912    pub fn into_set(self) -> Option<(Vec<InputState>, InputSetResponder)> {
3913        if let InputRequest::Set { input_states, responder } = self {
3914            Some((input_states, responder))
3915        } else {
3916            None
3917        }
3918    }
3919
3920    /// Name of the method defined in FIDL
3921    pub fn method_name(&self) -> &'static str {
3922        match *self {
3923            InputRequest::Watch { .. } => "watch",
3924            InputRequest::Set { .. } => "set",
3925        }
3926    }
3927}
3928
3929#[derive(Debug, Clone)]
3930pub struct InputControlHandle {
3931    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3932}
3933
3934impl fidl::endpoints::ControlHandle for InputControlHandle {
3935    fn shutdown(&self) {
3936        self.inner.shutdown()
3937    }
3938    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
3939        self.inner.shutdown_with_epitaph(status)
3940    }
3941
3942    fn is_closed(&self) -> bool {
3943        self.inner.channel().is_closed()
3944    }
3945    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3946        self.inner.channel().on_closed()
3947    }
3948
3949    #[cfg(target_os = "fuchsia")]
3950    fn signal_peer(
3951        &self,
3952        clear_mask: zx::Signals,
3953        set_mask: zx::Signals,
3954    ) -> Result<(), zx_status::Status> {
3955        use fidl::Peered;
3956        self.inner.channel().signal_peer(clear_mask, set_mask)
3957    }
3958}
3959
3960impl InputControlHandle {}
3961
3962#[must_use = "FIDL methods require a response to be sent"]
3963#[derive(Debug)]
3964pub struct InputWatchResponder {
3965    control_handle: std::mem::ManuallyDrop<InputControlHandle>,
3966    tx_id: u32,
3967}
3968
3969/// Set the the channel to be shutdown (see [`InputControlHandle::shutdown`])
3970/// if the responder is dropped without sending a response, so that the client
3971/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3972impl std::ops::Drop for InputWatchResponder {
3973    fn drop(&mut self) {
3974        self.control_handle.shutdown();
3975        // Safety: drops once, never accessed again
3976        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3977    }
3978}
3979
3980impl fidl::endpoints::Responder for InputWatchResponder {
3981    type ControlHandle = InputControlHandle;
3982
3983    fn control_handle(&self) -> &InputControlHandle {
3984        &self.control_handle
3985    }
3986
3987    fn drop_without_shutdown(mut self) {
3988        // Safety: drops once, never accessed again due to mem::forget
3989        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3990        // Prevent Drop from running (which would shut down the channel)
3991        std::mem::forget(self);
3992    }
3993}
3994
3995impl InputWatchResponder {
3996    /// Sends a response to the FIDL transaction.
3997    ///
3998    /// Sets the channel to shutdown if an error occurs.
3999    pub fn send(self, mut settings: &InputSettings) -> Result<(), fidl::Error> {
4000        let _result = self.send_raw(settings);
4001        if _result.is_err() {
4002            self.control_handle.shutdown();
4003        }
4004        self.drop_without_shutdown();
4005        _result
4006    }
4007
4008    /// Similar to "send" but does not shutdown the channel if an error occurs.
4009    pub fn send_no_shutdown_on_err(self, mut settings: &InputSettings) -> Result<(), fidl::Error> {
4010        let _result = self.send_raw(settings);
4011        self.drop_without_shutdown();
4012        _result
4013    }
4014
4015    fn send_raw(&self, mut settings: &InputSettings) -> Result<(), fidl::Error> {
4016        self.control_handle.inner.send::<InputWatchResponse>(
4017            (settings,),
4018            self.tx_id,
4019            0x1bc41a7e0edd19c9,
4020            fidl::encoding::DynamicFlags::empty(),
4021        )
4022    }
4023}
4024
4025#[must_use = "FIDL methods require a response to be sent"]
4026#[derive(Debug)]
4027pub struct InputSetResponder {
4028    control_handle: std::mem::ManuallyDrop<InputControlHandle>,
4029    tx_id: u32,
4030}
4031
4032/// Set the the channel to be shutdown (see [`InputControlHandle::shutdown`])
4033/// if the responder is dropped without sending a response, so that the client
4034/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4035impl std::ops::Drop for InputSetResponder {
4036    fn drop(&mut self) {
4037        self.control_handle.shutdown();
4038        // Safety: drops once, never accessed again
4039        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4040    }
4041}
4042
4043impl fidl::endpoints::Responder for InputSetResponder {
4044    type ControlHandle = InputControlHandle;
4045
4046    fn control_handle(&self) -> &InputControlHandle {
4047        &self.control_handle
4048    }
4049
4050    fn drop_without_shutdown(mut self) {
4051        // Safety: drops once, never accessed again due to mem::forget
4052        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4053        // Prevent Drop from running (which would shut down the channel)
4054        std::mem::forget(self);
4055    }
4056}
4057
4058impl InputSetResponder {
4059    /// Sends a response to the FIDL transaction.
4060    ///
4061    /// Sets the channel to shutdown if an error occurs.
4062    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
4063        let _result = self.send_raw(result);
4064        if _result.is_err() {
4065            self.control_handle.shutdown();
4066        }
4067        self.drop_without_shutdown();
4068        _result
4069    }
4070
4071    /// Similar to "send" but does not shutdown the channel if an error occurs.
4072    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
4073        let _result = self.send_raw(result);
4074        self.drop_without_shutdown();
4075        _result
4076    }
4077
4078    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
4079        self.control_handle
4080            .inner
4081            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
4082                result,
4083                self.tx_id,
4084                0x2447379e693141ca,
4085                fidl::encoding::DynamicFlags::empty(),
4086            )
4087    }
4088}
4089
4090#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4091pub struct IntlMarker;
4092
4093impl fidl::endpoints::ProtocolMarker for IntlMarker {
4094    type Proxy = IntlProxy;
4095    type RequestStream = IntlRequestStream;
4096    #[cfg(target_os = "fuchsia")]
4097    type SynchronousProxy = IntlSynchronousProxy;
4098
4099    const DEBUG_NAME: &'static str = "fuchsia.settings.Intl";
4100}
4101impl fidl::endpoints::DiscoverableProtocolMarker for IntlMarker {}
4102pub type IntlSetResult = Result<(), Error>;
4103
4104pub trait IntlProxyInterface: Send + Sync {
4105    type WatchResponseFut: std::future::Future<Output = Result<IntlSettings, fidl::Error>> + Send;
4106    fn r#watch(&self) -> Self::WatchResponseFut;
4107    type SetResponseFut: std::future::Future<Output = Result<IntlSetResult, fidl::Error>> + Send;
4108    fn r#set(&self, settings: &IntlSettings) -> Self::SetResponseFut;
4109}
4110#[derive(Debug)]
4111#[cfg(target_os = "fuchsia")]
4112pub struct IntlSynchronousProxy {
4113    client: fidl::client::sync::Client,
4114}
4115
4116#[cfg(target_os = "fuchsia")]
4117impl fidl::endpoints::SynchronousProxy for IntlSynchronousProxy {
4118    type Proxy = IntlProxy;
4119    type Protocol = IntlMarker;
4120
4121    fn from_channel(inner: fidl::Channel) -> Self {
4122        Self::new(inner)
4123    }
4124
4125    fn into_channel(self) -> fidl::Channel {
4126        self.client.into_channel()
4127    }
4128
4129    fn as_channel(&self) -> &fidl::Channel {
4130        self.client.as_channel()
4131    }
4132}
4133
4134#[cfg(target_os = "fuchsia")]
4135impl IntlSynchronousProxy {
4136    pub fn new(channel: fidl::Channel) -> Self {
4137        let protocol_name = <IntlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
4138        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
4139    }
4140
4141    pub fn into_channel(self) -> fidl::Channel {
4142        self.client.into_channel()
4143    }
4144
4145    /// Waits until an event arrives and returns it. It is safe for other
4146    /// threads to make concurrent requests while waiting for an event.
4147    pub fn wait_for_event(&self, deadline: zx::MonotonicInstant) -> Result<IntlEvent, fidl::Error> {
4148        IntlEvent::decode(self.client.wait_for_event(deadline)?)
4149    }
4150
4151    /// Gets the current [IntlSettings]. Returns immediately on first call;
4152    /// subsequent calls return when the value changes.
4153    ///
4154    /// If this call fails, it is considered a fatal error and the channel
4155    /// will be closed.
4156    pub fn r#watch(&self, ___deadline: zx::MonotonicInstant) -> Result<IntlSettings, fidl::Error> {
4157        let _response = self.client.send_query::<fidl::encoding::EmptyPayload, IntlWatchResponse>(
4158            (),
4159            0x3c85d6b8a85ab6e3,
4160            fidl::encoding::DynamicFlags::empty(),
4161            ___deadline,
4162        )?;
4163        Ok(_response.settings)
4164    }
4165
4166    /// Sets [IntlSettings] settings. Any field not explicitly set in the table performs a
4167    /// no-op, and will not make any changes.
4168    pub fn r#set(
4169        &self,
4170        mut settings: &IntlSettings,
4171        ___deadline: zx::MonotonicInstant,
4172    ) -> Result<IntlSetResult, fidl::Error> {
4173        let _response = self.client.send_query::<IntlSetRequest, fidl::encoding::ResultType<
4174            fidl::encoding::EmptyStruct,
4175            Error,
4176        >>(
4177            (settings,),
4178            0x273014eb4d880c5a,
4179            fidl::encoding::DynamicFlags::empty(),
4180            ___deadline,
4181        )?;
4182        Ok(_response.map(|x| x))
4183    }
4184}
4185
4186#[cfg(target_os = "fuchsia")]
4187impl From<IntlSynchronousProxy> for zx::Handle {
4188    fn from(value: IntlSynchronousProxy) -> Self {
4189        value.into_channel().into()
4190    }
4191}
4192
4193#[cfg(target_os = "fuchsia")]
4194impl From<fidl::Channel> for IntlSynchronousProxy {
4195    fn from(value: fidl::Channel) -> Self {
4196        Self::new(value)
4197    }
4198}
4199
4200#[cfg(target_os = "fuchsia")]
4201impl fidl::endpoints::FromClient for IntlSynchronousProxy {
4202    type Protocol = IntlMarker;
4203
4204    fn from_client(value: fidl::endpoints::ClientEnd<IntlMarker>) -> Self {
4205        Self::new(value.into_channel())
4206    }
4207}
4208
4209#[derive(Debug, Clone)]
4210pub struct IntlProxy {
4211    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
4212}
4213
4214impl fidl::endpoints::Proxy for IntlProxy {
4215    type Protocol = IntlMarker;
4216
4217    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
4218        Self::new(inner)
4219    }
4220
4221    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
4222        self.client.into_channel().map_err(|client| Self { client })
4223    }
4224
4225    fn as_channel(&self) -> &::fidl::AsyncChannel {
4226        self.client.as_channel()
4227    }
4228}
4229
4230impl IntlProxy {
4231    /// Create a new Proxy for fuchsia.settings/Intl.
4232    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
4233        let protocol_name = <IntlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
4234        Self { client: fidl::client::Client::new(channel, protocol_name) }
4235    }
4236
4237    /// Get a Stream of events from the remote end of the protocol.
4238    ///
4239    /// # Panics
4240    ///
4241    /// Panics if the event stream was already taken.
4242    pub fn take_event_stream(&self) -> IntlEventStream {
4243        IntlEventStream { event_receiver: self.client.take_event_receiver() }
4244    }
4245
4246    /// Gets the current [IntlSettings]. Returns immediately on first call;
4247    /// subsequent calls return when the value changes.
4248    ///
4249    /// If this call fails, it is considered a fatal error and the channel
4250    /// will be closed.
4251    pub fn r#watch(
4252        &self,
4253    ) -> fidl::client::QueryResponseFut<IntlSettings, fidl::encoding::DefaultFuchsiaResourceDialect>
4254    {
4255        IntlProxyInterface::r#watch(self)
4256    }
4257
4258    /// Sets [IntlSettings] settings. Any field not explicitly set in the table performs a
4259    /// no-op, and will not make any changes.
4260    pub fn r#set(
4261        &self,
4262        mut settings: &IntlSettings,
4263    ) -> fidl::client::QueryResponseFut<IntlSetResult, fidl::encoding::DefaultFuchsiaResourceDialect>
4264    {
4265        IntlProxyInterface::r#set(self, settings)
4266    }
4267}
4268
4269impl IntlProxyInterface for IntlProxy {
4270    type WatchResponseFut =
4271        fidl::client::QueryResponseFut<IntlSettings, fidl::encoding::DefaultFuchsiaResourceDialect>;
4272    fn r#watch(&self) -> Self::WatchResponseFut {
4273        fn _decode(
4274            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4275        ) -> Result<IntlSettings, fidl::Error> {
4276            let _response = fidl::client::decode_transaction_body::<
4277                IntlWatchResponse,
4278                fidl::encoding::DefaultFuchsiaResourceDialect,
4279                0x3c85d6b8a85ab6e3,
4280            >(_buf?)?;
4281            Ok(_response.settings)
4282        }
4283        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, IntlSettings>(
4284            (),
4285            0x3c85d6b8a85ab6e3,
4286            fidl::encoding::DynamicFlags::empty(),
4287            _decode,
4288        )
4289    }
4290
4291    type SetResponseFut = fidl::client::QueryResponseFut<
4292        IntlSetResult,
4293        fidl::encoding::DefaultFuchsiaResourceDialect,
4294    >;
4295    fn r#set(&self, mut settings: &IntlSettings) -> Self::SetResponseFut {
4296        fn _decode(
4297            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4298        ) -> Result<IntlSetResult, fidl::Error> {
4299            let _response = fidl::client::decode_transaction_body::<
4300                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
4301                fidl::encoding::DefaultFuchsiaResourceDialect,
4302                0x273014eb4d880c5a,
4303            >(_buf?)?;
4304            Ok(_response.map(|x| x))
4305        }
4306        self.client.send_query_and_decode::<IntlSetRequest, IntlSetResult>(
4307            (settings,),
4308            0x273014eb4d880c5a,
4309            fidl::encoding::DynamicFlags::empty(),
4310            _decode,
4311        )
4312    }
4313}
4314
4315pub struct IntlEventStream {
4316    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
4317}
4318
4319impl std::marker::Unpin for IntlEventStream {}
4320
4321impl futures::stream::FusedStream for IntlEventStream {
4322    fn is_terminated(&self) -> bool {
4323        self.event_receiver.is_terminated()
4324    }
4325}
4326
4327impl futures::Stream for IntlEventStream {
4328    type Item = Result<IntlEvent, fidl::Error>;
4329
4330    fn poll_next(
4331        mut self: std::pin::Pin<&mut Self>,
4332        cx: &mut std::task::Context<'_>,
4333    ) -> std::task::Poll<Option<Self::Item>> {
4334        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
4335            &mut self.event_receiver,
4336            cx
4337        )?) {
4338            Some(buf) => std::task::Poll::Ready(Some(IntlEvent::decode(buf))),
4339            None => std::task::Poll::Ready(None),
4340        }
4341    }
4342}
4343
4344#[derive(Debug)]
4345pub enum IntlEvent {}
4346
4347impl IntlEvent {
4348    /// Decodes a message buffer as a [`IntlEvent`].
4349    fn decode(
4350        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
4351    ) -> Result<IntlEvent, fidl::Error> {
4352        let (bytes, _handles) = buf.split_mut();
4353        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4354        debug_assert_eq!(tx_header.tx_id, 0);
4355        match tx_header.ordinal {
4356            _ => Err(fidl::Error::UnknownOrdinal {
4357                ordinal: tx_header.ordinal,
4358                protocol_name: <IntlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4359            }),
4360        }
4361    }
4362}
4363
4364/// A Stream of incoming requests for fuchsia.settings/Intl.
4365pub struct IntlRequestStream {
4366    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4367    is_terminated: bool,
4368}
4369
4370impl std::marker::Unpin for IntlRequestStream {}
4371
4372impl futures::stream::FusedStream for IntlRequestStream {
4373    fn is_terminated(&self) -> bool {
4374        self.is_terminated
4375    }
4376}
4377
4378impl fidl::endpoints::RequestStream for IntlRequestStream {
4379    type Protocol = IntlMarker;
4380    type ControlHandle = IntlControlHandle;
4381
4382    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
4383        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
4384    }
4385
4386    fn control_handle(&self) -> Self::ControlHandle {
4387        IntlControlHandle { inner: self.inner.clone() }
4388    }
4389
4390    fn into_inner(
4391        self,
4392    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
4393    {
4394        (self.inner, self.is_terminated)
4395    }
4396
4397    fn from_inner(
4398        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4399        is_terminated: bool,
4400    ) -> Self {
4401        Self { inner, is_terminated }
4402    }
4403}
4404
4405impl futures::Stream for IntlRequestStream {
4406    type Item = Result<IntlRequest, fidl::Error>;
4407
4408    fn poll_next(
4409        mut self: std::pin::Pin<&mut Self>,
4410        cx: &mut std::task::Context<'_>,
4411    ) -> std::task::Poll<Option<Self::Item>> {
4412        let this = &mut *self;
4413        if this.inner.check_shutdown(cx) {
4414            this.is_terminated = true;
4415            return std::task::Poll::Ready(None);
4416        }
4417        if this.is_terminated {
4418            panic!("polled IntlRequestStream after completion");
4419        }
4420        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
4421            |bytes, handles| {
4422                match this.inner.channel().read_etc(cx, bytes, handles) {
4423                    std::task::Poll::Ready(Ok(())) => {}
4424                    std::task::Poll::Pending => return std::task::Poll::Pending,
4425                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
4426                        this.is_terminated = true;
4427                        return std::task::Poll::Ready(None);
4428                    }
4429                    std::task::Poll::Ready(Err(e)) => {
4430                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
4431                            e.into(),
4432                        ))));
4433                    }
4434                }
4435
4436                // A message has been received from the channel
4437                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4438
4439                std::task::Poll::Ready(Some(match header.ordinal {
4440                    0x3c85d6b8a85ab6e3 => {
4441                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
4442                        let mut req = fidl::new_empty!(
4443                            fidl::encoding::EmptyPayload,
4444                            fidl::encoding::DefaultFuchsiaResourceDialect
4445                        );
4446                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
4447                        let control_handle = IntlControlHandle { inner: this.inner.clone() };
4448                        Ok(IntlRequest::Watch {
4449                            responder: IntlWatchResponder {
4450                                control_handle: std::mem::ManuallyDrop::new(control_handle),
4451                                tx_id: header.tx_id,
4452                            },
4453                        })
4454                    }
4455                    0x273014eb4d880c5a => {
4456                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
4457                        let mut req = fidl::new_empty!(
4458                            IntlSetRequest,
4459                            fidl::encoding::DefaultFuchsiaResourceDialect
4460                        );
4461                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<IntlSetRequest>(&header, _body_bytes, handles, &mut req)?;
4462                        let control_handle = IntlControlHandle { inner: this.inner.clone() };
4463                        Ok(IntlRequest::Set {
4464                            settings: req.settings,
4465
4466                            responder: IntlSetResponder {
4467                                control_handle: std::mem::ManuallyDrop::new(control_handle),
4468                                tx_id: header.tx_id,
4469                            },
4470                        })
4471                    }
4472                    _ => Err(fidl::Error::UnknownOrdinal {
4473                        ordinal: header.ordinal,
4474                        protocol_name: <IntlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4475                    }),
4476                }))
4477            },
4478        )
4479    }
4480}
4481
4482/// Settings related to internationalization such as locale, time zone, and
4483/// temperature units.
4484///
4485/// Supported SettingsEpitaph enums:
4486/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR,
4487/// FILE_READ_ERROR
4488#[derive(Debug)]
4489pub enum IntlRequest {
4490    /// Gets the current [IntlSettings]. Returns immediately on first call;
4491    /// subsequent calls return when the value changes.
4492    ///
4493    /// If this call fails, it is considered a fatal error and the channel
4494    /// will be closed.
4495    Watch { responder: IntlWatchResponder },
4496    /// Sets [IntlSettings] settings. Any field not explicitly set in the table performs a
4497    /// no-op, and will not make any changes.
4498    Set { settings: IntlSettings, responder: IntlSetResponder },
4499}
4500
4501impl IntlRequest {
4502    #[allow(irrefutable_let_patterns)]
4503    pub fn into_watch(self) -> Option<(IntlWatchResponder)> {
4504        if let IntlRequest::Watch { responder } = self { Some((responder)) } else { None }
4505    }
4506
4507    #[allow(irrefutable_let_patterns)]
4508    pub fn into_set(self) -> Option<(IntlSettings, IntlSetResponder)> {
4509        if let IntlRequest::Set { settings, responder } = self {
4510            Some((settings, responder))
4511        } else {
4512            None
4513        }
4514    }
4515
4516    /// Name of the method defined in FIDL
4517    pub fn method_name(&self) -> &'static str {
4518        match *self {
4519            IntlRequest::Watch { .. } => "watch",
4520            IntlRequest::Set { .. } => "set",
4521        }
4522    }
4523}
4524
4525#[derive(Debug, Clone)]
4526pub struct IntlControlHandle {
4527    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4528}
4529
4530impl fidl::endpoints::ControlHandle for IntlControlHandle {
4531    fn shutdown(&self) {
4532        self.inner.shutdown()
4533    }
4534    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
4535        self.inner.shutdown_with_epitaph(status)
4536    }
4537
4538    fn is_closed(&self) -> bool {
4539        self.inner.channel().is_closed()
4540    }
4541    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
4542        self.inner.channel().on_closed()
4543    }
4544
4545    #[cfg(target_os = "fuchsia")]
4546    fn signal_peer(
4547        &self,
4548        clear_mask: zx::Signals,
4549        set_mask: zx::Signals,
4550    ) -> Result<(), zx_status::Status> {
4551        use fidl::Peered;
4552        self.inner.channel().signal_peer(clear_mask, set_mask)
4553    }
4554}
4555
4556impl IntlControlHandle {}
4557
4558#[must_use = "FIDL methods require a response to be sent"]
4559#[derive(Debug)]
4560pub struct IntlWatchResponder {
4561    control_handle: std::mem::ManuallyDrop<IntlControlHandle>,
4562    tx_id: u32,
4563}
4564
4565/// Set the the channel to be shutdown (see [`IntlControlHandle::shutdown`])
4566/// if the responder is dropped without sending a response, so that the client
4567/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4568impl std::ops::Drop for IntlWatchResponder {
4569    fn drop(&mut self) {
4570        self.control_handle.shutdown();
4571        // Safety: drops once, never accessed again
4572        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4573    }
4574}
4575
4576impl fidl::endpoints::Responder for IntlWatchResponder {
4577    type ControlHandle = IntlControlHandle;
4578
4579    fn control_handle(&self) -> &IntlControlHandle {
4580        &self.control_handle
4581    }
4582
4583    fn drop_without_shutdown(mut self) {
4584        // Safety: drops once, never accessed again due to mem::forget
4585        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4586        // Prevent Drop from running (which would shut down the channel)
4587        std::mem::forget(self);
4588    }
4589}
4590
4591impl IntlWatchResponder {
4592    /// Sends a response to the FIDL transaction.
4593    ///
4594    /// Sets the channel to shutdown if an error occurs.
4595    pub fn send(self, mut settings: &IntlSettings) -> Result<(), fidl::Error> {
4596        let _result = self.send_raw(settings);
4597        if _result.is_err() {
4598            self.control_handle.shutdown();
4599        }
4600        self.drop_without_shutdown();
4601        _result
4602    }
4603
4604    /// Similar to "send" but does not shutdown the channel if an error occurs.
4605    pub fn send_no_shutdown_on_err(self, mut settings: &IntlSettings) -> Result<(), fidl::Error> {
4606        let _result = self.send_raw(settings);
4607        self.drop_without_shutdown();
4608        _result
4609    }
4610
4611    fn send_raw(&self, mut settings: &IntlSettings) -> Result<(), fidl::Error> {
4612        self.control_handle.inner.send::<IntlWatchResponse>(
4613            (settings,),
4614            self.tx_id,
4615            0x3c85d6b8a85ab6e3,
4616            fidl::encoding::DynamicFlags::empty(),
4617        )
4618    }
4619}
4620
4621#[must_use = "FIDL methods require a response to be sent"]
4622#[derive(Debug)]
4623pub struct IntlSetResponder {
4624    control_handle: std::mem::ManuallyDrop<IntlControlHandle>,
4625    tx_id: u32,
4626}
4627
4628/// Set the the channel to be shutdown (see [`IntlControlHandle::shutdown`])
4629/// if the responder is dropped without sending a response, so that the client
4630/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4631impl std::ops::Drop for IntlSetResponder {
4632    fn drop(&mut self) {
4633        self.control_handle.shutdown();
4634        // Safety: drops once, never accessed again
4635        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4636    }
4637}
4638
4639impl fidl::endpoints::Responder for IntlSetResponder {
4640    type ControlHandle = IntlControlHandle;
4641
4642    fn control_handle(&self) -> &IntlControlHandle {
4643        &self.control_handle
4644    }
4645
4646    fn drop_without_shutdown(mut self) {
4647        // Safety: drops once, never accessed again due to mem::forget
4648        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4649        // Prevent Drop from running (which would shut down the channel)
4650        std::mem::forget(self);
4651    }
4652}
4653
4654impl IntlSetResponder {
4655    /// Sends a response to the FIDL transaction.
4656    ///
4657    /// Sets the channel to shutdown if an error occurs.
4658    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
4659        let _result = self.send_raw(result);
4660        if _result.is_err() {
4661            self.control_handle.shutdown();
4662        }
4663        self.drop_without_shutdown();
4664        _result
4665    }
4666
4667    /// Similar to "send" but does not shutdown the channel if an error occurs.
4668    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
4669        let _result = self.send_raw(result);
4670        self.drop_without_shutdown();
4671        _result
4672    }
4673
4674    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
4675        self.control_handle
4676            .inner
4677            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
4678                result,
4679                self.tx_id,
4680                0x273014eb4d880c5a,
4681                fidl::encoding::DynamicFlags::empty(),
4682            )
4683    }
4684}
4685
4686#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4687pub struct KeyboardMarker;
4688
4689impl fidl::endpoints::ProtocolMarker for KeyboardMarker {
4690    type Proxy = KeyboardProxy;
4691    type RequestStream = KeyboardRequestStream;
4692    #[cfg(target_os = "fuchsia")]
4693    type SynchronousProxy = KeyboardSynchronousProxy;
4694
4695    const DEBUG_NAME: &'static str = "fuchsia.settings.Keyboard";
4696}
4697impl fidl::endpoints::DiscoverableProtocolMarker for KeyboardMarker {}
4698
4699pub trait KeyboardProxyInterface: Send + Sync {
4700    type SetResponseFut: std::future::Future<Output = Result<KeyboardSetSetResult, fidl::Error>>
4701        + Send;
4702    fn r#set(&self, settings: &KeyboardSettings) -> Self::SetResponseFut;
4703    type WatchResponseFut: std::future::Future<Output = Result<KeyboardSettings, fidl::Error>>
4704        + Send;
4705    fn r#watch(&self) -> Self::WatchResponseFut;
4706}
4707#[derive(Debug)]
4708#[cfg(target_os = "fuchsia")]
4709pub struct KeyboardSynchronousProxy {
4710    client: fidl::client::sync::Client,
4711}
4712
4713#[cfg(target_os = "fuchsia")]
4714impl fidl::endpoints::SynchronousProxy for KeyboardSynchronousProxy {
4715    type Proxy = KeyboardProxy;
4716    type Protocol = KeyboardMarker;
4717
4718    fn from_channel(inner: fidl::Channel) -> Self {
4719        Self::new(inner)
4720    }
4721
4722    fn into_channel(self) -> fidl::Channel {
4723        self.client.into_channel()
4724    }
4725
4726    fn as_channel(&self) -> &fidl::Channel {
4727        self.client.as_channel()
4728    }
4729}
4730
4731#[cfg(target_os = "fuchsia")]
4732impl KeyboardSynchronousProxy {
4733    pub fn new(channel: fidl::Channel) -> Self {
4734        let protocol_name = <KeyboardMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
4735        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
4736    }
4737
4738    pub fn into_channel(self) -> fidl::Channel {
4739        self.client.into_channel()
4740    }
4741
4742    /// Waits until an event arrives and returns it. It is safe for other
4743    /// threads to make concurrent requests while waiting for an event.
4744    pub fn wait_for_event(
4745        &self,
4746        deadline: zx::MonotonicInstant,
4747    ) -> Result<KeyboardEvent, fidl::Error> {
4748        KeyboardEvent::decode(self.client.wait_for_event(deadline)?)
4749    }
4750
4751    /// Setting protocol: if a field is left unset, it is not modified.
4752    /// To clear a field, set it to its type's "zero" value.
4753    pub fn r#set(
4754        &self,
4755        mut settings: &KeyboardSettings,
4756        ___deadline: zx::MonotonicInstant,
4757    ) -> Result<KeyboardSetSetResult, fidl::Error> {
4758        let _response = self.client.send_query::<
4759            KeyboardSetSetRequest,
4760            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
4761        >(
4762            (settings,),
4763            0x691f4493d263c843,
4764            fidl::encoding::DynamicFlags::empty(),
4765            ___deadline,
4766        )?;
4767        Ok(_response.map(|x| x))
4768    }
4769
4770    /// The Watch protocol is the same as in the other `fuchsia.settings.*` protocols.
4771    ///
4772    /// Returns immediately on first call; on subsequent calls it blocks until the settings
4773    /// change, and then returns following the "hanging get" pattern.
4774    pub fn r#watch(
4775        &self,
4776        ___deadline: zx::MonotonicInstant,
4777    ) -> Result<KeyboardSettings, fidl::Error> {
4778        let _response =
4779            self.client.send_query::<fidl::encoding::EmptyPayload, KeyboardWatchWatchResponse>(
4780                (),
4781                0x357f6213b3a54527,
4782                fidl::encoding::DynamicFlags::empty(),
4783                ___deadline,
4784            )?;
4785        Ok(_response.settings)
4786    }
4787}
4788
4789#[cfg(target_os = "fuchsia")]
4790impl From<KeyboardSynchronousProxy> for zx::Handle {
4791    fn from(value: KeyboardSynchronousProxy) -> Self {
4792        value.into_channel().into()
4793    }
4794}
4795
4796#[cfg(target_os = "fuchsia")]
4797impl From<fidl::Channel> for KeyboardSynchronousProxy {
4798    fn from(value: fidl::Channel) -> Self {
4799        Self::new(value)
4800    }
4801}
4802
4803#[cfg(target_os = "fuchsia")]
4804impl fidl::endpoints::FromClient for KeyboardSynchronousProxy {
4805    type Protocol = KeyboardMarker;
4806
4807    fn from_client(value: fidl::endpoints::ClientEnd<KeyboardMarker>) -> Self {
4808        Self::new(value.into_channel())
4809    }
4810}
4811
4812#[derive(Debug, Clone)]
4813pub struct KeyboardProxy {
4814    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
4815}
4816
4817impl fidl::endpoints::Proxy for KeyboardProxy {
4818    type Protocol = KeyboardMarker;
4819
4820    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
4821        Self::new(inner)
4822    }
4823
4824    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
4825        self.client.into_channel().map_err(|client| Self { client })
4826    }
4827
4828    fn as_channel(&self) -> &::fidl::AsyncChannel {
4829        self.client.as_channel()
4830    }
4831}
4832
4833impl KeyboardProxy {
4834    /// Create a new Proxy for fuchsia.settings/Keyboard.
4835    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
4836        let protocol_name = <KeyboardMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
4837        Self { client: fidl::client::Client::new(channel, protocol_name) }
4838    }
4839
4840    /// Get a Stream of events from the remote end of the protocol.
4841    ///
4842    /// # Panics
4843    ///
4844    /// Panics if the event stream was already taken.
4845    pub fn take_event_stream(&self) -> KeyboardEventStream {
4846        KeyboardEventStream { event_receiver: self.client.take_event_receiver() }
4847    }
4848
4849    /// Setting protocol: if a field is left unset, it is not modified.
4850    /// To clear a field, set it to its type's "zero" value.
4851    pub fn r#set(
4852        &self,
4853        mut settings: &KeyboardSettings,
4854    ) -> fidl::client::QueryResponseFut<
4855        KeyboardSetSetResult,
4856        fidl::encoding::DefaultFuchsiaResourceDialect,
4857    > {
4858        KeyboardProxyInterface::r#set(self, settings)
4859    }
4860
4861    /// The Watch protocol is the same as in the other `fuchsia.settings.*` protocols.
4862    ///
4863    /// Returns immediately on first call; on subsequent calls it blocks until the settings
4864    /// change, and then returns following the "hanging get" pattern.
4865    pub fn r#watch(
4866        &self,
4867    ) -> fidl::client::QueryResponseFut<
4868        KeyboardSettings,
4869        fidl::encoding::DefaultFuchsiaResourceDialect,
4870    > {
4871        KeyboardProxyInterface::r#watch(self)
4872    }
4873}
4874
4875impl KeyboardProxyInterface for KeyboardProxy {
4876    type SetResponseFut = fidl::client::QueryResponseFut<
4877        KeyboardSetSetResult,
4878        fidl::encoding::DefaultFuchsiaResourceDialect,
4879    >;
4880    fn r#set(&self, mut settings: &KeyboardSettings) -> Self::SetResponseFut {
4881        fn _decode(
4882            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4883        ) -> Result<KeyboardSetSetResult, fidl::Error> {
4884            let _response = fidl::client::decode_transaction_body::<
4885                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
4886                fidl::encoding::DefaultFuchsiaResourceDialect,
4887                0x691f4493d263c843,
4888            >(_buf?)?;
4889            Ok(_response.map(|x| x))
4890        }
4891        self.client.send_query_and_decode::<KeyboardSetSetRequest, KeyboardSetSetResult>(
4892            (settings,),
4893            0x691f4493d263c843,
4894            fidl::encoding::DynamicFlags::empty(),
4895            _decode,
4896        )
4897    }
4898
4899    type WatchResponseFut = fidl::client::QueryResponseFut<
4900        KeyboardSettings,
4901        fidl::encoding::DefaultFuchsiaResourceDialect,
4902    >;
4903    fn r#watch(&self) -> Self::WatchResponseFut {
4904        fn _decode(
4905            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4906        ) -> Result<KeyboardSettings, fidl::Error> {
4907            let _response = fidl::client::decode_transaction_body::<
4908                KeyboardWatchWatchResponse,
4909                fidl::encoding::DefaultFuchsiaResourceDialect,
4910                0x357f6213b3a54527,
4911            >(_buf?)?;
4912            Ok(_response.settings)
4913        }
4914        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, KeyboardSettings>(
4915            (),
4916            0x357f6213b3a54527,
4917            fidl::encoding::DynamicFlags::empty(),
4918            _decode,
4919        )
4920    }
4921}
4922
4923pub struct KeyboardEventStream {
4924    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
4925}
4926
4927impl std::marker::Unpin for KeyboardEventStream {}
4928
4929impl futures::stream::FusedStream for KeyboardEventStream {
4930    fn is_terminated(&self) -> bool {
4931        self.event_receiver.is_terminated()
4932    }
4933}
4934
4935impl futures::Stream for KeyboardEventStream {
4936    type Item = Result<KeyboardEvent, fidl::Error>;
4937
4938    fn poll_next(
4939        mut self: std::pin::Pin<&mut Self>,
4940        cx: &mut std::task::Context<'_>,
4941    ) -> std::task::Poll<Option<Self::Item>> {
4942        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
4943            &mut self.event_receiver,
4944            cx
4945        )?) {
4946            Some(buf) => std::task::Poll::Ready(Some(KeyboardEvent::decode(buf))),
4947            None => std::task::Poll::Ready(None),
4948        }
4949    }
4950}
4951
4952#[derive(Debug)]
4953pub enum KeyboardEvent {}
4954
4955impl KeyboardEvent {
4956    /// Decodes a message buffer as a [`KeyboardEvent`].
4957    fn decode(
4958        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
4959    ) -> Result<KeyboardEvent, fidl::Error> {
4960        let (bytes, _handles) = buf.split_mut();
4961        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4962        debug_assert_eq!(tx_header.tx_id, 0);
4963        match tx_header.ordinal {
4964            _ => Err(fidl::Error::UnknownOrdinal {
4965                ordinal: tx_header.ordinal,
4966                protocol_name: <KeyboardMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4967            }),
4968        }
4969    }
4970}
4971
4972/// A Stream of incoming requests for fuchsia.settings/Keyboard.
4973pub struct KeyboardRequestStream {
4974    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4975    is_terminated: bool,
4976}
4977
4978impl std::marker::Unpin for KeyboardRequestStream {}
4979
4980impl futures::stream::FusedStream for KeyboardRequestStream {
4981    fn is_terminated(&self) -> bool {
4982        self.is_terminated
4983    }
4984}
4985
4986impl fidl::endpoints::RequestStream for KeyboardRequestStream {
4987    type Protocol = KeyboardMarker;
4988    type ControlHandle = KeyboardControlHandle;
4989
4990    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
4991        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
4992    }
4993
4994    fn control_handle(&self) -> Self::ControlHandle {
4995        KeyboardControlHandle { inner: self.inner.clone() }
4996    }
4997
4998    fn into_inner(
4999        self,
5000    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
5001    {
5002        (self.inner, self.is_terminated)
5003    }
5004
5005    fn from_inner(
5006        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5007        is_terminated: bool,
5008    ) -> Self {
5009        Self { inner, is_terminated }
5010    }
5011}
5012
5013impl futures::Stream for KeyboardRequestStream {
5014    type Item = Result<KeyboardRequest, fidl::Error>;
5015
5016    fn poll_next(
5017        mut self: std::pin::Pin<&mut Self>,
5018        cx: &mut std::task::Context<'_>,
5019    ) -> std::task::Poll<Option<Self::Item>> {
5020        let this = &mut *self;
5021        if this.inner.check_shutdown(cx) {
5022            this.is_terminated = true;
5023            return std::task::Poll::Ready(None);
5024        }
5025        if this.is_terminated {
5026            panic!("polled KeyboardRequestStream after completion");
5027        }
5028        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
5029            |bytes, handles| {
5030                match this.inner.channel().read_etc(cx, bytes, handles) {
5031                    std::task::Poll::Ready(Ok(())) => {}
5032                    std::task::Poll::Pending => return std::task::Poll::Pending,
5033                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
5034                        this.is_terminated = true;
5035                        return std::task::Poll::Ready(None);
5036                    }
5037                    std::task::Poll::Ready(Err(e)) => {
5038                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
5039                            e.into(),
5040                        ))));
5041                    }
5042                }
5043
5044                // A message has been received from the channel
5045                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5046
5047                std::task::Poll::Ready(Some(match header.ordinal {
5048                    0x691f4493d263c843 => {
5049                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
5050                        let mut req = fidl::new_empty!(
5051                            KeyboardSetSetRequest,
5052                            fidl::encoding::DefaultFuchsiaResourceDialect
5053                        );
5054                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyboardSetSetRequest>(&header, _body_bytes, handles, &mut req)?;
5055                        let control_handle = KeyboardControlHandle { inner: this.inner.clone() };
5056                        Ok(KeyboardRequest::Set {
5057                            settings: req.settings,
5058
5059                            responder: KeyboardSetResponder {
5060                                control_handle: std::mem::ManuallyDrop::new(control_handle),
5061                                tx_id: header.tx_id,
5062                            },
5063                        })
5064                    }
5065                    0x357f6213b3a54527 => {
5066                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
5067                        let mut req = fidl::new_empty!(
5068                            fidl::encoding::EmptyPayload,
5069                            fidl::encoding::DefaultFuchsiaResourceDialect
5070                        );
5071                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
5072                        let control_handle = KeyboardControlHandle { inner: this.inner.clone() };
5073                        Ok(KeyboardRequest::Watch {
5074                            responder: KeyboardWatchResponder {
5075                                control_handle: std::mem::ManuallyDrop::new(control_handle),
5076                                tx_id: header.tx_id,
5077                            },
5078                        })
5079                    }
5080                    _ => Err(fidl::Error::UnknownOrdinal {
5081                        ordinal: header.ordinal,
5082                        protocol_name:
5083                            <KeyboardMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5084                    }),
5085                }))
5086            },
5087        )
5088    }
5089}
5090
5091/// The SetUI protocol for reading and modifying the keyboard settings.
5092#[derive(Debug)]
5093pub enum KeyboardRequest {
5094    /// Setting protocol: if a field is left unset, it is not modified.
5095    /// To clear a field, set it to its type's "zero" value.
5096    Set { settings: KeyboardSettings, responder: KeyboardSetResponder },
5097    /// The Watch protocol is the same as in the other `fuchsia.settings.*` protocols.
5098    ///
5099    /// Returns immediately on first call; on subsequent calls it blocks until the settings
5100    /// change, and then returns following the "hanging get" pattern.
5101    Watch { responder: KeyboardWatchResponder },
5102}
5103
5104impl KeyboardRequest {
5105    #[allow(irrefutable_let_patterns)]
5106    pub fn into_set(self) -> Option<(KeyboardSettings, KeyboardSetResponder)> {
5107        if let KeyboardRequest::Set { settings, responder } = self {
5108            Some((settings, responder))
5109        } else {
5110            None
5111        }
5112    }
5113
5114    #[allow(irrefutable_let_patterns)]
5115    pub fn into_watch(self) -> Option<(KeyboardWatchResponder)> {
5116        if let KeyboardRequest::Watch { responder } = self { Some((responder)) } else { None }
5117    }
5118
5119    /// Name of the method defined in FIDL
5120    pub fn method_name(&self) -> &'static str {
5121        match *self {
5122            KeyboardRequest::Set { .. } => "set",
5123            KeyboardRequest::Watch { .. } => "watch",
5124        }
5125    }
5126}
5127
5128#[derive(Debug, Clone)]
5129pub struct KeyboardControlHandle {
5130    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5131}
5132
5133impl fidl::endpoints::ControlHandle for KeyboardControlHandle {
5134    fn shutdown(&self) {
5135        self.inner.shutdown()
5136    }
5137    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
5138        self.inner.shutdown_with_epitaph(status)
5139    }
5140
5141    fn is_closed(&self) -> bool {
5142        self.inner.channel().is_closed()
5143    }
5144    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
5145        self.inner.channel().on_closed()
5146    }
5147
5148    #[cfg(target_os = "fuchsia")]
5149    fn signal_peer(
5150        &self,
5151        clear_mask: zx::Signals,
5152        set_mask: zx::Signals,
5153    ) -> Result<(), zx_status::Status> {
5154        use fidl::Peered;
5155        self.inner.channel().signal_peer(clear_mask, set_mask)
5156    }
5157}
5158
5159impl KeyboardControlHandle {}
5160
5161#[must_use = "FIDL methods require a response to be sent"]
5162#[derive(Debug)]
5163pub struct KeyboardSetResponder {
5164    control_handle: std::mem::ManuallyDrop<KeyboardControlHandle>,
5165    tx_id: u32,
5166}
5167
5168/// Set the the channel to be shutdown (see [`KeyboardControlHandle::shutdown`])
5169/// if the responder is dropped without sending a response, so that the client
5170/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
5171impl std::ops::Drop for KeyboardSetResponder {
5172    fn drop(&mut self) {
5173        self.control_handle.shutdown();
5174        // Safety: drops once, never accessed again
5175        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5176    }
5177}
5178
5179impl fidl::endpoints::Responder for KeyboardSetResponder {
5180    type ControlHandle = KeyboardControlHandle;
5181
5182    fn control_handle(&self) -> &KeyboardControlHandle {
5183        &self.control_handle
5184    }
5185
5186    fn drop_without_shutdown(mut self) {
5187        // Safety: drops once, never accessed again due to mem::forget
5188        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5189        // Prevent Drop from running (which would shut down the channel)
5190        std::mem::forget(self);
5191    }
5192}
5193
5194impl KeyboardSetResponder {
5195    /// Sends a response to the FIDL transaction.
5196    ///
5197    /// Sets the channel to shutdown if an error occurs.
5198    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
5199        let _result = self.send_raw(result);
5200        if _result.is_err() {
5201            self.control_handle.shutdown();
5202        }
5203        self.drop_without_shutdown();
5204        _result
5205    }
5206
5207    /// Similar to "send" but does not shutdown the channel if an error occurs.
5208    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
5209        let _result = self.send_raw(result);
5210        self.drop_without_shutdown();
5211        _result
5212    }
5213
5214    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
5215        self.control_handle
5216            .inner
5217            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
5218                result,
5219                self.tx_id,
5220                0x691f4493d263c843,
5221                fidl::encoding::DynamicFlags::empty(),
5222            )
5223    }
5224}
5225
5226#[must_use = "FIDL methods require a response to be sent"]
5227#[derive(Debug)]
5228pub struct KeyboardWatchResponder {
5229    control_handle: std::mem::ManuallyDrop<KeyboardControlHandle>,
5230    tx_id: u32,
5231}
5232
5233/// Set the the channel to be shutdown (see [`KeyboardControlHandle::shutdown`])
5234/// if the responder is dropped without sending a response, so that the client
5235/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
5236impl std::ops::Drop for KeyboardWatchResponder {
5237    fn drop(&mut self) {
5238        self.control_handle.shutdown();
5239        // Safety: drops once, never accessed again
5240        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5241    }
5242}
5243
5244impl fidl::endpoints::Responder for KeyboardWatchResponder {
5245    type ControlHandle = KeyboardControlHandle;
5246
5247    fn control_handle(&self) -> &KeyboardControlHandle {
5248        &self.control_handle
5249    }
5250
5251    fn drop_without_shutdown(mut self) {
5252        // Safety: drops once, never accessed again due to mem::forget
5253        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5254        // Prevent Drop from running (which would shut down the channel)
5255        std::mem::forget(self);
5256    }
5257}
5258
5259impl KeyboardWatchResponder {
5260    /// Sends a response to the FIDL transaction.
5261    ///
5262    /// Sets the channel to shutdown if an error occurs.
5263    pub fn send(self, mut settings: &KeyboardSettings) -> Result<(), fidl::Error> {
5264        let _result = self.send_raw(settings);
5265        if _result.is_err() {
5266            self.control_handle.shutdown();
5267        }
5268        self.drop_without_shutdown();
5269        _result
5270    }
5271
5272    /// Similar to "send" but does not shutdown the channel if an error occurs.
5273    pub fn send_no_shutdown_on_err(
5274        self,
5275        mut settings: &KeyboardSettings,
5276    ) -> Result<(), fidl::Error> {
5277        let _result = self.send_raw(settings);
5278        self.drop_without_shutdown();
5279        _result
5280    }
5281
5282    fn send_raw(&self, mut settings: &KeyboardSettings) -> Result<(), fidl::Error> {
5283        self.control_handle.inner.send::<KeyboardWatchWatchResponse>(
5284            (settings,),
5285            self.tx_id,
5286            0x357f6213b3a54527,
5287            fidl::encoding::DynamicFlags::empty(),
5288        )
5289    }
5290}
5291
5292#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
5293pub struct KeyboardSetMarker;
5294
5295impl fidl::endpoints::ProtocolMarker for KeyboardSetMarker {
5296    type Proxy = KeyboardSetProxy;
5297    type RequestStream = KeyboardSetRequestStream;
5298    #[cfg(target_os = "fuchsia")]
5299    type SynchronousProxy = KeyboardSetSynchronousProxy;
5300
5301    const DEBUG_NAME: &'static str = "(anonymous) KeyboardSet";
5302}
5303pub type KeyboardSetSetResult = Result<(), Error>;
5304
5305pub trait KeyboardSetProxyInterface: Send + Sync {
5306    type SetResponseFut: std::future::Future<Output = Result<KeyboardSetSetResult, fidl::Error>>
5307        + Send;
5308    fn r#set(&self, settings: &KeyboardSettings) -> Self::SetResponseFut;
5309}
5310#[derive(Debug)]
5311#[cfg(target_os = "fuchsia")]
5312pub struct KeyboardSetSynchronousProxy {
5313    client: fidl::client::sync::Client,
5314}
5315
5316#[cfg(target_os = "fuchsia")]
5317impl fidl::endpoints::SynchronousProxy for KeyboardSetSynchronousProxy {
5318    type Proxy = KeyboardSetProxy;
5319    type Protocol = KeyboardSetMarker;
5320
5321    fn from_channel(inner: fidl::Channel) -> Self {
5322        Self::new(inner)
5323    }
5324
5325    fn into_channel(self) -> fidl::Channel {
5326        self.client.into_channel()
5327    }
5328
5329    fn as_channel(&self) -> &fidl::Channel {
5330        self.client.as_channel()
5331    }
5332}
5333
5334#[cfg(target_os = "fuchsia")]
5335impl KeyboardSetSynchronousProxy {
5336    pub fn new(channel: fidl::Channel) -> Self {
5337        let protocol_name = <KeyboardSetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
5338        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
5339    }
5340
5341    pub fn into_channel(self) -> fidl::Channel {
5342        self.client.into_channel()
5343    }
5344
5345    /// Waits until an event arrives and returns it. It is safe for other
5346    /// threads to make concurrent requests while waiting for an event.
5347    pub fn wait_for_event(
5348        &self,
5349        deadline: zx::MonotonicInstant,
5350    ) -> Result<KeyboardSetEvent, fidl::Error> {
5351        KeyboardSetEvent::decode(self.client.wait_for_event(deadline)?)
5352    }
5353
5354    /// Setting protocol: if a field is left unset, it is not modified.
5355    /// To clear a field, set it to its type's "zero" value.
5356    pub fn r#set(
5357        &self,
5358        mut settings: &KeyboardSettings,
5359        ___deadline: zx::MonotonicInstant,
5360    ) -> Result<KeyboardSetSetResult, fidl::Error> {
5361        let _response = self.client.send_query::<
5362            KeyboardSetSetRequest,
5363            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
5364        >(
5365            (settings,),
5366            0x691f4493d263c843,
5367            fidl::encoding::DynamicFlags::empty(),
5368            ___deadline,
5369        )?;
5370        Ok(_response.map(|x| x))
5371    }
5372}
5373
5374#[cfg(target_os = "fuchsia")]
5375impl From<KeyboardSetSynchronousProxy> for zx::Handle {
5376    fn from(value: KeyboardSetSynchronousProxy) -> Self {
5377        value.into_channel().into()
5378    }
5379}
5380
5381#[cfg(target_os = "fuchsia")]
5382impl From<fidl::Channel> for KeyboardSetSynchronousProxy {
5383    fn from(value: fidl::Channel) -> Self {
5384        Self::new(value)
5385    }
5386}
5387
5388#[cfg(target_os = "fuchsia")]
5389impl fidl::endpoints::FromClient for KeyboardSetSynchronousProxy {
5390    type Protocol = KeyboardSetMarker;
5391
5392    fn from_client(value: fidl::endpoints::ClientEnd<KeyboardSetMarker>) -> Self {
5393        Self::new(value.into_channel())
5394    }
5395}
5396
5397#[derive(Debug, Clone)]
5398pub struct KeyboardSetProxy {
5399    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
5400}
5401
5402impl fidl::endpoints::Proxy for KeyboardSetProxy {
5403    type Protocol = KeyboardSetMarker;
5404
5405    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
5406        Self::new(inner)
5407    }
5408
5409    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
5410        self.client.into_channel().map_err(|client| Self { client })
5411    }
5412
5413    fn as_channel(&self) -> &::fidl::AsyncChannel {
5414        self.client.as_channel()
5415    }
5416}
5417
5418impl KeyboardSetProxy {
5419    /// Create a new Proxy for fuchsia.settings/KeyboardSet.
5420    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
5421        let protocol_name = <KeyboardSetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
5422        Self { client: fidl::client::Client::new(channel, protocol_name) }
5423    }
5424
5425    /// Get a Stream of events from the remote end of the protocol.
5426    ///
5427    /// # Panics
5428    ///
5429    /// Panics if the event stream was already taken.
5430    pub fn take_event_stream(&self) -> KeyboardSetEventStream {
5431        KeyboardSetEventStream { event_receiver: self.client.take_event_receiver() }
5432    }
5433
5434    /// Setting protocol: if a field is left unset, it is not modified.
5435    /// To clear a field, set it to its type's "zero" value.
5436    pub fn r#set(
5437        &self,
5438        mut settings: &KeyboardSettings,
5439    ) -> fidl::client::QueryResponseFut<
5440        KeyboardSetSetResult,
5441        fidl::encoding::DefaultFuchsiaResourceDialect,
5442    > {
5443        KeyboardSetProxyInterface::r#set(self, settings)
5444    }
5445}
5446
5447impl KeyboardSetProxyInterface for KeyboardSetProxy {
5448    type SetResponseFut = fidl::client::QueryResponseFut<
5449        KeyboardSetSetResult,
5450        fidl::encoding::DefaultFuchsiaResourceDialect,
5451    >;
5452    fn r#set(&self, mut settings: &KeyboardSettings) -> Self::SetResponseFut {
5453        fn _decode(
5454            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
5455        ) -> Result<KeyboardSetSetResult, fidl::Error> {
5456            let _response = fidl::client::decode_transaction_body::<
5457                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
5458                fidl::encoding::DefaultFuchsiaResourceDialect,
5459                0x691f4493d263c843,
5460            >(_buf?)?;
5461            Ok(_response.map(|x| x))
5462        }
5463        self.client.send_query_and_decode::<KeyboardSetSetRequest, KeyboardSetSetResult>(
5464            (settings,),
5465            0x691f4493d263c843,
5466            fidl::encoding::DynamicFlags::empty(),
5467            _decode,
5468        )
5469    }
5470}
5471
5472pub struct KeyboardSetEventStream {
5473    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
5474}
5475
5476impl std::marker::Unpin for KeyboardSetEventStream {}
5477
5478impl futures::stream::FusedStream for KeyboardSetEventStream {
5479    fn is_terminated(&self) -> bool {
5480        self.event_receiver.is_terminated()
5481    }
5482}
5483
5484impl futures::Stream for KeyboardSetEventStream {
5485    type Item = Result<KeyboardSetEvent, fidl::Error>;
5486
5487    fn poll_next(
5488        mut self: std::pin::Pin<&mut Self>,
5489        cx: &mut std::task::Context<'_>,
5490    ) -> std::task::Poll<Option<Self::Item>> {
5491        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
5492            &mut self.event_receiver,
5493            cx
5494        )?) {
5495            Some(buf) => std::task::Poll::Ready(Some(KeyboardSetEvent::decode(buf))),
5496            None => std::task::Poll::Ready(None),
5497        }
5498    }
5499}
5500
5501#[derive(Debug)]
5502pub enum KeyboardSetEvent {}
5503
5504impl KeyboardSetEvent {
5505    /// Decodes a message buffer as a [`KeyboardSetEvent`].
5506    fn decode(
5507        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
5508    ) -> Result<KeyboardSetEvent, fidl::Error> {
5509        let (bytes, _handles) = buf.split_mut();
5510        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5511        debug_assert_eq!(tx_header.tx_id, 0);
5512        match tx_header.ordinal {
5513            _ => Err(fidl::Error::UnknownOrdinal {
5514                ordinal: tx_header.ordinal,
5515                protocol_name: <KeyboardSetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5516            }),
5517        }
5518    }
5519}
5520
5521/// A Stream of incoming requests for fuchsia.settings/KeyboardSet.
5522pub struct KeyboardSetRequestStream {
5523    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5524    is_terminated: bool,
5525}
5526
5527impl std::marker::Unpin for KeyboardSetRequestStream {}
5528
5529impl futures::stream::FusedStream for KeyboardSetRequestStream {
5530    fn is_terminated(&self) -> bool {
5531        self.is_terminated
5532    }
5533}
5534
5535impl fidl::endpoints::RequestStream for KeyboardSetRequestStream {
5536    type Protocol = KeyboardSetMarker;
5537    type ControlHandle = KeyboardSetControlHandle;
5538
5539    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
5540        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
5541    }
5542
5543    fn control_handle(&self) -> Self::ControlHandle {
5544        KeyboardSetControlHandle { inner: self.inner.clone() }
5545    }
5546
5547    fn into_inner(
5548        self,
5549    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
5550    {
5551        (self.inner, self.is_terminated)
5552    }
5553
5554    fn from_inner(
5555        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5556        is_terminated: bool,
5557    ) -> Self {
5558        Self { inner, is_terminated }
5559    }
5560}
5561
5562impl futures::Stream for KeyboardSetRequestStream {
5563    type Item = Result<KeyboardSetRequest, fidl::Error>;
5564
5565    fn poll_next(
5566        mut self: std::pin::Pin<&mut Self>,
5567        cx: &mut std::task::Context<'_>,
5568    ) -> std::task::Poll<Option<Self::Item>> {
5569        let this = &mut *self;
5570        if this.inner.check_shutdown(cx) {
5571            this.is_terminated = true;
5572            return std::task::Poll::Ready(None);
5573        }
5574        if this.is_terminated {
5575            panic!("polled KeyboardSetRequestStream after completion");
5576        }
5577        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
5578            |bytes, handles| {
5579                match this.inner.channel().read_etc(cx, bytes, handles) {
5580                    std::task::Poll::Ready(Ok(())) => {}
5581                    std::task::Poll::Pending => return std::task::Poll::Pending,
5582                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
5583                        this.is_terminated = true;
5584                        return std::task::Poll::Ready(None);
5585                    }
5586                    std::task::Poll::Ready(Err(e)) => {
5587                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
5588                            e.into(),
5589                        ))));
5590                    }
5591                }
5592
5593                // A message has been received from the channel
5594                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5595
5596                std::task::Poll::Ready(Some(match header.ordinal {
5597                    0x691f4493d263c843 => {
5598                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
5599                        let mut req = fidl::new_empty!(
5600                            KeyboardSetSetRequest,
5601                            fidl::encoding::DefaultFuchsiaResourceDialect
5602                        );
5603                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyboardSetSetRequest>(&header, _body_bytes, handles, &mut req)?;
5604                        let control_handle = KeyboardSetControlHandle { inner: this.inner.clone() };
5605                        Ok(KeyboardSetRequest::Set {
5606                            settings: req.settings,
5607
5608                            responder: KeyboardSetSetResponder {
5609                                control_handle: std::mem::ManuallyDrop::new(control_handle),
5610                                tx_id: header.tx_id,
5611                            },
5612                        })
5613                    }
5614                    _ => Err(fidl::Error::UnknownOrdinal {
5615                        ordinal: header.ordinal,
5616                        protocol_name:
5617                            <KeyboardSetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5618                    }),
5619                }))
5620            },
5621        )
5622    }
5623}
5624
5625/// The mutable API for modifying the keyboard settings.
5626#[derive(Debug)]
5627pub enum KeyboardSetRequest {
5628    /// Setting protocol: if a field is left unset, it is not modified.
5629    /// To clear a field, set it to its type's "zero" value.
5630    Set { settings: KeyboardSettings, responder: KeyboardSetSetResponder },
5631}
5632
5633impl KeyboardSetRequest {
5634    #[allow(irrefutable_let_patterns)]
5635    pub fn into_set(self) -> Option<(KeyboardSettings, KeyboardSetSetResponder)> {
5636        if let KeyboardSetRequest::Set { settings, responder } = self {
5637            Some((settings, responder))
5638        } else {
5639            None
5640        }
5641    }
5642
5643    /// Name of the method defined in FIDL
5644    pub fn method_name(&self) -> &'static str {
5645        match *self {
5646            KeyboardSetRequest::Set { .. } => "set",
5647        }
5648    }
5649}
5650
5651#[derive(Debug, Clone)]
5652pub struct KeyboardSetControlHandle {
5653    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5654}
5655
5656impl fidl::endpoints::ControlHandle for KeyboardSetControlHandle {
5657    fn shutdown(&self) {
5658        self.inner.shutdown()
5659    }
5660    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
5661        self.inner.shutdown_with_epitaph(status)
5662    }
5663
5664    fn is_closed(&self) -> bool {
5665        self.inner.channel().is_closed()
5666    }
5667    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
5668        self.inner.channel().on_closed()
5669    }
5670
5671    #[cfg(target_os = "fuchsia")]
5672    fn signal_peer(
5673        &self,
5674        clear_mask: zx::Signals,
5675        set_mask: zx::Signals,
5676    ) -> Result<(), zx_status::Status> {
5677        use fidl::Peered;
5678        self.inner.channel().signal_peer(clear_mask, set_mask)
5679    }
5680}
5681
5682impl KeyboardSetControlHandle {}
5683
5684#[must_use = "FIDL methods require a response to be sent"]
5685#[derive(Debug)]
5686pub struct KeyboardSetSetResponder {
5687    control_handle: std::mem::ManuallyDrop<KeyboardSetControlHandle>,
5688    tx_id: u32,
5689}
5690
5691/// Set the the channel to be shutdown (see [`KeyboardSetControlHandle::shutdown`])
5692/// if the responder is dropped without sending a response, so that the client
5693/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
5694impl std::ops::Drop for KeyboardSetSetResponder {
5695    fn drop(&mut self) {
5696        self.control_handle.shutdown();
5697        // Safety: drops once, never accessed again
5698        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5699    }
5700}
5701
5702impl fidl::endpoints::Responder for KeyboardSetSetResponder {
5703    type ControlHandle = KeyboardSetControlHandle;
5704
5705    fn control_handle(&self) -> &KeyboardSetControlHandle {
5706        &self.control_handle
5707    }
5708
5709    fn drop_without_shutdown(mut self) {
5710        // Safety: drops once, never accessed again due to mem::forget
5711        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5712        // Prevent Drop from running (which would shut down the channel)
5713        std::mem::forget(self);
5714    }
5715}
5716
5717impl KeyboardSetSetResponder {
5718    /// Sends a response to the FIDL transaction.
5719    ///
5720    /// Sets the channel to shutdown if an error occurs.
5721    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
5722        let _result = self.send_raw(result);
5723        if _result.is_err() {
5724            self.control_handle.shutdown();
5725        }
5726        self.drop_without_shutdown();
5727        _result
5728    }
5729
5730    /// Similar to "send" but does not shutdown the channel if an error occurs.
5731    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
5732        let _result = self.send_raw(result);
5733        self.drop_without_shutdown();
5734        _result
5735    }
5736
5737    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
5738        self.control_handle
5739            .inner
5740            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
5741                result,
5742                self.tx_id,
5743                0x691f4493d263c843,
5744                fidl::encoding::DynamicFlags::empty(),
5745            )
5746    }
5747}
5748
5749#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
5750pub struct KeyboardWatchMarker;
5751
5752impl fidl::endpoints::ProtocolMarker for KeyboardWatchMarker {
5753    type Proxy = KeyboardWatchProxy;
5754    type RequestStream = KeyboardWatchRequestStream;
5755    #[cfg(target_os = "fuchsia")]
5756    type SynchronousProxy = KeyboardWatchSynchronousProxy;
5757
5758    const DEBUG_NAME: &'static str = "(anonymous) KeyboardWatch";
5759}
5760
5761pub trait KeyboardWatchProxyInterface: Send + Sync {
5762    type WatchResponseFut: std::future::Future<Output = Result<KeyboardSettings, fidl::Error>>
5763        + Send;
5764    fn r#watch(&self) -> Self::WatchResponseFut;
5765}
5766#[derive(Debug)]
5767#[cfg(target_os = "fuchsia")]
5768pub struct KeyboardWatchSynchronousProxy {
5769    client: fidl::client::sync::Client,
5770}
5771
5772#[cfg(target_os = "fuchsia")]
5773impl fidl::endpoints::SynchronousProxy for KeyboardWatchSynchronousProxy {
5774    type Proxy = KeyboardWatchProxy;
5775    type Protocol = KeyboardWatchMarker;
5776
5777    fn from_channel(inner: fidl::Channel) -> Self {
5778        Self::new(inner)
5779    }
5780
5781    fn into_channel(self) -> fidl::Channel {
5782        self.client.into_channel()
5783    }
5784
5785    fn as_channel(&self) -> &fidl::Channel {
5786        self.client.as_channel()
5787    }
5788}
5789
5790#[cfg(target_os = "fuchsia")]
5791impl KeyboardWatchSynchronousProxy {
5792    pub fn new(channel: fidl::Channel) -> Self {
5793        let protocol_name = <KeyboardWatchMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
5794        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
5795    }
5796
5797    pub fn into_channel(self) -> fidl::Channel {
5798        self.client.into_channel()
5799    }
5800
5801    /// Waits until an event arrives and returns it. It is safe for other
5802    /// threads to make concurrent requests while waiting for an event.
5803    pub fn wait_for_event(
5804        &self,
5805        deadline: zx::MonotonicInstant,
5806    ) -> Result<KeyboardWatchEvent, fidl::Error> {
5807        KeyboardWatchEvent::decode(self.client.wait_for_event(deadline)?)
5808    }
5809
5810    /// The Watch protocol is the same as in the other `fuchsia.settings.*` protocols.
5811    ///
5812    /// Returns immediately on first call; on subsequent calls it blocks until the settings
5813    /// change, and then returns following the "hanging get" pattern.
5814    pub fn r#watch(
5815        &self,
5816        ___deadline: zx::MonotonicInstant,
5817    ) -> Result<KeyboardSettings, fidl::Error> {
5818        let _response =
5819            self.client.send_query::<fidl::encoding::EmptyPayload, KeyboardWatchWatchResponse>(
5820                (),
5821                0x357f6213b3a54527,
5822                fidl::encoding::DynamicFlags::empty(),
5823                ___deadline,
5824            )?;
5825        Ok(_response.settings)
5826    }
5827}
5828
5829#[cfg(target_os = "fuchsia")]
5830impl From<KeyboardWatchSynchronousProxy> for zx::Handle {
5831    fn from(value: KeyboardWatchSynchronousProxy) -> Self {
5832        value.into_channel().into()
5833    }
5834}
5835
5836#[cfg(target_os = "fuchsia")]
5837impl From<fidl::Channel> for KeyboardWatchSynchronousProxy {
5838    fn from(value: fidl::Channel) -> Self {
5839        Self::new(value)
5840    }
5841}
5842
5843#[cfg(target_os = "fuchsia")]
5844impl fidl::endpoints::FromClient for KeyboardWatchSynchronousProxy {
5845    type Protocol = KeyboardWatchMarker;
5846
5847    fn from_client(value: fidl::endpoints::ClientEnd<KeyboardWatchMarker>) -> Self {
5848        Self::new(value.into_channel())
5849    }
5850}
5851
5852#[derive(Debug, Clone)]
5853pub struct KeyboardWatchProxy {
5854    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
5855}
5856
5857impl fidl::endpoints::Proxy for KeyboardWatchProxy {
5858    type Protocol = KeyboardWatchMarker;
5859
5860    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
5861        Self::new(inner)
5862    }
5863
5864    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
5865        self.client.into_channel().map_err(|client| Self { client })
5866    }
5867
5868    fn as_channel(&self) -> &::fidl::AsyncChannel {
5869        self.client.as_channel()
5870    }
5871}
5872
5873impl KeyboardWatchProxy {
5874    /// Create a new Proxy for fuchsia.settings/KeyboardWatch.
5875    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
5876        let protocol_name = <KeyboardWatchMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
5877        Self { client: fidl::client::Client::new(channel, protocol_name) }
5878    }
5879
5880    /// Get a Stream of events from the remote end of the protocol.
5881    ///
5882    /// # Panics
5883    ///
5884    /// Panics if the event stream was already taken.
5885    pub fn take_event_stream(&self) -> KeyboardWatchEventStream {
5886        KeyboardWatchEventStream { event_receiver: self.client.take_event_receiver() }
5887    }
5888
5889    /// The Watch protocol is the same as in the other `fuchsia.settings.*` protocols.
5890    ///
5891    /// Returns immediately on first call; on subsequent calls it blocks until the settings
5892    /// change, and then returns following the "hanging get" pattern.
5893    pub fn r#watch(
5894        &self,
5895    ) -> fidl::client::QueryResponseFut<
5896        KeyboardSettings,
5897        fidl::encoding::DefaultFuchsiaResourceDialect,
5898    > {
5899        KeyboardWatchProxyInterface::r#watch(self)
5900    }
5901}
5902
5903impl KeyboardWatchProxyInterface for KeyboardWatchProxy {
5904    type WatchResponseFut = fidl::client::QueryResponseFut<
5905        KeyboardSettings,
5906        fidl::encoding::DefaultFuchsiaResourceDialect,
5907    >;
5908    fn r#watch(&self) -> Self::WatchResponseFut {
5909        fn _decode(
5910            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
5911        ) -> Result<KeyboardSettings, fidl::Error> {
5912            let _response = fidl::client::decode_transaction_body::<
5913                KeyboardWatchWatchResponse,
5914                fidl::encoding::DefaultFuchsiaResourceDialect,
5915                0x357f6213b3a54527,
5916            >(_buf?)?;
5917            Ok(_response.settings)
5918        }
5919        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, KeyboardSettings>(
5920            (),
5921            0x357f6213b3a54527,
5922            fidl::encoding::DynamicFlags::empty(),
5923            _decode,
5924        )
5925    }
5926}
5927
5928pub struct KeyboardWatchEventStream {
5929    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
5930}
5931
5932impl std::marker::Unpin for KeyboardWatchEventStream {}
5933
5934impl futures::stream::FusedStream for KeyboardWatchEventStream {
5935    fn is_terminated(&self) -> bool {
5936        self.event_receiver.is_terminated()
5937    }
5938}
5939
5940impl futures::Stream for KeyboardWatchEventStream {
5941    type Item = Result<KeyboardWatchEvent, fidl::Error>;
5942
5943    fn poll_next(
5944        mut self: std::pin::Pin<&mut Self>,
5945        cx: &mut std::task::Context<'_>,
5946    ) -> std::task::Poll<Option<Self::Item>> {
5947        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
5948            &mut self.event_receiver,
5949            cx
5950        )?) {
5951            Some(buf) => std::task::Poll::Ready(Some(KeyboardWatchEvent::decode(buf))),
5952            None => std::task::Poll::Ready(None),
5953        }
5954    }
5955}
5956
5957#[derive(Debug)]
5958pub enum KeyboardWatchEvent {}
5959
5960impl KeyboardWatchEvent {
5961    /// Decodes a message buffer as a [`KeyboardWatchEvent`].
5962    fn decode(
5963        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
5964    ) -> Result<KeyboardWatchEvent, fidl::Error> {
5965        let (bytes, _handles) = buf.split_mut();
5966        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5967        debug_assert_eq!(tx_header.tx_id, 0);
5968        match tx_header.ordinal {
5969            _ => Err(fidl::Error::UnknownOrdinal {
5970                ordinal: tx_header.ordinal,
5971                protocol_name: <KeyboardWatchMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5972            }),
5973        }
5974    }
5975}
5976
5977/// A Stream of incoming requests for fuchsia.settings/KeyboardWatch.
5978pub struct KeyboardWatchRequestStream {
5979    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5980    is_terminated: bool,
5981}
5982
5983impl std::marker::Unpin for KeyboardWatchRequestStream {}
5984
5985impl futures::stream::FusedStream for KeyboardWatchRequestStream {
5986    fn is_terminated(&self) -> bool {
5987        self.is_terminated
5988    }
5989}
5990
5991impl fidl::endpoints::RequestStream for KeyboardWatchRequestStream {
5992    type Protocol = KeyboardWatchMarker;
5993    type ControlHandle = KeyboardWatchControlHandle;
5994
5995    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
5996        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
5997    }
5998
5999    fn control_handle(&self) -> Self::ControlHandle {
6000        KeyboardWatchControlHandle { inner: self.inner.clone() }
6001    }
6002
6003    fn into_inner(
6004        self,
6005    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
6006    {
6007        (self.inner, self.is_terminated)
6008    }
6009
6010    fn from_inner(
6011        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
6012        is_terminated: bool,
6013    ) -> Self {
6014        Self { inner, is_terminated }
6015    }
6016}
6017
6018impl futures::Stream for KeyboardWatchRequestStream {
6019    type Item = Result<KeyboardWatchRequest, fidl::Error>;
6020
6021    fn poll_next(
6022        mut self: std::pin::Pin<&mut Self>,
6023        cx: &mut std::task::Context<'_>,
6024    ) -> std::task::Poll<Option<Self::Item>> {
6025        let this = &mut *self;
6026        if this.inner.check_shutdown(cx) {
6027            this.is_terminated = true;
6028            return std::task::Poll::Ready(None);
6029        }
6030        if this.is_terminated {
6031            panic!("polled KeyboardWatchRequestStream after completion");
6032        }
6033        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
6034            |bytes, handles| {
6035                match this.inner.channel().read_etc(cx, bytes, handles) {
6036                    std::task::Poll::Ready(Ok(())) => {}
6037                    std::task::Poll::Pending => return std::task::Poll::Pending,
6038                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
6039                        this.is_terminated = true;
6040                        return std::task::Poll::Ready(None);
6041                    }
6042                    std::task::Poll::Ready(Err(e)) => {
6043                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
6044                            e.into(),
6045                        ))));
6046                    }
6047                }
6048
6049                // A message has been received from the channel
6050                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
6051
6052                std::task::Poll::Ready(Some(match header.ordinal {
6053                    0x357f6213b3a54527 => {
6054                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
6055                        let mut req = fidl::new_empty!(
6056                            fidl::encoding::EmptyPayload,
6057                            fidl::encoding::DefaultFuchsiaResourceDialect
6058                        );
6059                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
6060                        let control_handle =
6061                            KeyboardWatchControlHandle { inner: this.inner.clone() };
6062                        Ok(KeyboardWatchRequest::Watch {
6063                            responder: KeyboardWatchWatchResponder {
6064                                control_handle: std::mem::ManuallyDrop::new(control_handle),
6065                                tx_id: header.tx_id,
6066                            },
6067                        })
6068                    }
6069                    _ => Err(fidl::Error::UnknownOrdinal {
6070                        ordinal: header.ordinal,
6071                        protocol_name:
6072                            <KeyboardWatchMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
6073                    }),
6074                }))
6075            },
6076        )
6077    }
6078}
6079
6080/// The read-only API for monitoring the changes to the keyboard settings.
6081#[derive(Debug)]
6082pub enum KeyboardWatchRequest {
6083    /// The Watch protocol is the same as in the other `fuchsia.settings.*` protocols.
6084    ///
6085    /// Returns immediately on first call; on subsequent calls it blocks until the settings
6086    /// change, and then returns following the "hanging get" pattern.
6087    Watch { responder: KeyboardWatchWatchResponder },
6088}
6089
6090impl KeyboardWatchRequest {
6091    #[allow(irrefutable_let_patterns)]
6092    pub fn into_watch(self) -> Option<(KeyboardWatchWatchResponder)> {
6093        if let KeyboardWatchRequest::Watch { responder } = self { Some((responder)) } else { None }
6094    }
6095
6096    /// Name of the method defined in FIDL
6097    pub fn method_name(&self) -> &'static str {
6098        match *self {
6099            KeyboardWatchRequest::Watch { .. } => "watch",
6100        }
6101    }
6102}
6103
6104#[derive(Debug, Clone)]
6105pub struct KeyboardWatchControlHandle {
6106    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
6107}
6108
6109impl fidl::endpoints::ControlHandle for KeyboardWatchControlHandle {
6110    fn shutdown(&self) {
6111        self.inner.shutdown()
6112    }
6113    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
6114        self.inner.shutdown_with_epitaph(status)
6115    }
6116
6117    fn is_closed(&self) -> bool {
6118        self.inner.channel().is_closed()
6119    }
6120    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
6121        self.inner.channel().on_closed()
6122    }
6123
6124    #[cfg(target_os = "fuchsia")]
6125    fn signal_peer(
6126        &self,
6127        clear_mask: zx::Signals,
6128        set_mask: zx::Signals,
6129    ) -> Result<(), zx_status::Status> {
6130        use fidl::Peered;
6131        self.inner.channel().signal_peer(clear_mask, set_mask)
6132    }
6133}
6134
6135impl KeyboardWatchControlHandle {}
6136
6137#[must_use = "FIDL methods require a response to be sent"]
6138#[derive(Debug)]
6139pub struct KeyboardWatchWatchResponder {
6140    control_handle: std::mem::ManuallyDrop<KeyboardWatchControlHandle>,
6141    tx_id: u32,
6142}
6143
6144/// Set the the channel to be shutdown (see [`KeyboardWatchControlHandle::shutdown`])
6145/// if the responder is dropped without sending a response, so that the client
6146/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
6147impl std::ops::Drop for KeyboardWatchWatchResponder {
6148    fn drop(&mut self) {
6149        self.control_handle.shutdown();
6150        // Safety: drops once, never accessed again
6151        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6152    }
6153}
6154
6155impl fidl::endpoints::Responder for KeyboardWatchWatchResponder {
6156    type ControlHandle = KeyboardWatchControlHandle;
6157
6158    fn control_handle(&self) -> &KeyboardWatchControlHandle {
6159        &self.control_handle
6160    }
6161
6162    fn drop_without_shutdown(mut self) {
6163        // Safety: drops once, never accessed again due to mem::forget
6164        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6165        // Prevent Drop from running (which would shut down the channel)
6166        std::mem::forget(self);
6167    }
6168}
6169
6170impl KeyboardWatchWatchResponder {
6171    /// Sends a response to the FIDL transaction.
6172    ///
6173    /// Sets the channel to shutdown if an error occurs.
6174    pub fn send(self, mut settings: &KeyboardSettings) -> Result<(), fidl::Error> {
6175        let _result = self.send_raw(settings);
6176        if _result.is_err() {
6177            self.control_handle.shutdown();
6178        }
6179        self.drop_without_shutdown();
6180        _result
6181    }
6182
6183    /// Similar to "send" but does not shutdown the channel if an error occurs.
6184    pub fn send_no_shutdown_on_err(
6185        self,
6186        mut settings: &KeyboardSettings,
6187    ) -> Result<(), fidl::Error> {
6188        let _result = self.send_raw(settings);
6189        self.drop_without_shutdown();
6190        _result
6191    }
6192
6193    fn send_raw(&self, mut settings: &KeyboardSettings) -> Result<(), fidl::Error> {
6194        self.control_handle.inner.send::<KeyboardWatchWatchResponse>(
6195            (settings,),
6196            self.tx_id,
6197            0x357f6213b3a54527,
6198            fidl::encoding::DynamicFlags::empty(),
6199        )
6200    }
6201}
6202
6203#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
6204pub struct LightMarker;
6205
6206impl fidl::endpoints::ProtocolMarker for LightMarker {
6207    type Proxy = LightProxy;
6208    type RequestStream = LightRequestStream;
6209    #[cfg(target_os = "fuchsia")]
6210    type SynchronousProxy = LightSynchronousProxy;
6211
6212    const DEBUG_NAME: &'static str = "fuchsia.settings.Light";
6213}
6214impl fidl::endpoints::DiscoverableProtocolMarker for LightMarker {}
6215pub type LightSetLightGroupValuesResult = Result<(), LightError>;
6216
6217pub trait LightProxyInterface: Send + Sync {
6218    type WatchLightGroupsResponseFut: std::future::Future<Output = Result<Vec<LightGroup>, fidl::Error>>
6219        + Send;
6220    fn r#watch_light_groups(&self) -> Self::WatchLightGroupsResponseFut;
6221    type WatchLightGroupResponseFut: std::future::Future<Output = Result<LightGroup, fidl::Error>>
6222        + Send;
6223    fn r#watch_light_group(&self, name: &str) -> Self::WatchLightGroupResponseFut;
6224    type SetLightGroupValuesResponseFut: std::future::Future<Output = Result<LightSetLightGroupValuesResult, fidl::Error>>
6225        + Send;
6226    fn r#set_light_group_values(
6227        &self,
6228        name: &str,
6229        state: &[LightState],
6230    ) -> Self::SetLightGroupValuesResponseFut;
6231}
6232#[derive(Debug)]
6233#[cfg(target_os = "fuchsia")]
6234pub struct LightSynchronousProxy {
6235    client: fidl::client::sync::Client,
6236}
6237
6238#[cfg(target_os = "fuchsia")]
6239impl fidl::endpoints::SynchronousProxy for LightSynchronousProxy {
6240    type Proxy = LightProxy;
6241    type Protocol = LightMarker;
6242
6243    fn from_channel(inner: fidl::Channel) -> Self {
6244        Self::new(inner)
6245    }
6246
6247    fn into_channel(self) -> fidl::Channel {
6248        self.client.into_channel()
6249    }
6250
6251    fn as_channel(&self) -> &fidl::Channel {
6252        self.client.as_channel()
6253    }
6254}
6255
6256#[cfg(target_os = "fuchsia")]
6257impl LightSynchronousProxy {
6258    pub fn new(channel: fidl::Channel) -> Self {
6259        let protocol_name = <LightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
6260        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
6261    }
6262
6263    pub fn into_channel(self) -> fidl::Channel {
6264        self.client.into_channel()
6265    }
6266
6267    /// Waits until an event arrives and returns it. It is safe for other
6268    /// threads to make concurrent requests while waiting for an event.
6269    pub fn wait_for_event(
6270        &self,
6271        deadline: zx::MonotonicInstant,
6272    ) -> Result<LightEvent, fidl::Error> {
6273        LightEvent::decode(self.client.wait_for_event(deadline)?)
6274    }
6275
6276    /// Fetches information on the controllable light groups on the device.
6277    /// Returns immediately on first call; subsequent calls return when the
6278    /// value changes.
6279    ///
6280    /// If this call fails, it is considered a fatal error and the channel
6281    /// will be closed.
6282    pub fn r#watch_light_groups(
6283        &self,
6284        ___deadline: zx::MonotonicInstant,
6285    ) -> Result<Vec<LightGroup>, fidl::Error> {
6286        let _response =
6287            self.client.send_query::<fidl::encoding::EmptyPayload, LightWatchLightGroupsResponse>(
6288                (),
6289                0x3f506de229db5930,
6290                fidl::encoding::DynamicFlags::empty(),
6291                ___deadline,
6292            )?;
6293        Ok(_response.groups)
6294    }
6295
6296    /// Fetches information on an individual light group on the device with the
6297    /// given name. Returns immediately on first call; subsequent calls return
6298    /// when the value changes.
6299    ///
6300    /// If this call fails, it is considered a fatal error and the channel
6301    /// will be closed. If the failure is due to an invalid light group name,
6302    /// the channel will be closed with a NOT_FOUND epitaph.
6303    pub fn r#watch_light_group(
6304        &self,
6305        mut name: &str,
6306        ___deadline: zx::MonotonicInstant,
6307    ) -> Result<LightGroup, fidl::Error> {
6308        let _response =
6309            self.client.send_query::<LightWatchLightGroupRequest, LightWatchLightGroupResponse>(
6310                (name,),
6311                0x3ef0331c388d56a3,
6312                fidl::encoding::DynamicFlags::empty(),
6313                ___deadline,
6314            )?;
6315        Ok(_response.group)
6316    }
6317
6318    /// Sets the values for the lights in the group with the given name.
6319    ///
6320    /// If the provided value does not match the light group's type, this
6321    /// call will fail.
6322    ///
6323    /// The requested changes may not take immediate effect if
6324    /// the light is forced to a certain state by the device's hardware. This
6325    /// call will still succeed, but the light's value may not change.
6326    pub fn r#set_light_group_values(
6327        &self,
6328        mut name: &str,
6329        mut state: &[LightState],
6330        ___deadline: zx::MonotonicInstant,
6331    ) -> Result<LightSetLightGroupValuesResult, fidl::Error> {
6332        let _response = self.client.send_query::<
6333            LightSetLightGroupValuesRequest,
6334            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LightError>,
6335        >(
6336            (name, state,),
6337            0x15d9b62431fdf8d5,
6338            fidl::encoding::DynamicFlags::empty(),
6339            ___deadline,
6340        )?;
6341        Ok(_response.map(|x| x))
6342    }
6343}
6344
6345#[cfg(target_os = "fuchsia")]
6346impl From<LightSynchronousProxy> for zx::Handle {
6347    fn from(value: LightSynchronousProxy) -> Self {
6348        value.into_channel().into()
6349    }
6350}
6351
6352#[cfg(target_os = "fuchsia")]
6353impl From<fidl::Channel> for LightSynchronousProxy {
6354    fn from(value: fidl::Channel) -> Self {
6355        Self::new(value)
6356    }
6357}
6358
6359#[cfg(target_os = "fuchsia")]
6360impl fidl::endpoints::FromClient for LightSynchronousProxy {
6361    type Protocol = LightMarker;
6362
6363    fn from_client(value: fidl::endpoints::ClientEnd<LightMarker>) -> Self {
6364        Self::new(value.into_channel())
6365    }
6366}
6367
6368#[derive(Debug, Clone)]
6369pub struct LightProxy {
6370    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
6371}
6372
6373impl fidl::endpoints::Proxy for LightProxy {
6374    type Protocol = LightMarker;
6375
6376    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
6377        Self::new(inner)
6378    }
6379
6380    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
6381        self.client.into_channel().map_err(|client| Self { client })
6382    }
6383
6384    fn as_channel(&self) -> &::fidl::AsyncChannel {
6385        self.client.as_channel()
6386    }
6387}
6388
6389impl LightProxy {
6390    /// Create a new Proxy for fuchsia.settings/Light.
6391    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
6392        let protocol_name = <LightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
6393        Self { client: fidl::client::Client::new(channel, protocol_name) }
6394    }
6395
6396    /// Get a Stream of events from the remote end of the protocol.
6397    ///
6398    /// # Panics
6399    ///
6400    /// Panics if the event stream was already taken.
6401    pub fn take_event_stream(&self) -> LightEventStream {
6402        LightEventStream { event_receiver: self.client.take_event_receiver() }
6403    }
6404
6405    /// Fetches information on the controllable light groups on the device.
6406    /// Returns immediately on first call; subsequent calls return when the
6407    /// value changes.
6408    ///
6409    /// If this call fails, it is considered a fatal error and the channel
6410    /// will be closed.
6411    pub fn r#watch_light_groups(
6412        &self,
6413    ) -> fidl::client::QueryResponseFut<
6414        Vec<LightGroup>,
6415        fidl::encoding::DefaultFuchsiaResourceDialect,
6416    > {
6417        LightProxyInterface::r#watch_light_groups(self)
6418    }
6419
6420    /// Fetches information on an individual light group on the device with the
6421    /// given name. Returns immediately on first call; subsequent calls return
6422    /// when the value changes.
6423    ///
6424    /// If this call fails, it is considered a fatal error and the channel
6425    /// will be closed. If the failure is due to an invalid light group name,
6426    /// the channel will be closed with a NOT_FOUND epitaph.
6427    pub fn r#watch_light_group(
6428        &self,
6429        mut name: &str,
6430    ) -> fidl::client::QueryResponseFut<LightGroup, fidl::encoding::DefaultFuchsiaResourceDialect>
6431    {
6432        LightProxyInterface::r#watch_light_group(self, name)
6433    }
6434
6435    /// Sets the values for the lights in the group with the given name.
6436    ///
6437    /// If the provided value does not match the light group's type, this
6438    /// call will fail.
6439    ///
6440    /// The requested changes may not take immediate effect if
6441    /// the light is forced to a certain state by the device's hardware. This
6442    /// call will still succeed, but the light's value may not change.
6443    pub fn r#set_light_group_values(
6444        &self,
6445        mut name: &str,
6446        mut state: &[LightState],
6447    ) -> fidl::client::QueryResponseFut<
6448        LightSetLightGroupValuesResult,
6449        fidl::encoding::DefaultFuchsiaResourceDialect,
6450    > {
6451        LightProxyInterface::r#set_light_group_values(self, name, state)
6452    }
6453}
6454
6455impl LightProxyInterface for LightProxy {
6456    type WatchLightGroupsResponseFut = fidl::client::QueryResponseFut<
6457        Vec<LightGroup>,
6458        fidl::encoding::DefaultFuchsiaResourceDialect,
6459    >;
6460    fn r#watch_light_groups(&self) -> Self::WatchLightGroupsResponseFut {
6461        fn _decode(
6462            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
6463        ) -> Result<Vec<LightGroup>, fidl::Error> {
6464            let _response = fidl::client::decode_transaction_body::<
6465                LightWatchLightGroupsResponse,
6466                fidl::encoding::DefaultFuchsiaResourceDialect,
6467                0x3f506de229db5930,
6468            >(_buf?)?;
6469            Ok(_response.groups)
6470        }
6471        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, Vec<LightGroup>>(
6472            (),
6473            0x3f506de229db5930,
6474            fidl::encoding::DynamicFlags::empty(),
6475            _decode,
6476        )
6477    }
6478
6479    type WatchLightGroupResponseFut =
6480        fidl::client::QueryResponseFut<LightGroup, fidl::encoding::DefaultFuchsiaResourceDialect>;
6481    fn r#watch_light_group(&self, mut name: &str) -> Self::WatchLightGroupResponseFut {
6482        fn _decode(
6483            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
6484        ) -> Result<LightGroup, fidl::Error> {
6485            let _response = fidl::client::decode_transaction_body::<
6486                LightWatchLightGroupResponse,
6487                fidl::encoding::DefaultFuchsiaResourceDialect,
6488                0x3ef0331c388d56a3,
6489            >(_buf?)?;
6490            Ok(_response.group)
6491        }
6492        self.client.send_query_and_decode::<LightWatchLightGroupRequest, LightGroup>(
6493            (name,),
6494            0x3ef0331c388d56a3,
6495            fidl::encoding::DynamicFlags::empty(),
6496            _decode,
6497        )
6498    }
6499
6500    type SetLightGroupValuesResponseFut = fidl::client::QueryResponseFut<
6501        LightSetLightGroupValuesResult,
6502        fidl::encoding::DefaultFuchsiaResourceDialect,
6503    >;
6504    fn r#set_light_group_values(
6505        &self,
6506        mut name: &str,
6507        mut state: &[LightState],
6508    ) -> Self::SetLightGroupValuesResponseFut {
6509        fn _decode(
6510            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
6511        ) -> Result<LightSetLightGroupValuesResult, fidl::Error> {
6512            let _response = fidl::client::decode_transaction_body::<
6513                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LightError>,
6514                fidl::encoding::DefaultFuchsiaResourceDialect,
6515                0x15d9b62431fdf8d5,
6516            >(_buf?)?;
6517            Ok(_response.map(|x| x))
6518        }
6519        self.client.send_query_and_decode::<
6520            LightSetLightGroupValuesRequest,
6521            LightSetLightGroupValuesResult,
6522        >(
6523            (name, state,),
6524            0x15d9b62431fdf8d5,
6525            fidl::encoding::DynamicFlags::empty(),
6526            _decode,
6527        )
6528    }
6529}
6530
6531pub struct LightEventStream {
6532    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
6533}
6534
6535impl std::marker::Unpin for LightEventStream {}
6536
6537impl futures::stream::FusedStream for LightEventStream {
6538    fn is_terminated(&self) -> bool {
6539        self.event_receiver.is_terminated()
6540    }
6541}
6542
6543impl futures::Stream for LightEventStream {
6544    type Item = Result<LightEvent, fidl::Error>;
6545
6546    fn poll_next(
6547        mut self: std::pin::Pin<&mut Self>,
6548        cx: &mut std::task::Context<'_>,
6549    ) -> std::task::Poll<Option<Self::Item>> {
6550        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
6551            &mut self.event_receiver,
6552            cx
6553        )?) {
6554            Some(buf) => std::task::Poll::Ready(Some(LightEvent::decode(buf))),
6555            None => std::task::Poll::Ready(None),
6556        }
6557    }
6558}
6559
6560#[derive(Debug)]
6561pub enum LightEvent {}
6562
6563impl LightEvent {
6564    /// Decodes a message buffer as a [`LightEvent`].
6565    fn decode(
6566        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
6567    ) -> Result<LightEvent, fidl::Error> {
6568        let (bytes, _handles) = buf.split_mut();
6569        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
6570        debug_assert_eq!(tx_header.tx_id, 0);
6571        match tx_header.ordinal {
6572            _ => Err(fidl::Error::UnknownOrdinal {
6573                ordinal: tx_header.ordinal,
6574                protocol_name: <LightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
6575            }),
6576        }
6577    }
6578}
6579
6580/// A Stream of incoming requests for fuchsia.settings/Light.
6581pub struct LightRequestStream {
6582    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
6583    is_terminated: bool,
6584}
6585
6586impl std::marker::Unpin for LightRequestStream {}
6587
6588impl futures::stream::FusedStream for LightRequestStream {
6589    fn is_terminated(&self) -> bool {
6590        self.is_terminated
6591    }
6592}
6593
6594impl fidl::endpoints::RequestStream for LightRequestStream {
6595    type Protocol = LightMarker;
6596    type ControlHandle = LightControlHandle;
6597
6598    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
6599        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
6600    }
6601
6602    fn control_handle(&self) -> Self::ControlHandle {
6603        LightControlHandle { inner: self.inner.clone() }
6604    }
6605
6606    fn into_inner(
6607        self,
6608    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
6609    {
6610        (self.inner, self.is_terminated)
6611    }
6612
6613    fn from_inner(
6614        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
6615        is_terminated: bool,
6616    ) -> Self {
6617        Self { inner, is_terminated }
6618    }
6619}
6620
6621impl futures::Stream for LightRequestStream {
6622    type Item = Result<LightRequest, fidl::Error>;
6623
6624    fn poll_next(
6625        mut self: std::pin::Pin<&mut Self>,
6626        cx: &mut std::task::Context<'_>,
6627    ) -> std::task::Poll<Option<Self::Item>> {
6628        let this = &mut *self;
6629        if this.inner.check_shutdown(cx) {
6630            this.is_terminated = true;
6631            return std::task::Poll::Ready(None);
6632        }
6633        if this.is_terminated {
6634            panic!("polled LightRequestStream after completion");
6635        }
6636        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
6637            |bytes, handles| {
6638                match this.inner.channel().read_etc(cx, bytes, handles) {
6639                    std::task::Poll::Ready(Ok(())) => {}
6640                    std::task::Poll::Pending => return std::task::Poll::Pending,
6641                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
6642                        this.is_terminated = true;
6643                        return std::task::Poll::Ready(None);
6644                    }
6645                    std::task::Poll::Ready(Err(e)) => {
6646                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
6647                            e.into(),
6648                        ))));
6649                    }
6650                }
6651
6652                // A message has been received from the channel
6653                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
6654
6655                std::task::Poll::Ready(Some(match header.ordinal {
6656                    0x3f506de229db5930 => {
6657                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
6658                        let mut req = fidl::new_empty!(
6659                            fidl::encoding::EmptyPayload,
6660                            fidl::encoding::DefaultFuchsiaResourceDialect
6661                        );
6662                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
6663                        let control_handle = LightControlHandle { inner: this.inner.clone() };
6664                        Ok(LightRequest::WatchLightGroups {
6665                            responder: LightWatchLightGroupsResponder {
6666                                control_handle: std::mem::ManuallyDrop::new(control_handle),
6667                                tx_id: header.tx_id,
6668                            },
6669                        })
6670                    }
6671                    0x3ef0331c388d56a3 => {
6672                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
6673                        let mut req = fidl::new_empty!(
6674                            LightWatchLightGroupRequest,
6675                            fidl::encoding::DefaultFuchsiaResourceDialect
6676                        );
6677                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LightWatchLightGroupRequest>(&header, _body_bytes, handles, &mut req)?;
6678                        let control_handle = LightControlHandle { inner: this.inner.clone() };
6679                        Ok(LightRequest::WatchLightGroup {
6680                            name: req.name,
6681
6682                            responder: LightWatchLightGroupResponder {
6683                                control_handle: std::mem::ManuallyDrop::new(control_handle),
6684                                tx_id: header.tx_id,
6685                            },
6686                        })
6687                    }
6688                    0x15d9b62431fdf8d5 => {
6689                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
6690                        let mut req = fidl::new_empty!(
6691                            LightSetLightGroupValuesRequest,
6692                            fidl::encoding::DefaultFuchsiaResourceDialect
6693                        );
6694                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LightSetLightGroupValuesRequest>(&header, _body_bytes, handles, &mut req)?;
6695                        let control_handle = LightControlHandle { inner: this.inner.clone() };
6696                        Ok(LightRequest::SetLightGroupValues {
6697                            name: req.name,
6698                            state: req.state,
6699
6700                            responder: LightSetLightGroupValuesResponder {
6701                                control_handle: std::mem::ManuallyDrop::new(control_handle),
6702                                tx_id: header.tx_id,
6703                            },
6704                        })
6705                    }
6706                    _ => Err(fidl::Error::UnknownOrdinal {
6707                        ordinal: header.ordinal,
6708                        protocol_name: <LightMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
6709                    }),
6710                }))
6711            },
6712        )
6713    }
6714}
6715
6716#[derive(Debug)]
6717pub enum LightRequest {
6718    /// Fetches information on the controllable light groups on the device.
6719    /// Returns immediately on first call; subsequent calls return when the
6720    /// value changes.
6721    ///
6722    /// If this call fails, it is considered a fatal error and the channel
6723    /// will be closed.
6724    WatchLightGroups { responder: LightWatchLightGroupsResponder },
6725    /// Fetches information on an individual light group on the device with the
6726    /// given name. Returns immediately on first call; subsequent calls return
6727    /// when the value changes.
6728    ///
6729    /// If this call fails, it is considered a fatal error and the channel
6730    /// will be closed. If the failure is due to an invalid light group name,
6731    /// the channel will be closed with a NOT_FOUND epitaph.
6732    WatchLightGroup { name: String, responder: LightWatchLightGroupResponder },
6733    /// Sets the values for the lights in the group with the given name.
6734    ///
6735    /// If the provided value does not match the light group's type, this
6736    /// call will fail.
6737    ///
6738    /// The requested changes may not take immediate effect if
6739    /// the light is forced to a certain state by the device's hardware. This
6740    /// call will still succeed, but the light's value may not change.
6741    SetLightGroupValues {
6742        name: String,
6743        state: Vec<LightState>,
6744        responder: LightSetLightGroupValuesResponder,
6745    },
6746}
6747
6748impl LightRequest {
6749    #[allow(irrefutable_let_patterns)]
6750    pub fn into_watch_light_groups(self) -> Option<(LightWatchLightGroupsResponder)> {
6751        if let LightRequest::WatchLightGroups { responder } = self {
6752            Some((responder))
6753        } else {
6754            None
6755        }
6756    }
6757
6758    #[allow(irrefutable_let_patterns)]
6759    pub fn into_watch_light_group(self) -> Option<(String, LightWatchLightGroupResponder)> {
6760        if let LightRequest::WatchLightGroup { name, responder } = self {
6761            Some((name, responder))
6762        } else {
6763            None
6764        }
6765    }
6766
6767    #[allow(irrefutable_let_patterns)]
6768    pub fn into_set_light_group_values(
6769        self,
6770    ) -> Option<(String, Vec<LightState>, LightSetLightGroupValuesResponder)> {
6771        if let LightRequest::SetLightGroupValues { name, state, responder } = self {
6772            Some((name, state, responder))
6773        } else {
6774            None
6775        }
6776    }
6777
6778    /// Name of the method defined in FIDL
6779    pub fn method_name(&self) -> &'static str {
6780        match *self {
6781            LightRequest::WatchLightGroups { .. } => "watch_light_groups",
6782            LightRequest::WatchLightGroup { .. } => "watch_light_group",
6783            LightRequest::SetLightGroupValues { .. } => "set_light_group_values",
6784        }
6785    }
6786}
6787
6788#[derive(Debug, Clone)]
6789pub struct LightControlHandle {
6790    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
6791}
6792
6793impl fidl::endpoints::ControlHandle for LightControlHandle {
6794    fn shutdown(&self) {
6795        self.inner.shutdown()
6796    }
6797    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
6798        self.inner.shutdown_with_epitaph(status)
6799    }
6800
6801    fn is_closed(&self) -> bool {
6802        self.inner.channel().is_closed()
6803    }
6804    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
6805        self.inner.channel().on_closed()
6806    }
6807
6808    #[cfg(target_os = "fuchsia")]
6809    fn signal_peer(
6810        &self,
6811        clear_mask: zx::Signals,
6812        set_mask: zx::Signals,
6813    ) -> Result<(), zx_status::Status> {
6814        use fidl::Peered;
6815        self.inner.channel().signal_peer(clear_mask, set_mask)
6816    }
6817}
6818
6819impl LightControlHandle {}
6820
6821#[must_use = "FIDL methods require a response to be sent"]
6822#[derive(Debug)]
6823pub struct LightWatchLightGroupsResponder {
6824    control_handle: std::mem::ManuallyDrop<LightControlHandle>,
6825    tx_id: u32,
6826}
6827
6828/// Set the the channel to be shutdown (see [`LightControlHandle::shutdown`])
6829/// if the responder is dropped without sending a response, so that the client
6830/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
6831impl std::ops::Drop for LightWatchLightGroupsResponder {
6832    fn drop(&mut self) {
6833        self.control_handle.shutdown();
6834        // Safety: drops once, never accessed again
6835        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6836    }
6837}
6838
6839impl fidl::endpoints::Responder for LightWatchLightGroupsResponder {
6840    type ControlHandle = LightControlHandle;
6841
6842    fn control_handle(&self) -> &LightControlHandle {
6843        &self.control_handle
6844    }
6845
6846    fn drop_without_shutdown(mut self) {
6847        // Safety: drops once, never accessed again due to mem::forget
6848        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6849        // Prevent Drop from running (which would shut down the channel)
6850        std::mem::forget(self);
6851    }
6852}
6853
6854impl LightWatchLightGroupsResponder {
6855    /// Sends a response to the FIDL transaction.
6856    ///
6857    /// Sets the channel to shutdown if an error occurs.
6858    pub fn send(self, mut groups: &[LightGroup]) -> Result<(), fidl::Error> {
6859        let _result = self.send_raw(groups);
6860        if _result.is_err() {
6861            self.control_handle.shutdown();
6862        }
6863        self.drop_without_shutdown();
6864        _result
6865    }
6866
6867    /// Similar to "send" but does not shutdown the channel if an error occurs.
6868    pub fn send_no_shutdown_on_err(self, mut groups: &[LightGroup]) -> Result<(), fidl::Error> {
6869        let _result = self.send_raw(groups);
6870        self.drop_without_shutdown();
6871        _result
6872    }
6873
6874    fn send_raw(&self, mut groups: &[LightGroup]) -> Result<(), fidl::Error> {
6875        self.control_handle.inner.send::<LightWatchLightGroupsResponse>(
6876            (groups,),
6877            self.tx_id,
6878            0x3f506de229db5930,
6879            fidl::encoding::DynamicFlags::empty(),
6880        )
6881    }
6882}
6883
6884#[must_use = "FIDL methods require a response to be sent"]
6885#[derive(Debug)]
6886pub struct LightWatchLightGroupResponder {
6887    control_handle: std::mem::ManuallyDrop<LightControlHandle>,
6888    tx_id: u32,
6889}
6890
6891/// Set the the channel to be shutdown (see [`LightControlHandle::shutdown`])
6892/// if the responder is dropped without sending a response, so that the client
6893/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
6894impl std::ops::Drop for LightWatchLightGroupResponder {
6895    fn drop(&mut self) {
6896        self.control_handle.shutdown();
6897        // Safety: drops once, never accessed again
6898        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6899    }
6900}
6901
6902impl fidl::endpoints::Responder for LightWatchLightGroupResponder {
6903    type ControlHandle = LightControlHandle;
6904
6905    fn control_handle(&self) -> &LightControlHandle {
6906        &self.control_handle
6907    }
6908
6909    fn drop_without_shutdown(mut self) {
6910        // Safety: drops once, never accessed again due to mem::forget
6911        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6912        // Prevent Drop from running (which would shut down the channel)
6913        std::mem::forget(self);
6914    }
6915}
6916
6917impl LightWatchLightGroupResponder {
6918    /// Sends a response to the FIDL transaction.
6919    ///
6920    /// Sets the channel to shutdown if an error occurs.
6921    pub fn send(self, mut group: &LightGroup) -> Result<(), fidl::Error> {
6922        let _result = self.send_raw(group);
6923        if _result.is_err() {
6924            self.control_handle.shutdown();
6925        }
6926        self.drop_without_shutdown();
6927        _result
6928    }
6929
6930    /// Similar to "send" but does not shutdown the channel if an error occurs.
6931    pub fn send_no_shutdown_on_err(self, mut group: &LightGroup) -> Result<(), fidl::Error> {
6932        let _result = self.send_raw(group);
6933        self.drop_without_shutdown();
6934        _result
6935    }
6936
6937    fn send_raw(&self, mut group: &LightGroup) -> Result<(), fidl::Error> {
6938        self.control_handle.inner.send::<LightWatchLightGroupResponse>(
6939            (group,),
6940            self.tx_id,
6941            0x3ef0331c388d56a3,
6942            fidl::encoding::DynamicFlags::empty(),
6943        )
6944    }
6945}
6946
6947#[must_use = "FIDL methods require a response to be sent"]
6948#[derive(Debug)]
6949pub struct LightSetLightGroupValuesResponder {
6950    control_handle: std::mem::ManuallyDrop<LightControlHandle>,
6951    tx_id: u32,
6952}
6953
6954/// Set the the channel to be shutdown (see [`LightControlHandle::shutdown`])
6955/// if the responder is dropped without sending a response, so that the client
6956/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
6957impl std::ops::Drop for LightSetLightGroupValuesResponder {
6958    fn drop(&mut self) {
6959        self.control_handle.shutdown();
6960        // Safety: drops once, never accessed again
6961        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6962    }
6963}
6964
6965impl fidl::endpoints::Responder for LightSetLightGroupValuesResponder {
6966    type ControlHandle = LightControlHandle;
6967
6968    fn control_handle(&self) -> &LightControlHandle {
6969        &self.control_handle
6970    }
6971
6972    fn drop_without_shutdown(mut self) {
6973        // Safety: drops once, never accessed again due to mem::forget
6974        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
6975        // Prevent Drop from running (which would shut down the channel)
6976        std::mem::forget(self);
6977    }
6978}
6979
6980impl LightSetLightGroupValuesResponder {
6981    /// Sends a response to the FIDL transaction.
6982    ///
6983    /// Sets the channel to shutdown if an error occurs.
6984    pub fn send(self, mut result: Result<(), LightError>) -> Result<(), fidl::Error> {
6985        let _result = self.send_raw(result);
6986        if _result.is_err() {
6987            self.control_handle.shutdown();
6988        }
6989        self.drop_without_shutdown();
6990        _result
6991    }
6992
6993    /// Similar to "send" but does not shutdown the channel if an error occurs.
6994    pub fn send_no_shutdown_on_err(
6995        self,
6996        mut result: Result<(), LightError>,
6997    ) -> Result<(), fidl::Error> {
6998        let _result = self.send_raw(result);
6999        self.drop_without_shutdown();
7000        _result
7001    }
7002
7003    fn send_raw(&self, mut result: Result<(), LightError>) -> Result<(), fidl::Error> {
7004        self.control_handle
7005            .inner
7006            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LightError>>(
7007                result,
7008                self.tx_id,
7009                0x15d9b62431fdf8d5,
7010                fidl::encoding::DynamicFlags::empty(),
7011            )
7012    }
7013}
7014
7015#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
7016pub struct NightModeMarker;
7017
7018impl fidl::endpoints::ProtocolMarker for NightModeMarker {
7019    type Proxy = NightModeProxy;
7020    type RequestStream = NightModeRequestStream;
7021    #[cfg(target_os = "fuchsia")]
7022    type SynchronousProxy = NightModeSynchronousProxy;
7023
7024    const DEBUG_NAME: &'static str = "fuchsia.settings.NightMode";
7025}
7026impl fidl::endpoints::DiscoverableProtocolMarker for NightModeMarker {}
7027pub type NightModeSetResult = Result<(), Error>;
7028
7029pub trait NightModeProxyInterface: Send + Sync {
7030    type WatchResponseFut: std::future::Future<Output = Result<NightModeSettings, fidl::Error>>
7031        + Send;
7032    fn r#watch(&self) -> Self::WatchResponseFut;
7033    type SetResponseFut: std::future::Future<Output = Result<NightModeSetResult, fidl::Error>>
7034        + Send;
7035    fn r#set(&self, settings: &NightModeSettings) -> Self::SetResponseFut;
7036}
7037#[derive(Debug)]
7038#[cfg(target_os = "fuchsia")]
7039pub struct NightModeSynchronousProxy {
7040    client: fidl::client::sync::Client,
7041}
7042
7043#[cfg(target_os = "fuchsia")]
7044impl fidl::endpoints::SynchronousProxy for NightModeSynchronousProxy {
7045    type Proxy = NightModeProxy;
7046    type Protocol = NightModeMarker;
7047
7048    fn from_channel(inner: fidl::Channel) -> Self {
7049        Self::new(inner)
7050    }
7051
7052    fn into_channel(self) -> fidl::Channel {
7053        self.client.into_channel()
7054    }
7055
7056    fn as_channel(&self) -> &fidl::Channel {
7057        self.client.as_channel()
7058    }
7059}
7060
7061#[cfg(target_os = "fuchsia")]
7062impl NightModeSynchronousProxy {
7063    pub fn new(channel: fidl::Channel) -> Self {
7064        let protocol_name = <NightModeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
7065        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
7066    }
7067
7068    pub fn into_channel(self) -> fidl::Channel {
7069        self.client.into_channel()
7070    }
7071
7072    /// Waits until an event arrives and returns it. It is safe for other
7073    /// threads to make concurrent requests while waiting for an event.
7074    pub fn wait_for_event(
7075        &self,
7076        deadline: zx::MonotonicInstant,
7077    ) -> Result<NightModeEvent, fidl::Error> {
7078        NightModeEvent::decode(self.client.wait_for_event(deadline)?)
7079    }
7080
7081    /// Gets the current [`NightModeSettings`]. Returns immediately on first
7082    /// call; subsequent calls return when the values change.
7083    ///
7084    /// If this call fails, it is considered a fatal error and the channel
7085    /// will be closed.
7086    pub fn r#watch(
7087        &self,
7088        ___deadline: zx::MonotonicInstant,
7089    ) -> Result<NightModeSettings, fidl::Error> {
7090        let _response =
7091            self.client.send_query::<fidl::encoding::EmptyPayload, NightModeWatchResponse>(
7092                (),
7093                0x7e1509bf8c7582f6,
7094                fidl::encoding::DynamicFlags::empty(),
7095                ___deadline,
7096            )?;
7097        Ok(_response.settings)
7098    }
7099
7100    /// Sets [`NightModeSettings`] settings. Any field not explicitly set in
7101    /// the table performs a no-op, and will not make any changes.
7102    pub fn r#set(
7103        &self,
7104        mut settings: &NightModeSettings,
7105        ___deadline: zx::MonotonicInstant,
7106    ) -> Result<NightModeSetResult, fidl::Error> {
7107        let _response = self.client.send_query::<NightModeSetRequest, fidl::encoding::ResultType<
7108            fidl::encoding::EmptyStruct,
7109            Error,
7110        >>(
7111            (settings,),
7112            0x28c3d78ab05b55cd,
7113            fidl::encoding::DynamicFlags::empty(),
7114            ___deadline,
7115        )?;
7116        Ok(_response.map(|x| x))
7117    }
7118}
7119
7120#[cfg(target_os = "fuchsia")]
7121impl From<NightModeSynchronousProxy> for zx::Handle {
7122    fn from(value: NightModeSynchronousProxy) -> Self {
7123        value.into_channel().into()
7124    }
7125}
7126
7127#[cfg(target_os = "fuchsia")]
7128impl From<fidl::Channel> for NightModeSynchronousProxy {
7129    fn from(value: fidl::Channel) -> Self {
7130        Self::new(value)
7131    }
7132}
7133
7134#[cfg(target_os = "fuchsia")]
7135impl fidl::endpoints::FromClient for NightModeSynchronousProxy {
7136    type Protocol = NightModeMarker;
7137
7138    fn from_client(value: fidl::endpoints::ClientEnd<NightModeMarker>) -> Self {
7139        Self::new(value.into_channel())
7140    }
7141}
7142
7143#[derive(Debug, Clone)]
7144pub struct NightModeProxy {
7145    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
7146}
7147
7148impl fidl::endpoints::Proxy for NightModeProxy {
7149    type Protocol = NightModeMarker;
7150
7151    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
7152        Self::new(inner)
7153    }
7154
7155    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
7156        self.client.into_channel().map_err(|client| Self { client })
7157    }
7158
7159    fn as_channel(&self) -> &::fidl::AsyncChannel {
7160        self.client.as_channel()
7161    }
7162}
7163
7164impl NightModeProxy {
7165    /// Create a new Proxy for fuchsia.settings/NightMode.
7166    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
7167        let protocol_name = <NightModeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
7168        Self { client: fidl::client::Client::new(channel, protocol_name) }
7169    }
7170
7171    /// Get a Stream of events from the remote end of the protocol.
7172    ///
7173    /// # Panics
7174    ///
7175    /// Panics if the event stream was already taken.
7176    pub fn take_event_stream(&self) -> NightModeEventStream {
7177        NightModeEventStream { event_receiver: self.client.take_event_receiver() }
7178    }
7179
7180    /// Gets the current [`NightModeSettings`]. Returns immediately on first
7181    /// call; subsequent calls return when the values change.
7182    ///
7183    /// If this call fails, it is considered a fatal error and the channel
7184    /// will be closed.
7185    pub fn r#watch(
7186        &self,
7187    ) -> fidl::client::QueryResponseFut<
7188        NightModeSettings,
7189        fidl::encoding::DefaultFuchsiaResourceDialect,
7190    > {
7191        NightModeProxyInterface::r#watch(self)
7192    }
7193
7194    /// Sets [`NightModeSettings`] settings. Any field not explicitly set in
7195    /// the table performs a no-op, and will not make any changes.
7196    pub fn r#set(
7197        &self,
7198        mut settings: &NightModeSettings,
7199    ) -> fidl::client::QueryResponseFut<
7200        NightModeSetResult,
7201        fidl::encoding::DefaultFuchsiaResourceDialect,
7202    > {
7203        NightModeProxyInterface::r#set(self, settings)
7204    }
7205}
7206
7207impl NightModeProxyInterface for NightModeProxy {
7208    type WatchResponseFut = fidl::client::QueryResponseFut<
7209        NightModeSettings,
7210        fidl::encoding::DefaultFuchsiaResourceDialect,
7211    >;
7212    fn r#watch(&self) -> Self::WatchResponseFut {
7213        fn _decode(
7214            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
7215        ) -> Result<NightModeSettings, fidl::Error> {
7216            let _response = fidl::client::decode_transaction_body::<
7217                NightModeWatchResponse,
7218                fidl::encoding::DefaultFuchsiaResourceDialect,
7219                0x7e1509bf8c7582f6,
7220            >(_buf?)?;
7221            Ok(_response.settings)
7222        }
7223        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, NightModeSettings>(
7224            (),
7225            0x7e1509bf8c7582f6,
7226            fidl::encoding::DynamicFlags::empty(),
7227            _decode,
7228        )
7229    }
7230
7231    type SetResponseFut = fidl::client::QueryResponseFut<
7232        NightModeSetResult,
7233        fidl::encoding::DefaultFuchsiaResourceDialect,
7234    >;
7235    fn r#set(&self, mut settings: &NightModeSettings) -> Self::SetResponseFut {
7236        fn _decode(
7237            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
7238        ) -> Result<NightModeSetResult, fidl::Error> {
7239            let _response = fidl::client::decode_transaction_body::<
7240                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
7241                fidl::encoding::DefaultFuchsiaResourceDialect,
7242                0x28c3d78ab05b55cd,
7243            >(_buf?)?;
7244            Ok(_response.map(|x| x))
7245        }
7246        self.client.send_query_and_decode::<NightModeSetRequest, NightModeSetResult>(
7247            (settings,),
7248            0x28c3d78ab05b55cd,
7249            fidl::encoding::DynamicFlags::empty(),
7250            _decode,
7251        )
7252    }
7253}
7254
7255pub struct NightModeEventStream {
7256    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
7257}
7258
7259impl std::marker::Unpin for NightModeEventStream {}
7260
7261impl futures::stream::FusedStream for NightModeEventStream {
7262    fn is_terminated(&self) -> bool {
7263        self.event_receiver.is_terminated()
7264    }
7265}
7266
7267impl futures::Stream for NightModeEventStream {
7268    type Item = Result<NightModeEvent, fidl::Error>;
7269
7270    fn poll_next(
7271        mut self: std::pin::Pin<&mut Self>,
7272        cx: &mut std::task::Context<'_>,
7273    ) -> std::task::Poll<Option<Self::Item>> {
7274        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
7275            &mut self.event_receiver,
7276            cx
7277        )?) {
7278            Some(buf) => std::task::Poll::Ready(Some(NightModeEvent::decode(buf))),
7279            None => std::task::Poll::Ready(None),
7280        }
7281    }
7282}
7283
7284#[derive(Debug)]
7285pub enum NightModeEvent {}
7286
7287impl NightModeEvent {
7288    /// Decodes a message buffer as a [`NightModeEvent`].
7289    fn decode(
7290        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
7291    ) -> Result<NightModeEvent, fidl::Error> {
7292        let (bytes, _handles) = buf.split_mut();
7293        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
7294        debug_assert_eq!(tx_header.tx_id, 0);
7295        match tx_header.ordinal {
7296            _ => Err(fidl::Error::UnknownOrdinal {
7297                ordinal: tx_header.ordinal,
7298                protocol_name: <NightModeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
7299            }),
7300        }
7301    }
7302}
7303
7304/// A Stream of incoming requests for fuchsia.settings/NightMode.
7305pub struct NightModeRequestStream {
7306    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
7307    is_terminated: bool,
7308}
7309
7310impl std::marker::Unpin for NightModeRequestStream {}
7311
7312impl futures::stream::FusedStream for NightModeRequestStream {
7313    fn is_terminated(&self) -> bool {
7314        self.is_terminated
7315    }
7316}
7317
7318impl fidl::endpoints::RequestStream for NightModeRequestStream {
7319    type Protocol = NightModeMarker;
7320    type ControlHandle = NightModeControlHandle;
7321
7322    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
7323        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
7324    }
7325
7326    fn control_handle(&self) -> Self::ControlHandle {
7327        NightModeControlHandle { inner: self.inner.clone() }
7328    }
7329
7330    fn into_inner(
7331        self,
7332    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
7333    {
7334        (self.inner, self.is_terminated)
7335    }
7336
7337    fn from_inner(
7338        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
7339        is_terminated: bool,
7340    ) -> Self {
7341        Self { inner, is_terminated }
7342    }
7343}
7344
7345impl futures::Stream for NightModeRequestStream {
7346    type Item = Result<NightModeRequest, fidl::Error>;
7347
7348    fn poll_next(
7349        mut self: std::pin::Pin<&mut Self>,
7350        cx: &mut std::task::Context<'_>,
7351    ) -> std::task::Poll<Option<Self::Item>> {
7352        let this = &mut *self;
7353        if this.inner.check_shutdown(cx) {
7354            this.is_terminated = true;
7355            return std::task::Poll::Ready(None);
7356        }
7357        if this.is_terminated {
7358            panic!("polled NightModeRequestStream after completion");
7359        }
7360        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
7361            |bytes, handles| {
7362                match this.inner.channel().read_etc(cx, bytes, handles) {
7363                    std::task::Poll::Ready(Ok(())) => {}
7364                    std::task::Poll::Pending => return std::task::Poll::Pending,
7365                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
7366                        this.is_terminated = true;
7367                        return std::task::Poll::Ready(None);
7368                    }
7369                    std::task::Poll::Ready(Err(e)) => {
7370                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
7371                            e.into(),
7372                        ))));
7373                    }
7374                }
7375
7376                // A message has been received from the channel
7377                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
7378
7379                std::task::Poll::Ready(Some(match header.ordinal {
7380                    0x7e1509bf8c7582f6 => {
7381                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
7382                        let mut req = fidl::new_empty!(
7383                            fidl::encoding::EmptyPayload,
7384                            fidl::encoding::DefaultFuchsiaResourceDialect
7385                        );
7386                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
7387                        let control_handle = NightModeControlHandle { inner: this.inner.clone() };
7388                        Ok(NightModeRequest::Watch {
7389                            responder: NightModeWatchResponder {
7390                                control_handle: std::mem::ManuallyDrop::new(control_handle),
7391                                tx_id: header.tx_id,
7392                            },
7393                        })
7394                    }
7395                    0x28c3d78ab05b55cd => {
7396                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
7397                        let mut req = fidl::new_empty!(
7398                            NightModeSetRequest,
7399                            fidl::encoding::DefaultFuchsiaResourceDialect
7400                        );
7401                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NightModeSetRequest>(&header, _body_bytes, handles, &mut req)?;
7402                        let control_handle = NightModeControlHandle { inner: this.inner.clone() };
7403                        Ok(NightModeRequest::Set {
7404                            settings: req.settings,
7405
7406                            responder: NightModeSetResponder {
7407                                control_handle: std::mem::ManuallyDrop::new(control_handle),
7408                                tx_id: header.tx_id,
7409                            },
7410                        })
7411                    }
7412                    _ => Err(fidl::Error::UnknownOrdinal {
7413                        ordinal: header.ordinal,
7414                        protocol_name:
7415                            <NightModeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
7416                    }),
7417                }))
7418            },
7419        )
7420    }
7421}
7422
7423/// Modify or watch Night Mode setting. Night mode puts the device in a
7424/// restricted mode which can be overrided if the user prefers. During night
7425/// mode, the following settings apply as per night mode parameters:
7426/// 1. DoNotDisturb is enabled/not.
7427/// 2. System volume is set to an override maximum.
7428/// 3. LED Brightness is set to an overridable maximum.
7429/// 4. Sleep mode is enabled/not.
7430///
7431/// Supported SettingsEpitaph enums:
7432/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
7433#[derive(Debug)]
7434pub enum NightModeRequest {
7435    /// Gets the current [`NightModeSettings`]. Returns immediately on first
7436    /// call; subsequent calls return when the values change.
7437    ///
7438    /// If this call fails, it is considered a fatal error and the channel
7439    /// will be closed.
7440    Watch { responder: NightModeWatchResponder },
7441    /// Sets [`NightModeSettings`] settings. Any field not explicitly set in
7442    /// the table performs a no-op, and will not make any changes.
7443    Set { settings: NightModeSettings, responder: NightModeSetResponder },
7444}
7445
7446impl NightModeRequest {
7447    #[allow(irrefutable_let_patterns)]
7448    pub fn into_watch(self) -> Option<(NightModeWatchResponder)> {
7449        if let NightModeRequest::Watch { responder } = self { Some((responder)) } else { None }
7450    }
7451
7452    #[allow(irrefutable_let_patterns)]
7453    pub fn into_set(self) -> Option<(NightModeSettings, NightModeSetResponder)> {
7454        if let NightModeRequest::Set { settings, responder } = self {
7455            Some((settings, responder))
7456        } else {
7457            None
7458        }
7459    }
7460
7461    /// Name of the method defined in FIDL
7462    pub fn method_name(&self) -> &'static str {
7463        match *self {
7464            NightModeRequest::Watch { .. } => "watch",
7465            NightModeRequest::Set { .. } => "set",
7466        }
7467    }
7468}
7469
7470#[derive(Debug, Clone)]
7471pub struct NightModeControlHandle {
7472    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
7473}
7474
7475impl fidl::endpoints::ControlHandle for NightModeControlHandle {
7476    fn shutdown(&self) {
7477        self.inner.shutdown()
7478    }
7479    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
7480        self.inner.shutdown_with_epitaph(status)
7481    }
7482
7483    fn is_closed(&self) -> bool {
7484        self.inner.channel().is_closed()
7485    }
7486    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
7487        self.inner.channel().on_closed()
7488    }
7489
7490    #[cfg(target_os = "fuchsia")]
7491    fn signal_peer(
7492        &self,
7493        clear_mask: zx::Signals,
7494        set_mask: zx::Signals,
7495    ) -> Result<(), zx_status::Status> {
7496        use fidl::Peered;
7497        self.inner.channel().signal_peer(clear_mask, set_mask)
7498    }
7499}
7500
7501impl NightModeControlHandle {}
7502
7503#[must_use = "FIDL methods require a response to be sent"]
7504#[derive(Debug)]
7505pub struct NightModeWatchResponder {
7506    control_handle: std::mem::ManuallyDrop<NightModeControlHandle>,
7507    tx_id: u32,
7508}
7509
7510/// Set the the channel to be shutdown (see [`NightModeControlHandle::shutdown`])
7511/// if the responder is dropped without sending a response, so that the client
7512/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
7513impl std::ops::Drop for NightModeWatchResponder {
7514    fn drop(&mut self) {
7515        self.control_handle.shutdown();
7516        // Safety: drops once, never accessed again
7517        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
7518    }
7519}
7520
7521impl fidl::endpoints::Responder for NightModeWatchResponder {
7522    type ControlHandle = NightModeControlHandle;
7523
7524    fn control_handle(&self) -> &NightModeControlHandle {
7525        &self.control_handle
7526    }
7527
7528    fn drop_without_shutdown(mut self) {
7529        // Safety: drops once, never accessed again due to mem::forget
7530        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
7531        // Prevent Drop from running (which would shut down the channel)
7532        std::mem::forget(self);
7533    }
7534}
7535
7536impl NightModeWatchResponder {
7537    /// Sends a response to the FIDL transaction.
7538    ///
7539    /// Sets the channel to shutdown if an error occurs.
7540    pub fn send(self, mut settings: &NightModeSettings) -> Result<(), fidl::Error> {
7541        let _result = self.send_raw(settings);
7542        if _result.is_err() {
7543            self.control_handle.shutdown();
7544        }
7545        self.drop_without_shutdown();
7546        _result
7547    }
7548
7549    /// Similar to "send" but does not shutdown the channel if an error occurs.
7550    pub fn send_no_shutdown_on_err(
7551        self,
7552        mut settings: &NightModeSettings,
7553    ) -> Result<(), fidl::Error> {
7554        let _result = self.send_raw(settings);
7555        self.drop_without_shutdown();
7556        _result
7557    }
7558
7559    fn send_raw(&self, mut settings: &NightModeSettings) -> Result<(), fidl::Error> {
7560        self.control_handle.inner.send::<NightModeWatchResponse>(
7561            (settings,),
7562            self.tx_id,
7563            0x7e1509bf8c7582f6,
7564            fidl::encoding::DynamicFlags::empty(),
7565        )
7566    }
7567}
7568
7569#[must_use = "FIDL methods require a response to be sent"]
7570#[derive(Debug)]
7571pub struct NightModeSetResponder {
7572    control_handle: std::mem::ManuallyDrop<NightModeControlHandle>,
7573    tx_id: u32,
7574}
7575
7576/// Set the the channel to be shutdown (see [`NightModeControlHandle::shutdown`])
7577/// if the responder is dropped without sending a response, so that the client
7578/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
7579impl std::ops::Drop for NightModeSetResponder {
7580    fn drop(&mut self) {
7581        self.control_handle.shutdown();
7582        // Safety: drops once, never accessed again
7583        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
7584    }
7585}
7586
7587impl fidl::endpoints::Responder for NightModeSetResponder {
7588    type ControlHandle = NightModeControlHandle;
7589
7590    fn control_handle(&self) -> &NightModeControlHandle {
7591        &self.control_handle
7592    }
7593
7594    fn drop_without_shutdown(mut self) {
7595        // Safety: drops once, never accessed again due to mem::forget
7596        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
7597        // Prevent Drop from running (which would shut down the channel)
7598        std::mem::forget(self);
7599    }
7600}
7601
7602impl NightModeSetResponder {
7603    /// Sends a response to the FIDL transaction.
7604    ///
7605    /// Sets the channel to shutdown if an error occurs.
7606    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
7607        let _result = self.send_raw(result);
7608        if _result.is_err() {
7609            self.control_handle.shutdown();
7610        }
7611        self.drop_without_shutdown();
7612        _result
7613    }
7614
7615    /// Similar to "send" but does not shutdown the channel if an error occurs.
7616    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
7617        let _result = self.send_raw(result);
7618        self.drop_without_shutdown();
7619        _result
7620    }
7621
7622    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
7623        self.control_handle
7624            .inner
7625            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
7626                result,
7627                self.tx_id,
7628                0x28c3d78ab05b55cd,
7629                fidl::encoding::DynamicFlags::empty(),
7630            )
7631    }
7632}
7633
7634#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
7635pub struct PrivacyMarker;
7636
7637impl fidl::endpoints::ProtocolMarker for PrivacyMarker {
7638    type Proxy = PrivacyProxy;
7639    type RequestStream = PrivacyRequestStream;
7640    #[cfg(target_os = "fuchsia")]
7641    type SynchronousProxy = PrivacySynchronousProxy;
7642
7643    const DEBUG_NAME: &'static str = "fuchsia.settings.Privacy";
7644}
7645impl fidl::endpoints::DiscoverableProtocolMarker for PrivacyMarker {}
7646pub type PrivacySetResult = Result<(), Error>;
7647
7648pub trait PrivacyProxyInterface: Send + Sync {
7649    type WatchResponseFut: std::future::Future<Output = Result<PrivacySettings, fidl::Error>> + Send;
7650    fn r#watch(&self) -> Self::WatchResponseFut;
7651    type SetResponseFut: std::future::Future<Output = Result<PrivacySetResult, fidl::Error>> + Send;
7652    fn r#set(&self, settings: &PrivacySettings) -> Self::SetResponseFut;
7653}
7654#[derive(Debug)]
7655#[cfg(target_os = "fuchsia")]
7656pub struct PrivacySynchronousProxy {
7657    client: fidl::client::sync::Client,
7658}
7659
7660#[cfg(target_os = "fuchsia")]
7661impl fidl::endpoints::SynchronousProxy for PrivacySynchronousProxy {
7662    type Proxy = PrivacyProxy;
7663    type Protocol = PrivacyMarker;
7664
7665    fn from_channel(inner: fidl::Channel) -> Self {
7666        Self::new(inner)
7667    }
7668
7669    fn into_channel(self) -> fidl::Channel {
7670        self.client.into_channel()
7671    }
7672
7673    fn as_channel(&self) -> &fidl::Channel {
7674        self.client.as_channel()
7675    }
7676}
7677
7678#[cfg(target_os = "fuchsia")]
7679impl PrivacySynchronousProxy {
7680    pub fn new(channel: fidl::Channel) -> Self {
7681        let protocol_name = <PrivacyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
7682        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
7683    }
7684
7685    pub fn into_channel(self) -> fidl::Channel {
7686        self.client.into_channel()
7687    }
7688
7689    /// Waits until an event arrives and returns it. It is safe for other
7690    /// threads to make concurrent requests while waiting for an event.
7691    pub fn wait_for_event(
7692        &self,
7693        deadline: zx::MonotonicInstant,
7694    ) -> Result<PrivacyEvent, fidl::Error> {
7695        PrivacyEvent::decode(self.client.wait_for_event(deadline)?)
7696    }
7697
7698    /// Notifies of a change in privacy settings.
7699    ///
7700    /// On a given connection, the server will return immediately if this is the first call made,
7701    /// or if the `settings` value has changed since a previous call. Otherwise, the server will
7702    /// wait on a value change before returning the new value. This follows the hanging get pattern.
7703    ///
7704    /// If this call fails, it is considered a fatal error and the channel will be closed.
7705    pub fn r#watch(
7706        &self,
7707        ___deadline: zx::MonotonicInstant,
7708    ) -> Result<PrivacySettings, fidl::Error> {
7709        let _response =
7710            self.client.send_query::<fidl::encoding::EmptyPayload, PrivacyWatchResponse>(
7711                (),
7712                0x1cb0c420ed81f47c,
7713                fidl::encoding::DynamicFlags::empty(),
7714                ___deadline,
7715            )?;
7716        Ok(_response.settings)
7717    }
7718
7719    /// Sets the privacy settings.
7720    ///
7721    /// Any field not explicitly set in `settings` performs a no-op, and will not make any changes.
7722    pub fn r#set(
7723        &self,
7724        mut settings: &PrivacySettings,
7725        ___deadline: zx::MonotonicInstant,
7726    ) -> Result<PrivacySetResult, fidl::Error> {
7727        let _response = self.client.send_query::<PrivacySetRequest, fidl::encoding::ResultType<
7728            fidl::encoding::EmptyStruct,
7729            Error,
7730        >>(
7731            (settings,),
7732            0xe2f4a1c85885537,
7733            fidl::encoding::DynamicFlags::empty(),
7734            ___deadline,
7735        )?;
7736        Ok(_response.map(|x| x))
7737    }
7738}
7739
7740#[cfg(target_os = "fuchsia")]
7741impl From<PrivacySynchronousProxy> for zx::Handle {
7742    fn from(value: PrivacySynchronousProxy) -> Self {
7743        value.into_channel().into()
7744    }
7745}
7746
7747#[cfg(target_os = "fuchsia")]
7748impl From<fidl::Channel> for PrivacySynchronousProxy {
7749    fn from(value: fidl::Channel) -> Self {
7750        Self::new(value)
7751    }
7752}
7753
7754#[cfg(target_os = "fuchsia")]
7755impl fidl::endpoints::FromClient for PrivacySynchronousProxy {
7756    type Protocol = PrivacyMarker;
7757
7758    fn from_client(value: fidl::endpoints::ClientEnd<PrivacyMarker>) -> Self {
7759        Self::new(value.into_channel())
7760    }
7761}
7762
7763#[derive(Debug, Clone)]
7764pub struct PrivacyProxy {
7765    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
7766}
7767
7768impl fidl::endpoints::Proxy for PrivacyProxy {
7769    type Protocol = PrivacyMarker;
7770
7771    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
7772        Self::new(inner)
7773    }
7774
7775    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
7776        self.client.into_channel().map_err(|client| Self { client })
7777    }
7778
7779    fn as_channel(&self) -> &::fidl::AsyncChannel {
7780        self.client.as_channel()
7781    }
7782}
7783
7784impl PrivacyProxy {
7785    /// Create a new Proxy for fuchsia.settings/Privacy.
7786    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
7787        let protocol_name = <PrivacyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
7788        Self { client: fidl::client::Client::new(channel, protocol_name) }
7789    }
7790
7791    /// Get a Stream of events from the remote end of the protocol.
7792    ///
7793    /// # Panics
7794    ///
7795    /// Panics if the event stream was already taken.
7796    pub fn take_event_stream(&self) -> PrivacyEventStream {
7797        PrivacyEventStream { event_receiver: self.client.take_event_receiver() }
7798    }
7799
7800    /// Notifies of a change in privacy settings.
7801    ///
7802    /// On a given connection, the server will return immediately if this is the first call made,
7803    /// or if the `settings` value has changed since a previous call. Otherwise, the server will
7804    /// wait on a value change before returning the new value. This follows the hanging get pattern.
7805    ///
7806    /// If this call fails, it is considered a fatal error and the channel will be closed.
7807    pub fn r#watch(
7808        &self,
7809    ) -> fidl::client::QueryResponseFut<
7810        PrivacySettings,
7811        fidl::encoding::DefaultFuchsiaResourceDialect,
7812    > {
7813        PrivacyProxyInterface::r#watch(self)
7814    }
7815
7816    /// Sets the privacy settings.
7817    ///
7818    /// Any field not explicitly set in `settings` performs a no-op, and will not make any changes.
7819    pub fn r#set(
7820        &self,
7821        mut settings: &PrivacySettings,
7822    ) -> fidl::client::QueryResponseFut<
7823        PrivacySetResult,
7824        fidl::encoding::DefaultFuchsiaResourceDialect,
7825    > {
7826        PrivacyProxyInterface::r#set(self, settings)
7827    }
7828}
7829
7830impl PrivacyProxyInterface for PrivacyProxy {
7831    type WatchResponseFut = fidl::client::QueryResponseFut<
7832        PrivacySettings,
7833        fidl::encoding::DefaultFuchsiaResourceDialect,
7834    >;
7835    fn r#watch(&self) -> Self::WatchResponseFut {
7836        fn _decode(
7837            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
7838        ) -> Result<PrivacySettings, fidl::Error> {
7839            let _response = fidl::client::decode_transaction_body::<
7840                PrivacyWatchResponse,
7841                fidl::encoding::DefaultFuchsiaResourceDialect,
7842                0x1cb0c420ed81f47c,
7843            >(_buf?)?;
7844            Ok(_response.settings)
7845        }
7846        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, PrivacySettings>(
7847            (),
7848            0x1cb0c420ed81f47c,
7849            fidl::encoding::DynamicFlags::empty(),
7850            _decode,
7851        )
7852    }
7853
7854    type SetResponseFut = fidl::client::QueryResponseFut<
7855        PrivacySetResult,
7856        fidl::encoding::DefaultFuchsiaResourceDialect,
7857    >;
7858    fn r#set(&self, mut settings: &PrivacySettings) -> Self::SetResponseFut {
7859        fn _decode(
7860            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
7861        ) -> Result<PrivacySetResult, fidl::Error> {
7862            let _response = fidl::client::decode_transaction_body::<
7863                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
7864                fidl::encoding::DefaultFuchsiaResourceDialect,
7865                0xe2f4a1c85885537,
7866            >(_buf?)?;
7867            Ok(_response.map(|x| x))
7868        }
7869        self.client.send_query_and_decode::<PrivacySetRequest, PrivacySetResult>(
7870            (settings,),
7871            0xe2f4a1c85885537,
7872            fidl::encoding::DynamicFlags::empty(),
7873            _decode,
7874        )
7875    }
7876}
7877
7878pub struct PrivacyEventStream {
7879    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
7880}
7881
7882impl std::marker::Unpin for PrivacyEventStream {}
7883
7884impl futures::stream::FusedStream for PrivacyEventStream {
7885    fn is_terminated(&self) -> bool {
7886        self.event_receiver.is_terminated()
7887    }
7888}
7889
7890impl futures::Stream for PrivacyEventStream {
7891    type Item = Result<PrivacyEvent, fidl::Error>;
7892
7893    fn poll_next(
7894        mut self: std::pin::Pin<&mut Self>,
7895        cx: &mut std::task::Context<'_>,
7896    ) -> std::task::Poll<Option<Self::Item>> {
7897        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
7898            &mut self.event_receiver,
7899            cx
7900        )?) {
7901            Some(buf) => std::task::Poll::Ready(Some(PrivacyEvent::decode(buf))),
7902            None => std::task::Poll::Ready(None),
7903        }
7904    }
7905}
7906
7907#[derive(Debug)]
7908pub enum PrivacyEvent {}
7909
7910impl PrivacyEvent {
7911    /// Decodes a message buffer as a [`PrivacyEvent`].
7912    fn decode(
7913        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
7914    ) -> Result<PrivacyEvent, fidl::Error> {
7915        let (bytes, _handles) = buf.split_mut();
7916        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
7917        debug_assert_eq!(tx_header.tx_id, 0);
7918        match tx_header.ordinal {
7919            _ => Err(fidl::Error::UnknownOrdinal {
7920                ordinal: tx_header.ordinal,
7921                protocol_name: <PrivacyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
7922            }),
7923        }
7924    }
7925}
7926
7927/// A Stream of incoming requests for fuchsia.settings/Privacy.
7928pub struct PrivacyRequestStream {
7929    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
7930    is_terminated: bool,
7931}
7932
7933impl std::marker::Unpin for PrivacyRequestStream {}
7934
7935impl futures::stream::FusedStream for PrivacyRequestStream {
7936    fn is_terminated(&self) -> bool {
7937        self.is_terminated
7938    }
7939}
7940
7941impl fidl::endpoints::RequestStream for PrivacyRequestStream {
7942    type Protocol = PrivacyMarker;
7943    type ControlHandle = PrivacyControlHandle;
7944
7945    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
7946        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
7947    }
7948
7949    fn control_handle(&self) -> Self::ControlHandle {
7950        PrivacyControlHandle { inner: self.inner.clone() }
7951    }
7952
7953    fn into_inner(
7954        self,
7955    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
7956    {
7957        (self.inner, self.is_terminated)
7958    }
7959
7960    fn from_inner(
7961        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
7962        is_terminated: bool,
7963    ) -> Self {
7964        Self { inner, is_terminated }
7965    }
7966}
7967
7968impl futures::Stream for PrivacyRequestStream {
7969    type Item = Result<PrivacyRequest, fidl::Error>;
7970
7971    fn poll_next(
7972        mut self: std::pin::Pin<&mut Self>,
7973        cx: &mut std::task::Context<'_>,
7974    ) -> std::task::Poll<Option<Self::Item>> {
7975        let this = &mut *self;
7976        if this.inner.check_shutdown(cx) {
7977            this.is_terminated = true;
7978            return std::task::Poll::Ready(None);
7979        }
7980        if this.is_terminated {
7981            panic!("polled PrivacyRequestStream after completion");
7982        }
7983        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
7984            |bytes, handles| {
7985                match this.inner.channel().read_etc(cx, bytes, handles) {
7986                    std::task::Poll::Ready(Ok(())) => {}
7987                    std::task::Poll::Pending => return std::task::Poll::Pending,
7988                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
7989                        this.is_terminated = true;
7990                        return std::task::Poll::Ready(None);
7991                    }
7992                    std::task::Poll::Ready(Err(e)) => {
7993                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
7994                            e.into(),
7995                        ))));
7996                    }
7997                }
7998
7999                // A message has been received from the channel
8000                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
8001
8002                std::task::Poll::Ready(Some(match header.ordinal {
8003                    0x1cb0c420ed81f47c => {
8004                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
8005                        let mut req = fidl::new_empty!(
8006                            fidl::encoding::EmptyPayload,
8007                            fidl::encoding::DefaultFuchsiaResourceDialect
8008                        );
8009                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
8010                        let control_handle = PrivacyControlHandle { inner: this.inner.clone() };
8011                        Ok(PrivacyRequest::Watch {
8012                            responder: PrivacyWatchResponder {
8013                                control_handle: std::mem::ManuallyDrop::new(control_handle),
8014                                tx_id: header.tx_id,
8015                            },
8016                        })
8017                    }
8018                    0xe2f4a1c85885537 => {
8019                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
8020                        let mut req = fidl::new_empty!(
8021                            PrivacySetRequest,
8022                            fidl::encoding::DefaultFuchsiaResourceDialect
8023                        );
8024                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PrivacySetRequest>(&header, _body_bytes, handles, &mut req)?;
8025                        let control_handle = PrivacyControlHandle { inner: this.inner.clone() };
8026                        Ok(PrivacyRequest::Set {
8027                            settings: req.settings,
8028
8029                            responder: PrivacySetResponder {
8030                                control_handle: std::mem::ManuallyDrop::new(control_handle),
8031                                tx_id: header.tx_id,
8032                            },
8033                        })
8034                    }
8035                    _ => Err(fidl::Error::UnknownOrdinal {
8036                        ordinal: header.ordinal,
8037                        protocol_name:
8038                            <PrivacyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
8039                    }),
8040                }))
8041            },
8042        )
8043    }
8044}
8045
8046/// Settings related to privacy.
8047///
8048/// Supported SettingsEpitaph enums:
8049/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
8050#[derive(Debug)]
8051pub enum PrivacyRequest {
8052    /// Notifies of a change in privacy settings.
8053    ///
8054    /// On a given connection, the server will return immediately if this is the first call made,
8055    /// or if the `settings` value has changed since a previous call. Otherwise, the server will
8056    /// wait on a value change before returning the new value. This follows the hanging get pattern.
8057    ///
8058    /// If this call fails, it is considered a fatal error and the channel will be closed.
8059    Watch { responder: PrivacyWatchResponder },
8060    /// Sets the privacy settings.
8061    ///
8062    /// Any field not explicitly set in `settings` performs a no-op, and will not make any changes.
8063    Set { settings: PrivacySettings, responder: PrivacySetResponder },
8064}
8065
8066impl PrivacyRequest {
8067    #[allow(irrefutable_let_patterns)]
8068    pub fn into_watch(self) -> Option<(PrivacyWatchResponder)> {
8069        if let PrivacyRequest::Watch { responder } = self { Some((responder)) } else { None }
8070    }
8071
8072    #[allow(irrefutable_let_patterns)]
8073    pub fn into_set(self) -> Option<(PrivacySettings, PrivacySetResponder)> {
8074        if let PrivacyRequest::Set { settings, responder } = self {
8075            Some((settings, responder))
8076        } else {
8077            None
8078        }
8079    }
8080
8081    /// Name of the method defined in FIDL
8082    pub fn method_name(&self) -> &'static str {
8083        match *self {
8084            PrivacyRequest::Watch { .. } => "watch",
8085            PrivacyRequest::Set { .. } => "set",
8086        }
8087    }
8088}
8089
8090#[derive(Debug, Clone)]
8091pub struct PrivacyControlHandle {
8092    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
8093}
8094
8095impl fidl::endpoints::ControlHandle for PrivacyControlHandle {
8096    fn shutdown(&self) {
8097        self.inner.shutdown()
8098    }
8099    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
8100        self.inner.shutdown_with_epitaph(status)
8101    }
8102
8103    fn is_closed(&self) -> bool {
8104        self.inner.channel().is_closed()
8105    }
8106    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
8107        self.inner.channel().on_closed()
8108    }
8109
8110    #[cfg(target_os = "fuchsia")]
8111    fn signal_peer(
8112        &self,
8113        clear_mask: zx::Signals,
8114        set_mask: zx::Signals,
8115    ) -> Result<(), zx_status::Status> {
8116        use fidl::Peered;
8117        self.inner.channel().signal_peer(clear_mask, set_mask)
8118    }
8119}
8120
8121impl PrivacyControlHandle {}
8122
8123#[must_use = "FIDL methods require a response to be sent"]
8124#[derive(Debug)]
8125pub struct PrivacyWatchResponder {
8126    control_handle: std::mem::ManuallyDrop<PrivacyControlHandle>,
8127    tx_id: u32,
8128}
8129
8130/// Set the the channel to be shutdown (see [`PrivacyControlHandle::shutdown`])
8131/// if the responder is dropped without sending a response, so that the client
8132/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
8133impl std::ops::Drop for PrivacyWatchResponder {
8134    fn drop(&mut self) {
8135        self.control_handle.shutdown();
8136        // Safety: drops once, never accessed again
8137        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8138    }
8139}
8140
8141impl fidl::endpoints::Responder for PrivacyWatchResponder {
8142    type ControlHandle = PrivacyControlHandle;
8143
8144    fn control_handle(&self) -> &PrivacyControlHandle {
8145        &self.control_handle
8146    }
8147
8148    fn drop_without_shutdown(mut self) {
8149        // Safety: drops once, never accessed again due to mem::forget
8150        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8151        // Prevent Drop from running (which would shut down the channel)
8152        std::mem::forget(self);
8153    }
8154}
8155
8156impl PrivacyWatchResponder {
8157    /// Sends a response to the FIDL transaction.
8158    ///
8159    /// Sets the channel to shutdown if an error occurs.
8160    pub fn send(self, mut settings: &PrivacySettings) -> Result<(), fidl::Error> {
8161        let _result = self.send_raw(settings);
8162        if _result.is_err() {
8163            self.control_handle.shutdown();
8164        }
8165        self.drop_without_shutdown();
8166        _result
8167    }
8168
8169    /// Similar to "send" but does not shutdown the channel if an error occurs.
8170    pub fn send_no_shutdown_on_err(
8171        self,
8172        mut settings: &PrivacySettings,
8173    ) -> Result<(), fidl::Error> {
8174        let _result = self.send_raw(settings);
8175        self.drop_without_shutdown();
8176        _result
8177    }
8178
8179    fn send_raw(&self, mut settings: &PrivacySettings) -> Result<(), fidl::Error> {
8180        self.control_handle.inner.send::<PrivacyWatchResponse>(
8181            (settings,),
8182            self.tx_id,
8183            0x1cb0c420ed81f47c,
8184            fidl::encoding::DynamicFlags::empty(),
8185        )
8186    }
8187}
8188
8189#[must_use = "FIDL methods require a response to be sent"]
8190#[derive(Debug)]
8191pub struct PrivacySetResponder {
8192    control_handle: std::mem::ManuallyDrop<PrivacyControlHandle>,
8193    tx_id: u32,
8194}
8195
8196/// Set the the channel to be shutdown (see [`PrivacyControlHandle::shutdown`])
8197/// if the responder is dropped without sending a response, so that the client
8198/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
8199impl std::ops::Drop for PrivacySetResponder {
8200    fn drop(&mut self) {
8201        self.control_handle.shutdown();
8202        // Safety: drops once, never accessed again
8203        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8204    }
8205}
8206
8207impl fidl::endpoints::Responder for PrivacySetResponder {
8208    type ControlHandle = PrivacyControlHandle;
8209
8210    fn control_handle(&self) -> &PrivacyControlHandle {
8211        &self.control_handle
8212    }
8213
8214    fn drop_without_shutdown(mut self) {
8215        // Safety: drops once, never accessed again due to mem::forget
8216        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8217        // Prevent Drop from running (which would shut down the channel)
8218        std::mem::forget(self);
8219    }
8220}
8221
8222impl PrivacySetResponder {
8223    /// Sends a response to the FIDL transaction.
8224    ///
8225    /// Sets the channel to shutdown if an error occurs.
8226    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
8227        let _result = self.send_raw(result);
8228        if _result.is_err() {
8229            self.control_handle.shutdown();
8230        }
8231        self.drop_without_shutdown();
8232        _result
8233    }
8234
8235    /// Similar to "send" but does not shutdown the channel if an error occurs.
8236    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
8237        let _result = self.send_raw(result);
8238        self.drop_without_shutdown();
8239        _result
8240    }
8241
8242    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
8243        self.control_handle
8244            .inner
8245            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
8246                result,
8247                self.tx_id,
8248                0xe2f4a1c85885537,
8249                fidl::encoding::DynamicFlags::empty(),
8250            )
8251    }
8252}
8253
8254#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
8255pub struct SetupMarker;
8256
8257impl fidl::endpoints::ProtocolMarker for SetupMarker {
8258    type Proxy = SetupProxy;
8259    type RequestStream = SetupRequestStream;
8260    #[cfg(target_os = "fuchsia")]
8261    type SynchronousProxy = SetupSynchronousProxy;
8262
8263    const DEBUG_NAME: &'static str = "fuchsia.settings.Setup";
8264}
8265impl fidl::endpoints::DiscoverableProtocolMarker for SetupMarker {}
8266pub type SetupSetResult = Result<(), Error>;
8267
8268pub trait SetupProxyInterface: Send + Sync {
8269    type WatchResponseFut: std::future::Future<Output = Result<SetupSettings, fidl::Error>> + Send;
8270    fn r#watch(&self) -> Self::WatchResponseFut;
8271    type SetResponseFut: std::future::Future<Output = Result<SetupSetResult, fidl::Error>> + Send;
8272    fn r#set(&self, settings: &SetupSettings, reboot_device: bool) -> Self::SetResponseFut;
8273}
8274#[derive(Debug)]
8275#[cfg(target_os = "fuchsia")]
8276pub struct SetupSynchronousProxy {
8277    client: fidl::client::sync::Client,
8278}
8279
8280#[cfg(target_os = "fuchsia")]
8281impl fidl::endpoints::SynchronousProxy for SetupSynchronousProxy {
8282    type Proxy = SetupProxy;
8283    type Protocol = SetupMarker;
8284
8285    fn from_channel(inner: fidl::Channel) -> Self {
8286        Self::new(inner)
8287    }
8288
8289    fn into_channel(self) -> fidl::Channel {
8290        self.client.into_channel()
8291    }
8292
8293    fn as_channel(&self) -> &fidl::Channel {
8294        self.client.as_channel()
8295    }
8296}
8297
8298#[cfg(target_os = "fuchsia")]
8299impl SetupSynchronousProxy {
8300    pub fn new(channel: fidl::Channel) -> Self {
8301        let protocol_name = <SetupMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
8302        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
8303    }
8304
8305    pub fn into_channel(self) -> fidl::Channel {
8306        self.client.into_channel()
8307    }
8308
8309    /// Waits until an event arrives and returns it. It is safe for other
8310    /// threads to make concurrent requests while waiting for an event.
8311    pub fn wait_for_event(
8312        &self,
8313        deadline: zx::MonotonicInstant,
8314    ) -> Result<SetupEvent, fidl::Error> {
8315        SetupEvent::decode(self.client.wait_for_event(deadline)?)
8316    }
8317
8318    /// Gets the current [SetupSettings]. Returns immediately on first call;
8319    /// subsequent calls return when the value changes.
8320    ///
8321    /// If this call fails, it is considered a fatal error and the channel
8322    /// will be closed.
8323    pub fn r#watch(&self, ___deadline: zx::MonotonicInstant) -> Result<SetupSettings, fidl::Error> {
8324        let _response =
8325            self.client.send_query::<fidl::encoding::EmptyPayload, SetupWatchResponse>(
8326                (),
8327                0xd3893c0e63c0a6e,
8328                fidl::encoding::DynamicFlags::empty(),
8329                ___deadline,
8330            )?;
8331        Ok(_response.settings)
8332    }
8333
8334    /// Changes the settings specified in [SetupSettings]. Any field not set in
8335    /// the table will not perform any system operation. An error will be
8336    /// returned if the provided settings is an invalid change (for example, if
8337    /// it is empty).
8338    pub fn r#set(
8339        &self,
8340        mut settings: &SetupSettings,
8341        mut reboot_device: bool,
8342        ___deadline: zx::MonotonicInstant,
8343    ) -> Result<SetupSetResult, fidl::Error> {
8344        let _response = self.client.send_query::<SetupSetRequest, fidl::encoding::ResultType<
8345            fidl::encoding::EmptyStruct,
8346            Error,
8347        >>(
8348            (settings, reboot_device),
8349            0x66a20be769388128,
8350            fidl::encoding::DynamicFlags::empty(),
8351            ___deadline,
8352        )?;
8353        Ok(_response.map(|x| x))
8354    }
8355}
8356
8357#[cfg(target_os = "fuchsia")]
8358impl From<SetupSynchronousProxy> for zx::Handle {
8359    fn from(value: SetupSynchronousProxy) -> Self {
8360        value.into_channel().into()
8361    }
8362}
8363
8364#[cfg(target_os = "fuchsia")]
8365impl From<fidl::Channel> for SetupSynchronousProxy {
8366    fn from(value: fidl::Channel) -> Self {
8367        Self::new(value)
8368    }
8369}
8370
8371#[cfg(target_os = "fuchsia")]
8372impl fidl::endpoints::FromClient for SetupSynchronousProxy {
8373    type Protocol = SetupMarker;
8374
8375    fn from_client(value: fidl::endpoints::ClientEnd<SetupMarker>) -> Self {
8376        Self::new(value.into_channel())
8377    }
8378}
8379
8380#[derive(Debug, Clone)]
8381pub struct SetupProxy {
8382    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
8383}
8384
8385impl fidl::endpoints::Proxy for SetupProxy {
8386    type Protocol = SetupMarker;
8387
8388    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
8389        Self::new(inner)
8390    }
8391
8392    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
8393        self.client.into_channel().map_err(|client| Self { client })
8394    }
8395
8396    fn as_channel(&self) -> &::fidl::AsyncChannel {
8397        self.client.as_channel()
8398    }
8399}
8400
8401impl SetupProxy {
8402    /// Create a new Proxy for fuchsia.settings/Setup.
8403    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
8404        let protocol_name = <SetupMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
8405        Self { client: fidl::client::Client::new(channel, protocol_name) }
8406    }
8407
8408    /// Get a Stream of events from the remote end of the protocol.
8409    ///
8410    /// # Panics
8411    ///
8412    /// Panics if the event stream was already taken.
8413    pub fn take_event_stream(&self) -> SetupEventStream {
8414        SetupEventStream { event_receiver: self.client.take_event_receiver() }
8415    }
8416
8417    /// Gets the current [SetupSettings]. Returns immediately on first call;
8418    /// subsequent calls return when the value changes.
8419    ///
8420    /// If this call fails, it is considered a fatal error and the channel
8421    /// will be closed.
8422    pub fn r#watch(
8423        &self,
8424    ) -> fidl::client::QueryResponseFut<SetupSettings, fidl::encoding::DefaultFuchsiaResourceDialect>
8425    {
8426        SetupProxyInterface::r#watch(self)
8427    }
8428
8429    /// Changes the settings specified in [SetupSettings]. Any field not set in
8430    /// the table will not perform any system operation. An error will be
8431    /// returned if the provided settings is an invalid change (for example, if
8432    /// it is empty).
8433    pub fn r#set(
8434        &self,
8435        mut settings: &SetupSettings,
8436        mut reboot_device: bool,
8437    ) -> fidl::client::QueryResponseFut<SetupSetResult, fidl::encoding::DefaultFuchsiaResourceDialect>
8438    {
8439        SetupProxyInterface::r#set(self, settings, reboot_device)
8440    }
8441}
8442
8443impl SetupProxyInterface for SetupProxy {
8444    type WatchResponseFut = fidl::client::QueryResponseFut<
8445        SetupSettings,
8446        fidl::encoding::DefaultFuchsiaResourceDialect,
8447    >;
8448    fn r#watch(&self) -> Self::WatchResponseFut {
8449        fn _decode(
8450            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
8451        ) -> Result<SetupSettings, fidl::Error> {
8452            let _response = fidl::client::decode_transaction_body::<
8453                SetupWatchResponse,
8454                fidl::encoding::DefaultFuchsiaResourceDialect,
8455                0xd3893c0e63c0a6e,
8456            >(_buf?)?;
8457            Ok(_response.settings)
8458        }
8459        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, SetupSettings>(
8460            (),
8461            0xd3893c0e63c0a6e,
8462            fidl::encoding::DynamicFlags::empty(),
8463            _decode,
8464        )
8465    }
8466
8467    type SetResponseFut = fidl::client::QueryResponseFut<
8468        SetupSetResult,
8469        fidl::encoding::DefaultFuchsiaResourceDialect,
8470    >;
8471    fn r#set(&self, mut settings: &SetupSettings, mut reboot_device: bool) -> Self::SetResponseFut {
8472        fn _decode(
8473            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
8474        ) -> Result<SetupSetResult, fidl::Error> {
8475            let _response = fidl::client::decode_transaction_body::<
8476                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
8477                fidl::encoding::DefaultFuchsiaResourceDialect,
8478                0x66a20be769388128,
8479            >(_buf?)?;
8480            Ok(_response.map(|x| x))
8481        }
8482        self.client.send_query_and_decode::<SetupSetRequest, SetupSetResult>(
8483            (settings, reboot_device),
8484            0x66a20be769388128,
8485            fidl::encoding::DynamicFlags::empty(),
8486            _decode,
8487        )
8488    }
8489}
8490
8491pub struct SetupEventStream {
8492    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
8493}
8494
8495impl std::marker::Unpin for SetupEventStream {}
8496
8497impl futures::stream::FusedStream for SetupEventStream {
8498    fn is_terminated(&self) -> bool {
8499        self.event_receiver.is_terminated()
8500    }
8501}
8502
8503impl futures::Stream for SetupEventStream {
8504    type Item = Result<SetupEvent, fidl::Error>;
8505
8506    fn poll_next(
8507        mut self: std::pin::Pin<&mut Self>,
8508        cx: &mut std::task::Context<'_>,
8509    ) -> std::task::Poll<Option<Self::Item>> {
8510        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
8511            &mut self.event_receiver,
8512            cx
8513        )?) {
8514            Some(buf) => std::task::Poll::Ready(Some(SetupEvent::decode(buf))),
8515            None => std::task::Poll::Ready(None),
8516        }
8517    }
8518}
8519
8520#[derive(Debug)]
8521pub enum SetupEvent {}
8522
8523impl SetupEvent {
8524    /// Decodes a message buffer as a [`SetupEvent`].
8525    fn decode(
8526        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
8527    ) -> Result<SetupEvent, fidl::Error> {
8528        let (bytes, _handles) = buf.split_mut();
8529        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
8530        debug_assert_eq!(tx_header.tx_id, 0);
8531        match tx_header.ordinal {
8532            _ => Err(fidl::Error::UnknownOrdinal {
8533                ordinal: tx_header.ordinal,
8534                protocol_name: <SetupMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
8535            }),
8536        }
8537    }
8538}
8539
8540/// A Stream of incoming requests for fuchsia.settings/Setup.
8541pub struct SetupRequestStream {
8542    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
8543    is_terminated: bool,
8544}
8545
8546impl std::marker::Unpin for SetupRequestStream {}
8547
8548impl futures::stream::FusedStream for SetupRequestStream {
8549    fn is_terminated(&self) -> bool {
8550        self.is_terminated
8551    }
8552}
8553
8554impl fidl::endpoints::RequestStream for SetupRequestStream {
8555    type Protocol = SetupMarker;
8556    type ControlHandle = SetupControlHandle;
8557
8558    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
8559        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
8560    }
8561
8562    fn control_handle(&self) -> Self::ControlHandle {
8563        SetupControlHandle { inner: self.inner.clone() }
8564    }
8565
8566    fn into_inner(
8567        self,
8568    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
8569    {
8570        (self.inner, self.is_terminated)
8571    }
8572
8573    fn from_inner(
8574        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
8575        is_terminated: bool,
8576    ) -> Self {
8577        Self { inner, is_terminated }
8578    }
8579}
8580
8581impl futures::Stream for SetupRequestStream {
8582    type Item = Result<SetupRequest, fidl::Error>;
8583
8584    fn poll_next(
8585        mut self: std::pin::Pin<&mut Self>,
8586        cx: &mut std::task::Context<'_>,
8587    ) -> std::task::Poll<Option<Self::Item>> {
8588        let this = &mut *self;
8589        if this.inner.check_shutdown(cx) {
8590            this.is_terminated = true;
8591            return std::task::Poll::Ready(None);
8592        }
8593        if this.is_terminated {
8594            panic!("polled SetupRequestStream after completion");
8595        }
8596        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
8597            |bytes, handles| {
8598                match this.inner.channel().read_etc(cx, bytes, handles) {
8599                    std::task::Poll::Ready(Ok(())) => {}
8600                    std::task::Poll::Pending => return std::task::Poll::Pending,
8601                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
8602                        this.is_terminated = true;
8603                        return std::task::Poll::Ready(None);
8604                    }
8605                    std::task::Poll::Ready(Err(e)) => {
8606                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
8607                            e.into(),
8608                        ))));
8609                    }
8610                }
8611
8612                // A message has been received from the channel
8613                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
8614
8615                std::task::Poll::Ready(Some(match header.ordinal {
8616                    0xd3893c0e63c0a6e => {
8617                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
8618                        let mut req = fidl::new_empty!(
8619                            fidl::encoding::EmptyPayload,
8620                            fidl::encoding::DefaultFuchsiaResourceDialect
8621                        );
8622                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
8623                        let control_handle = SetupControlHandle { inner: this.inner.clone() };
8624                        Ok(SetupRequest::Watch {
8625                            responder: SetupWatchResponder {
8626                                control_handle: std::mem::ManuallyDrop::new(control_handle),
8627                                tx_id: header.tx_id,
8628                            },
8629                        })
8630                    }
8631                    0x66a20be769388128 => {
8632                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
8633                        let mut req = fidl::new_empty!(
8634                            SetupSetRequest,
8635                            fidl::encoding::DefaultFuchsiaResourceDialect
8636                        );
8637                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<SetupSetRequest>(&header, _body_bytes, handles, &mut req)?;
8638                        let control_handle = SetupControlHandle { inner: this.inner.clone() };
8639                        Ok(SetupRequest::Set {
8640                            settings: req.settings,
8641                            reboot_device: req.reboot_device,
8642
8643                            responder: SetupSetResponder {
8644                                control_handle: std::mem::ManuallyDrop::new(control_handle),
8645                                tx_id: header.tx_id,
8646                            },
8647                        })
8648                    }
8649                    _ => Err(fidl::Error::UnknownOrdinal {
8650                        ordinal: header.ordinal,
8651                        protocol_name: <SetupMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
8652                    }),
8653                }))
8654            },
8655        )
8656    }
8657}
8658
8659/// Settings that influence the device's setup behavior.
8660///
8661/// Supported SettingsEpitaph enums:
8662/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
8663#[derive(Debug)]
8664pub enum SetupRequest {
8665    /// Gets the current [SetupSettings]. Returns immediately on first call;
8666    /// subsequent calls return when the value changes.
8667    ///
8668    /// If this call fails, it is considered a fatal error and the channel
8669    /// will be closed.
8670    Watch { responder: SetupWatchResponder },
8671    /// Changes the settings specified in [SetupSettings]. Any field not set in
8672    /// the table will not perform any system operation. An error will be
8673    /// returned if the provided settings is an invalid change (for example, if
8674    /// it is empty).
8675    Set { settings: SetupSettings, reboot_device: bool, responder: SetupSetResponder },
8676}
8677
8678impl SetupRequest {
8679    #[allow(irrefutable_let_patterns)]
8680    pub fn into_watch(self) -> Option<(SetupWatchResponder)> {
8681        if let SetupRequest::Watch { responder } = self { Some((responder)) } else { None }
8682    }
8683
8684    #[allow(irrefutable_let_patterns)]
8685    pub fn into_set(self) -> Option<(SetupSettings, bool, SetupSetResponder)> {
8686        if let SetupRequest::Set { settings, reboot_device, responder } = self {
8687            Some((settings, reboot_device, responder))
8688        } else {
8689            None
8690        }
8691    }
8692
8693    /// Name of the method defined in FIDL
8694    pub fn method_name(&self) -> &'static str {
8695        match *self {
8696            SetupRequest::Watch { .. } => "watch",
8697            SetupRequest::Set { .. } => "set",
8698        }
8699    }
8700}
8701
8702#[derive(Debug, Clone)]
8703pub struct SetupControlHandle {
8704    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
8705}
8706
8707impl fidl::endpoints::ControlHandle for SetupControlHandle {
8708    fn shutdown(&self) {
8709        self.inner.shutdown()
8710    }
8711    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
8712        self.inner.shutdown_with_epitaph(status)
8713    }
8714
8715    fn is_closed(&self) -> bool {
8716        self.inner.channel().is_closed()
8717    }
8718    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
8719        self.inner.channel().on_closed()
8720    }
8721
8722    #[cfg(target_os = "fuchsia")]
8723    fn signal_peer(
8724        &self,
8725        clear_mask: zx::Signals,
8726        set_mask: zx::Signals,
8727    ) -> Result<(), zx_status::Status> {
8728        use fidl::Peered;
8729        self.inner.channel().signal_peer(clear_mask, set_mask)
8730    }
8731}
8732
8733impl SetupControlHandle {}
8734
8735#[must_use = "FIDL methods require a response to be sent"]
8736#[derive(Debug)]
8737pub struct SetupWatchResponder {
8738    control_handle: std::mem::ManuallyDrop<SetupControlHandle>,
8739    tx_id: u32,
8740}
8741
8742/// Set the the channel to be shutdown (see [`SetupControlHandle::shutdown`])
8743/// if the responder is dropped without sending a response, so that the client
8744/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
8745impl std::ops::Drop for SetupWatchResponder {
8746    fn drop(&mut self) {
8747        self.control_handle.shutdown();
8748        // Safety: drops once, never accessed again
8749        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8750    }
8751}
8752
8753impl fidl::endpoints::Responder for SetupWatchResponder {
8754    type ControlHandle = SetupControlHandle;
8755
8756    fn control_handle(&self) -> &SetupControlHandle {
8757        &self.control_handle
8758    }
8759
8760    fn drop_without_shutdown(mut self) {
8761        // Safety: drops once, never accessed again due to mem::forget
8762        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8763        // Prevent Drop from running (which would shut down the channel)
8764        std::mem::forget(self);
8765    }
8766}
8767
8768impl SetupWatchResponder {
8769    /// Sends a response to the FIDL transaction.
8770    ///
8771    /// Sets the channel to shutdown if an error occurs.
8772    pub fn send(self, mut settings: &SetupSettings) -> Result<(), fidl::Error> {
8773        let _result = self.send_raw(settings);
8774        if _result.is_err() {
8775            self.control_handle.shutdown();
8776        }
8777        self.drop_without_shutdown();
8778        _result
8779    }
8780
8781    /// Similar to "send" but does not shutdown the channel if an error occurs.
8782    pub fn send_no_shutdown_on_err(self, mut settings: &SetupSettings) -> Result<(), fidl::Error> {
8783        let _result = self.send_raw(settings);
8784        self.drop_without_shutdown();
8785        _result
8786    }
8787
8788    fn send_raw(&self, mut settings: &SetupSettings) -> Result<(), fidl::Error> {
8789        self.control_handle.inner.send::<SetupWatchResponse>(
8790            (settings,),
8791            self.tx_id,
8792            0xd3893c0e63c0a6e,
8793            fidl::encoding::DynamicFlags::empty(),
8794        )
8795    }
8796}
8797
8798#[must_use = "FIDL methods require a response to be sent"]
8799#[derive(Debug)]
8800pub struct SetupSetResponder {
8801    control_handle: std::mem::ManuallyDrop<SetupControlHandle>,
8802    tx_id: u32,
8803}
8804
8805/// Set the the channel to be shutdown (see [`SetupControlHandle::shutdown`])
8806/// if the responder is dropped without sending a response, so that the client
8807/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
8808impl std::ops::Drop for SetupSetResponder {
8809    fn drop(&mut self) {
8810        self.control_handle.shutdown();
8811        // Safety: drops once, never accessed again
8812        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8813    }
8814}
8815
8816impl fidl::endpoints::Responder for SetupSetResponder {
8817    type ControlHandle = SetupControlHandle;
8818
8819    fn control_handle(&self) -> &SetupControlHandle {
8820        &self.control_handle
8821    }
8822
8823    fn drop_without_shutdown(mut self) {
8824        // Safety: drops once, never accessed again due to mem::forget
8825        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
8826        // Prevent Drop from running (which would shut down the channel)
8827        std::mem::forget(self);
8828    }
8829}
8830
8831impl SetupSetResponder {
8832    /// Sends a response to the FIDL transaction.
8833    ///
8834    /// Sets the channel to shutdown if an error occurs.
8835    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
8836        let _result = self.send_raw(result);
8837        if _result.is_err() {
8838            self.control_handle.shutdown();
8839        }
8840        self.drop_without_shutdown();
8841        _result
8842    }
8843
8844    /// Similar to "send" but does not shutdown the channel if an error occurs.
8845    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
8846        let _result = self.send_raw(result);
8847        self.drop_without_shutdown();
8848        _result
8849    }
8850
8851    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
8852        self.control_handle
8853            .inner
8854            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
8855                result,
8856                self.tx_id,
8857                0x66a20be769388128,
8858                fidl::encoding::DynamicFlags::empty(),
8859            )
8860    }
8861}
8862
8863mod internal {
8864    use super::*;
8865}