Skip to main content

fidl_fuchsia_bluetooth_affordances/
fidl_fuchsia_bluetooth_affordances.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_bluetooth_affordances_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Default, PartialEq)]
15pub struct CentralControllerStartScanRequest {
16    /// Required. The listener to receive scan results.
17    pub listener: Option<fidl::endpoints::ClientEnd<ScanResultListenerMarker>>,
18    #[doc(hidden)]
19    pub __source_breaking: fidl::marker::SourceBreaking,
20}
21
22impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
23    for CentralControllerStartScanRequest
24{
25}
26
27#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
28pub struct CentralControllerMarker;
29
30impl fidl::endpoints::ProtocolMarker for CentralControllerMarker {
31    type Proxy = CentralControllerProxy;
32    type RequestStream = CentralControllerRequestStream;
33    #[cfg(target_os = "fuchsia")]
34    type SynchronousProxy = CentralControllerSynchronousProxy;
35
36    const DEBUG_NAME: &'static str = "fuchsia.bluetooth.affordances.CentralController";
37}
38impl fidl::endpoints::DiscoverableProtocolMarker for CentralControllerMarker {}
39pub type CentralControllerStartScanResult = Result<(), Error>;
40pub type CentralControllerConnectPeripheralResult = Result<(), Error>;
41
42pub trait CentralControllerProxyInterface: Send + Sync {
43    type StartScanResponseFut: std::future::Future<Output = Result<CentralControllerStartScanResult, fidl::Error>>
44        + Send;
45    fn r#start_scan(
46        &self,
47        payload: CentralControllerStartScanRequest,
48    ) -> Self::StartScanResponseFut;
49    type ConnectPeripheralResponseFut: std::future::Future<Output = Result<CentralControllerConnectPeripheralResult, fidl::Error>>
50        + Send;
51    fn r#connect_peripheral(&self, payload: &PeerSelector) -> Self::ConnectPeripheralResponseFut;
52}
53#[derive(Debug)]
54#[cfg(target_os = "fuchsia")]
55pub struct CentralControllerSynchronousProxy {
56    client: fidl::client::sync::Client,
57}
58
59#[cfg(target_os = "fuchsia")]
60impl fidl::endpoints::SynchronousProxy for CentralControllerSynchronousProxy {
61    type Proxy = CentralControllerProxy;
62    type Protocol = CentralControllerMarker;
63
64    fn from_channel(inner: fidl::Channel) -> Self {
65        Self::new(inner)
66    }
67
68    fn into_channel(self) -> fidl::Channel {
69        self.client.into_channel()
70    }
71
72    fn as_channel(&self) -> &fidl::Channel {
73        self.client.as_channel()
74    }
75}
76
77#[cfg(target_os = "fuchsia")]
78impl CentralControllerSynchronousProxy {
79    pub fn new(channel: fidl::Channel) -> Self {
80        Self { client: fidl::client::sync::Client::new(channel) }
81    }
82
83    pub fn into_channel(self) -> fidl::Channel {
84        self.client.into_channel()
85    }
86
87    /// Waits until an event arrives and returns it. It is safe for other
88    /// threads to make concurrent requests while waiting for an event.
89    pub fn wait_for_event(
90        &self,
91        deadline: zx::MonotonicInstant,
92    ) -> Result<CentralControllerEvent, fidl::Error> {
93        CentralControllerEvent::decode(
94            self.client.wait_for_event::<CentralControllerMarker>(deadline)?,
95        )
96    }
97
98    /// Start an LE scan. Results will be streamed to the provided listener.
99    /// Returns immediately once the scan is initiated.
100    ///
101    /// * error Returns `MISSING_PARAMETERS` if the listener is missing.
102    /// * error Returns `INTERNAL` if the operation failed (check logs).
103    pub fn r#start_scan(
104        &self,
105        mut payload: CentralControllerStartScanRequest,
106        ___deadline: zx::MonotonicInstant,
107    ) -> Result<CentralControllerStartScanResult, fidl::Error> {
108        let _response = self.client.send_query::<
109            CentralControllerStartScanRequest,
110            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
111            CentralControllerMarker,
112        >(
113            &mut payload,
114            0x7f8e8fdaa5b359ea,
115            fidl::encoding::DynamicFlags::FLEXIBLE,
116            ___deadline,
117        )?
118        .into_result::<CentralControllerMarker>("start_scan")?;
119        Ok(_response.map(|x| x))
120    }
121
122    /// Connect to an LE peer.
123    ///
124    /// * error Returns `INTERNAL` if the operation failed (check logs).
125    pub fn r#connect_peripheral(
126        &self,
127        mut payload: &PeerSelector,
128        ___deadline: zx::MonotonicInstant,
129    ) -> Result<CentralControllerConnectPeripheralResult, fidl::Error> {
130        let _response = self.client.send_query::<
131            PeerSelector,
132            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
133            CentralControllerMarker,
134        >(
135            payload,
136            0x4cf45727cca182cd,
137            fidl::encoding::DynamicFlags::FLEXIBLE,
138            ___deadline,
139        )?
140        .into_result::<CentralControllerMarker>("connect_peripheral")?;
141        Ok(_response.map(|x| x))
142    }
143}
144
145#[cfg(target_os = "fuchsia")]
146impl From<CentralControllerSynchronousProxy> for zx::NullableHandle {
147    fn from(value: CentralControllerSynchronousProxy) -> Self {
148        value.into_channel().into()
149    }
150}
151
152#[cfg(target_os = "fuchsia")]
153impl From<fidl::Channel> for CentralControllerSynchronousProxy {
154    fn from(value: fidl::Channel) -> Self {
155        Self::new(value)
156    }
157}
158
159#[cfg(target_os = "fuchsia")]
160impl fidl::endpoints::FromClient for CentralControllerSynchronousProxy {
161    type Protocol = CentralControllerMarker;
162
163    fn from_client(value: fidl::endpoints::ClientEnd<CentralControllerMarker>) -> Self {
164        Self::new(value.into_channel())
165    }
166}
167
168#[derive(Debug, Clone)]
169pub struct CentralControllerProxy {
170    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
171}
172
173impl fidl::endpoints::Proxy for CentralControllerProxy {
174    type Protocol = CentralControllerMarker;
175
176    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
177        Self::new(inner)
178    }
179
180    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
181        self.client.into_channel().map_err(|client| Self { client })
182    }
183
184    fn as_channel(&self) -> &::fidl::AsyncChannel {
185        self.client.as_channel()
186    }
187}
188
189impl CentralControllerProxy {
190    /// Create a new Proxy for fuchsia.bluetooth.affordances/CentralController.
191    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
192        let protocol_name =
193            <CentralControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
194        Self { client: fidl::client::Client::new(channel, protocol_name) }
195    }
196
197    /// Get a Stream of events from the remote end of the protocol.
198    ///
199    /// # Panics
200    ///
201    /// Panics if the event stream was already taken.
202    pub fn take_event_stream(&self) -> CentralControllerEventStream {
203        CentralControllerEventStream { event_receiver: self.client.take_event_receiver() }
204    }
205
206    /// Start an LE scan. Results will be streamed to the provided listener.
207    /// Returns immediately once the scan is initiated.
208    ///
209    /// * error Returns `MISSING_PARAMETERS` if the listener is missing.
210    /// * error Returns `INTERNAL` if the operation failed (check logs).
211    pub fn r#start_scan(
212        &self,
213        mut payload: CentralControllerStartScanRequest,
214    ) -> fidl::client::QueryResponseFut<
215        CentralControllerStartScanResult,
216        fidl::encoding::DefaultFuchsiaResourceDialect,
217    > {
218        CentralControllerProxyInterface::r#start_scan(self, payload)
219    }
220
221    /// Connect to an LE peer.
222    ///
223    /// * error Returns `INTERNAL` if the operation failed (check logs).
224    pub fn r#connect_peripheral(
225        &self,
226        mut payload: &PeerSelector,
227    ) -> fidl::client::QueryResponseFut<
228        CentralControllerConnectPeripheralResult,
229        fidl::encoding::DefaultFuchsiaResourceDialect,
230    > {
231        CentralControllerProxyInterface::r#connect_peripheral(self, payload)
232    }
233}
234
235impl CentralControllerProxyInterface for CentralControllerProxy {
236    type StartScanResponseFut = fidl::client::QueryResponseFut<
237        CentralControllerStartScanResult,
238        fidl::encoding::DefaultFuchsiaResourceDialect,
239    >;
240    fn r#start_scan(
241        &self,
242        mut payload: CentralControllerStartScanRequest,
243    ) -> Self::StartScanResponseFut {
244        fn _decode(
245            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
246        ) -> Result<CentralControllerStartScanResult, fidl::Error> {
247            let _response = fidl::client::decode_transaction_body::<
248                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
249                fidl::encoding::DefaultFuchsiaResourceDialect,
250                0x7f8e8fdaa5b359ea,
251            >(_buf?)?
252            .into_result::<CentralControllerMarker>("start_scan")?;
253            Ok(_response.map(|x| x))
254        }
255        self.client.send_query_and_decode::<
256            CentralControllerStartScanRequest,
257            CentralControllerStartScanResult,
258        >(
259            &mut payload,
260            0x7f8e8fdaa5b359ea,
261            fidl::encoding::DynamicFlags::FLEXIBLE,
262            _decode,
263        )
264    }
265
266    type ConnectPeripheralResponseFut = fidl::client::QueryResponseFut<
267        CentralControllerConnectPeripheralResult,
268        fidl::encoding::DefaultFuchsiaResourceDialect,
269    >;
270    fn r#connect_peripheral(
271        &self,
272        mut payload: &PeerSelector,
273    ) -> Self::ConnectPeripheralResponseFut {
274        fn _decode(
275            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
276        ) -> Result<CentralControllerConnectPeripheralResult, fidl::Error> {
277            let _response = fidl::client::decode_transaction_body::<
278                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
279                fidl::encoding::DefaultFuchsiaResourceDialect,
280                0x4cf45727cca182cd,
281            >(_buf?)?
282            .into_result::<CentralControllerMarker>("connect_peripheral")?;
283            Ok(_response.map(|x| x))
284        }
285        self.client.send_query_and_decode::<PeerSelector, CentralControllerConnectPeripheralResult>(
286            payload,
287            0x4cf45727cca182cd,
288            fidl::encoding::DynamicFlags::FLEXIBLE,
289            _decode,
290        )
291    }
292}
293
294pub struct CentralControllerEventStream {
295    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
296}
297
298impl std::marker::Unpin for CentralControllerEventStream {}
299
300impl futures::stream::FusedStream for CentralControllerEventStream {
301    fn is_terminated(&self) -> bool {
302        self.event_receiver.is_terminated()
303    }
304}
305
306impl futures::Stream for CentralControllerEventStream {
307    type Item = Result<CentralControllerEvent, fidl::Error>;
308
309    fn poll_next(
310        mut self: std::pin::Pin<&mut Self>,
311        cx: &mut std::task::Context<'_>,
312    ) -> std::task::Poll<Option<Self::Item>> {
313        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
314            &mut self.event_receiver,
315            cx
316        )?) {
317            Some(buf) => std::task::Poll::Ready(Some(CentralControllerEvent::decode(buf))),
318            None => std::task::Poll::Ready(None),
319        }
320    }
321}
322
323#[derive(Debug)]
324pub enum CentralControllerEvent {
325    #[non_exhaustive]
326    _UnknownEvent {
327        /// Ordinal of the event that was sent.
328        ordinal: u64,
329    },
330}
331
332impl CentralControllerEvent {
333    /// Decodes a message buffer as a [`CentralControllerEvent`].
334    fn decode(
335        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
336    ) -> Result<CentralControllerEvent, fidl::Error> {
337        let (bytes, _handles) = buf.split_mut();
338        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
339        debug_assert_eq!(tx_header.tx_id, 0);
340        match tx_header.ordinal {
341            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
342                Ok(CentralControllerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
343            }
344            _ => Err(fidl::Error::UnknownOrdinal {
345                ordinal: tx_header.ordinal,
346                protocol_name:
347                    <CentralControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
348            }),
349        }
350    }
351}
352
353/// A Stream of incoming requests for fuchsia.bluetooth.affordances/CentralController.
354pub struct CentralControllerRequestStream {
355    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
356    is_terminated: bool,
357}
358
359impl std::marker::Unpin for CentralControllerRequestStream {}
360
361impl futures::stream::FusedStream for CentralControllerRequestStream {
362    fn is_terminated(&self) -> bool {
363        self.is_terminated
364    }
365}
366
367impl fidl::endpoints::RequestStream for CentralControllerRequestStream {
368    type Protocol = CentralControllerMarker;
369    type ControlHandle = CentralControllerControlHandle;
370
371    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
372        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
373    }
374
375    fn control_handle(&self) -> Self::ControlHandle {
376        CentralControllerControlHandle { inner: self.inner.clone() }
377    }
378
379    fn into_inner(
380        self,
381    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
382    {
383        (self.inner, self.is_terminated)
384    }
385
386    fn from_inner(
387        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
388        is_terminated: bool,
389    ) -> Self {
390        Self { inner, is_terminated }
391    }
392}
393
394impl futures::Stream for CentralControllerRequestStream {
395    type Item = Result<CentralControllerRequest, fidl::Error>;
396
397    fn poll_next(
398        mut self: std::pin::Pin<&mut Self>,
399        cx: &mut std::task::Context<'_>,
400    ) -> std::task::Poll<Option<Self::Item>> {
401        let this = &mut *self;
402        if this.inner.check_shutdown(cx) {
403            this.is_terminated = true;
404            return std::task::Poll::Ready(None);
405        }
406        if this.is_terminated {
407            panic!("polled CentralControllerRequestStream after completion");
408        }
409        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
410            |bytes, handles| {
411                match this.inner.channel().read_etc(cx, bytes, handles) {
412                    std::task::Poll::Ready(Ok(())) => {}
413                    std::task::Poll::Pending => return std::task::Poll::Pending,
414                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
415                        this.is_terminated = true;
416                        return std::task::Poll::Ready(None);
417                    }
418                    std::task::Poll::Ready(Err(e)) => {
419                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
420                            e.into(),
421                        ))));
422                    }
423                }
424
425                // A message has been received from the channel
426                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
427
428                std::task::Poll::Ready(Some(match header.ordinal {
429                    0x7f8e8fdaa5b359ea => {
430                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
431                        let mut req = fidl::new_empty!(
432                            CentralControllerStartScanRequest,
433                            fidl::encoding::DefaultFuchsiaResourceDialect
434                        );
435                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<CentralControllerStartScanRequest>(&header, _body_bytes, handles, &mut req)?;
436                        let control_handle =
437                            CentralControllerControlHandle { inner: this.inner.clone() };
438                        Ok(CentralControllerRequest::StartScan {
439                            payload: req,
440                            responder: CentralControllerStartScanResponder {
441                                control_handle: std::mem::ManuallyDrop::new(control_handle),
442                                tx_id: header.tx_id,
443                            },
444                        })
445                    }
446                    0x4cf45727cca182cd => {
447                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
448                        let mut req = fidl::new_empty!(
449                            PeerSelector,
450                            fidl::encoding::DefaultFuchsiaResourceDialect
451                        );
452                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PeerSelector>(&header, _body_bytes, handles, &mut req)?;
453                        let control_handle =
454                            CentralControllerControlHandle { inner: this.inner.clone() };
455                        Ok(CentralControllerRequest::ConnectPeripheral {
456                            payload: req,
457                            responder: CentralControllerConnectPeripheralResponder {
458                                control_handle: std::mem::ManuallyDrop::new(control_handle),
459                                tx_id: header.tx_id,
460                            },
461                        })
462                    }
463                    _ if header.tx_id == 0
464                        && header
465                            .dynamic_flags()
466                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
467                    {
468                        Ok(CentralControllerRequest::_UnknownMethod {
469                            ordinal: header.ordinal,
470                            control_handle: CentralControllerControlHandle {
471                                inner: this.inner.clone(),
472                            },
473                            method_type: fidl::MethodType::OneWay,
474                        })
475                    }
476                    _ if header
477                        .dynamic_flags()
478                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
479                    {
480                        this.inner.send_framework_err(
481                            fidl::encoding::FrameworkErr::UnknownMethod,
482                            header.tx_id,
483                            header.ordinal,
484                            header.dynamic_flags(),
485                            (bytes, handles),
486                        )?;
487                        Ok(CentralControllerRequest::_UnknownMethod {
488                            ordinal: header.ordinal,
489                            control_handle: CentralControllerControlHandle {
490                                inner: this.inner.clone(),
491                            },
492                            method_type: fidl::MethodType::TwoWay,
493                        })
494                    }
495                    _ => Err(fidl::Error::UnknownOrdinal {
496                        ordinal: header.ordinal,
497                        protocol_name:
498                            <CentralControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
499                    }),
500                }))
501            },
502        )
503    }
504}
505
506#[derive(Debug)]
507pub enum CentralControllerRequest {
508    /// Start an LE scan. Results will be streamed to the provided listener.
509    /// Returns immediately once the scan is initiated.
510    ///
511    /// * error Returns `MISSING_PARAMETERS` if the listener is missing.
512    /// * error Returns `INTERNAL` if the operation failed (check logs).
513    StartScan {
514        payload: CentralControllerStartScanRequest,
515        responder: CentralControllerStartScanResponder,
516    },
517    /// Connect to an LE peer.
518    ///
519    /// * error Returns `INTERNAL` if the operation failed (check logs).
520    ConnectPeripheral {
521        payload: PeerSelector,
522        responder: CentralControllerConnectPeripheralResponder,
523    },
524    /// An interaction was received which does not match any known method.
525    #[non_exhaustive]
526    _UnknownMethod {
527        /// Ordinal of the method that was called.
528        ordinal: u64,
529        control_handle: CentralControllerControlHandle,
530        method_type: fidl::MethodType,
531    },
532}
533
534impl CentralControllerRequest {
535    #[allow(irrefutable_let_patterns)]
536    pub fn into_start_scan(
537        self,
538    ) -> Option<(CentralControllerStartScanRequest, CentralControllerStartScanResponder)> {
539        if let CentralControllerRequest::StartScan { payload, responder } = self {
540            Some((payload, responder))
541        } else {
542            None
543        }
544    }
545
546    #[allow(irrefutable_let_patterns)]
547    pub fn into_connect_peripheral(
548        self,
549    ) -> Option<(PeerSelector, CentralControllerConnectPeripheralResponder)> {
550        if let CentralControllerRequest::ConnectPeripheral { payload, responder } = self {
551            Some((payload, responder))
552        } else {
553            None
554        }
555    }
556
557    /// Name of the method defined in FIDL
558    pub fn method_name(&self) -> &'static str {
559        match *self {
560            CentralControllerRequest::StartScan { .. } => "start_scan",
561            CentralControllerRequest::ConnectPeripheral { .. } => "connect_peripheral",
562            CentralControllerRequest::_UnknownMethod {
563                method_type: fidl::MethodType::OneWay,
564                ..
565            } => "unknown one-way method",
566            CentralControllerRequest::_UnknownMethod {
567                method_type: fidl::MethodType::TwoWay,
568                ..
569            } => "unknown two-way method",
570        }
571    }
572}
573
574#[derive(Debug, Clone)]
575pub struct CentralControllerControlHandle {
576    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
577}
578
579impl CentralControllerControlHandle {
580    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
581        self.inner.shutdown_with_epitaph(status.into())
582    }
583}
584
585impl fidl::endpoints::ControlHandle for CentralControllerControlHandle {
586    fn shutdown(&self) {
587        self.inner.shutdown()
588    }
589
590    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
591        self.inner.shutdown_with_epitaph(status)
592    }
593
594    fn is_closed(&self) -> bool {
595        self.inner.channel().is_closed()
596    }
597    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
598        self.inner.channel().on_closed()
599    }
600
601    #[cfg(target_os = "fuchsia")]
602    fn signal_peer(
603        &self,
604        clear_mask: zx::Signals,
605        set_mask: zx::Signals,
606    ) -> Result<(), zx_status::Status> {
607        use fidl::Peered;
608        self.inner.channel().signal_peer(clear_mask, set_mask)
609    }
610}
611
612impl CentralControllerControlHandle {}
613
614#[must_use = "FIDL methods require a response to be sent"]
615#[derive(Debug)]
616pub struct CentralControllerStartScanResponder {
617    control_handle: std::mem::ManuallyDrop<CentralControllerControlHandle>,
618    tx_id: u32,
619}
620
621/// Set the the channel to be shutdown (see [`CentralControllerControlHandle::shutdown`])
622/// if the responder is dropped without sending a response, so that the client
623/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
624impl std::ops::Drop for CentralControllerStartScanResponder {
625    fn drop(&mut self) {
626        self.control_handle.shutdown();
627        // Safety: drops once, never accessed again
628        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
629    }
630}
631
632impl fidl::endpoints::Responder for CentralControllerStartScanResponder {
633    type ControlHandle = CentralControllerControlHandle;
634
635    fn control_handle(&self) -> &CentralControllerControlHandle {
636        &self.control_handle
637    }
638
639    fn drop_without_shutdown(mut self) {
640        // Safety: drops once, never accessed again due to mem::forget
641        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
642        // Prevent Drop from running (which would shut down the channel)
643        std::mem::forget(self);
644    }
645}
646
647impl CentralControllerStartScanResponder {
648    /// Sends a response to the FIDL transaction.
649    ///
650    /// Sets the channel to shutdown if an error occurs.
651    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
652        let _result = self.send_raw(result);
653        if _result.is_err() {
654            self.control_handle.shutdown();
655        }
656        self.drop_without_shutdown();
657        _result
658    }
659
660    /// Similar to "send" but does not shutdown the channel if an error occurs.
661    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
662        let _result = self.send_raw(result);
663        self.drop_without_shutdown();
664        _result
665    }
666
667    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
668        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
669            fidl::encoding::EmptyStruct,
670            Error,
671        >>(
672            fidl::encoding::FlexibleResult::new(result),
673            self.tx_id,
674            0x7f8e8fdaa5b359ea,
675            fidl::encoding::DynamicFlags::FLEXIBLE,
676        )
677    }
678}
679
680#[must_use = "FIDL methods require a response to be sent"]
681#[derive(Debug)]
682pub struct CentralControllerConnectPeripheralResponder {
683    control_handle: std::mem::ManuallyDrop<CentralControllerControlHandle>,
684    tx_id: u32,
685}
686
687/// Set the the channel to be shutdown (see [`CentralControllerControlHandle::shutdown`])
688/// if the responder is dropped without sending a response, so that the client
689/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
690impl std::ops::Drop for CentralControllerConnectPeripheralResponder {
691    fn drop(&mut self) {
692        self.control_handle.shutdown();
693        // Safety: drops once, never accessed again
694        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
695    }
696}
697
698impl fidl::endpoints::Responder for CentralControllerConnectPeripheralResponder {
699    type ControlHandle = CentralControllerControlHandle;
700
701    fn control_handle(&self) -> &CentralControllerControlHandle {
702        &self.control_handle
703    }
704
705    fn drop_without_shutdown(mut self) {
706        // Safety: drops once, never accessed again due to mem::forget
707        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
708        // Prevent Drop from running (which would shut down the channel)
709        std::mem::forget(self);
710    }
711}
712
713impl CentralControllerConnectPeripheralResponder {
714    /// Sends a response to the FIDL transaction.
715    ///
716    /// Sets the channel to shutdown if an error occurs.
717    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
718        let _result = self.send_raw(result);
719        if _result.is_err() {
720            self.control_handle.shutdown();
721        }
722        self.drop_without_shutdown();
723        _result
724    }
725
726    /// Similar to "send" but does not shutdown the channel if an error occurs.
727    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
728        let _result = self.send_raw(result);
729        self.drop_without_shutdown();
730        _result
731    }
732
733    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
734        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
735            fidl::encoding::EmptyStruct,
736            Error,
737        >>(
738            fidl::encoding::FlexibleResult::new(result),
739            self.tx_id,
740            0x4cf45727cca182cd,
741            fidl::encoding::DynamicFlags::FLEXIBLE,
742        )
743    }
744}
745
746#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
747pub struct GattClientControllerMarker;
748
749impl fidl::endpoints::ProtocolMarker for GattClientControllerMarker {
750    type Proxy = GattClientControllerProxy;
751    type RequestStream = GattClientControllerRequestStream;
752    #[cfg(target_os = "fuchsia")]
753    type SynchronousProxy = GattClientControllerSynchronousProxy;
754
755    const DEBUG_NAME: &'static str = "fuchsia.bluetooth.affordances.GattClientController";
756}
757impl fidl::endpoints::DiscoverableProtocolMarker for GattClientControllerMarker {}
758pub type GattClientControllerDiscoverServicesResult =
759    Result<GattClientControllerDiscoverServicesResponse, Error>;
760
761pub trait GattClientControllerProxyInterface: Send + Sync {
762    type DiscoverServicesResponseFut: std::future::Future<
763            Output = Result<GattClientControllerDiscoverServicesResult, fidl::Error>,
764        > + Send;
765    fn r#discover_services(&self) -> Self::DiscoverServicesResponseFut;
766}
767#[derive(Debug)]
768#[cfg(target_os = "fuchsia")]
769pub struct GattClientControllerSynchronousProxy {
770    client: fidl::client::sync::Client,
771}
772
773#[cfg(target_os = "fuchsia")]
774impl fidl::endpoints::SynchronousProxy for GattClientControllerSynchronousProxy {
775    type Proxy = GattClientControllerProxy;
776    type Protocol = GattClientControllerMarker;
777
778    fn from_channel(inner: fidl::Channel) -> Self {
779        Self::new(inner)
780    }
781
782    fn into_channel(self) -> fidl::Channel {
783        self.client.into_channel()
784    }
785
786    fn as_channel(&self) -> &fidl::Channel {
787        self.client.as_channel()
788    }
789}
790
791#[cfg(target_os = "fuchsia")]
792impl GattClientControllerSynchronousProxy {
793    pub fn new(channel: fidl::Channel) -> Self {
794        Self { client: fidl::client::sync::Client::new(channel) }
795    }
796
797    pub fn into_channel(self) -> fidl::Channel {
798        self.client.into_channel()
799    }
800
801    /// Waits until an event arrives and returns it. It is safe for other
802    /// threads to make concurrent requests while waiting for an event.
803    pub fn wait_for_event(
804        &self,
805        deadline: zx::MonotonicInstant,
806    ) -> Result<GattClientControllerEvent, fidl::Error> {
807        GattClientControllerEvent::decode(
808            self.client.wait_for_event::<GattClientControllerMarker>(deadline)?,
809        )
810    }
811
812    /// Discover GATT services on a peer connected by [`CentralController.ConnectPeripheral`].
813    ///
814    /// * error Returns `INTERNAL` if the operation failed (check logs).
815    pub fn r#discover_services(
816        &self,
817        ___deadline: zx::MonotonicInstant,
818    ) -> Result<GattClientControllerDiscoverServicesResult, fidl::Error> {
819        let _response =
820            self.client
821                .send_query::<fidl::encoding::EmptyPayload, fidl::encoding::FlexibleResultType<
822                    GattClientControllerDiscoverServicesResponse,
823                    Error,
824                >, GattClientControllerMarker>(
825                    (),
826                    0x2451643d00753f94,
827                    fidl::encoding::DynamicFlags::FLEXIBLE,
828                    ___deadline,
829                )?
830                .into_result::<GattClientControllerMarker>("discover_services")?;
831        Ok(_response.map(|x| x))
832    }
833}
834
835#[cfg(target_os = "fuchsia")]
836impl From<GattClientControllerSynchronousProxy> for zx::NullableHandle {
837    fn from(value: GattClientControllerSynchronousProxy) -> Self {
838        value.into_channel().into()
839    }
840}
841
842#[cfg(target_os = "fuchsia")]
843impl From<fidl::Channel> for GattClientControllerSynchronousProxy {
844    fn from(value: fidl::Channel) -> Self {
845        Self::new(value)
846    }
847}
848
849#[cfg(target_os = "fuchsia")]
850impl fidl::endpoints::FromClient for GattClientControllerSynchronousProxy {
851    type Protocol = GattClientControllerMarker;
852
853    fn from_client(value: fidl::endpoints::ClientEnd<GattClientControllerMarker>) -> Self {
854        Self::new(value.into_channel())
855    }
856}
857
858#[derive(Debug, Clone)]
859pub struct GattClientControllerProxy {
860    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
861}
862
863impl fidl::endpoints::Proxy for GattClientControllerProxy {
864    type Protocol = GattClientControllerMarker;
865
866    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
867        Self::new(inner)
868    }
869
870    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
871        self.client.into_channel().map_err(|client| Self { client })
872    }
873
874    fn as_channel(&self) -> &::fidl::AsyncChannel {
875        self.client.as_channel()
876    }
877}
878
879impl GattClientControllerProxy {
880    /// Create a new Proxy for fuchsia.bluetooth.affordances/GattClientController.
881    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
882        let protocol_name =
883            <GattClientControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
884        Self { client: fidl::client::Client::new(channel, protocol_name) }
885    }
886
887    /// Get a Stream of events from the remote end of the protocol.
888    ///
889    /// # Panics
890    ///
891    /// Panics if the event stream was already taken.
892    pub fn take_event_stream(&self) -> GattClientControllerEventStream {
893        GattClientControllerEventStream { event_receiver: self.client.take_event_receiver() }
894    }
895
896    /// Discover GATT services on a peer connected by [`CentralController.ConnectPeripheral`].
897    ///
898    /// * error Returns `INTERNAL` if the operation failed (check logs).
899    pub fn r#discover_services(
900        &self,
901    ) -> fidl::client::QueryResponseFut<
902        GattClientControllerDiscoverServicesResult,
903        fidl::encoding::DefaultFuchsiaResourceDialect,
904    > {
905        GattClientControllerProxyInterface::r#discover_services(self)
906    }
907}
908
909impl GattClientControllerProxyInterface for GattClientControllerProxy {
910    type DiscoverServicesResponseFut = fidl::client::QueryResponseFut<
911        GattClientControllerDiscoverServicesResult,
912        fidl::encoding::DefaultFuchsiaResourceDialect,
913    >;
914    fn r#discover_services(&self) -> Self::DiscoverServicesResponseFut {
915        fn _decode(
916            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
917        ) -> Result<GattClientControllerDiscoverServicesResult, fidl::Error> {
918            let _response = fidl::client::decode_transaction_body::<
919                fidl::encoding::FlexibleResultType<
920                    GattClientControllerDiscoverServicesResponse,
921                    Error,
922                >,
923                fidl::encoding::DefaultFuchsiaResourceDialect,
924                0x2451643d00753f94,
925            >(_buf?)?
926            .into_result::<GattClientControllerMarker>("discover_services")?;
927            Ok(_response.map(|x| x))
928        }
929        self.client.send_query_and_decode::<
930            fidl::encoding::EmptyPayload,
931            GattClientControllerDiscoverServicesResult,
932        >(
933            (),
934            0x2451643d00753f94,
935            fidl::encoding::DynamicFlags::FLEXIBLE,
936            _decode,
937        )
938    }
939}
940
941pub struct GattClientControllerEventStream {
942    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
943}
944
945impl std::marker::Unpin for GattClientControllerEventStream {}
946
947impl futures::stream::FusedStream for GattClientControllerEventStream {
948    fn is_terminated(&self) -> bool {
949        self.event_receiver.is_terminated()
950    }
951}
952
953impl futures::Stream for GattClientControllerEventStream {
954    type Item = Result<GattClientControllerEvent, fidl::Error>;
955
956    fn poll_next(
957        mut self: std::pin::Pin<&mut Self>,
958        cx: &mut std::task::Context<'_>,
959    ) -> std::task::Poll<Option<Self::Item>> {
960        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
961            &mut self.event_receiver,
962            cx
963        )?) {
964            Some(buf) => std::task::Poll::Ready(Some(GattClientControllerEvent::decode(buf))),
965            None => std::task::Poll::Ready(None),
966        }
967    }
968}
969
970#[derive(Debug)]
971pub enum GattClientControllerEvent {
972    #[non_exhaustive]
973    _UnknownEvent {
974        /// Ordinal of the event that was sent.
975        ordinal: u64,
976    },
977}
978
979impl GattClientControllerEvent {
980    /// Decodes a message buffer as a [`GattClientControllerEvent`].
981    fn decode(
982        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
983    ) -> Result<GattClientControllerEvent, fidl::Error> {
984        let (bytes, _handles) = buf.split_mut();
985        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
986        debug_assert_eq!(tx_header.tx_id, 0);
987        match tx_header.ordinal {
988            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
989                Ok(GattClientControllerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
990            }
991            _ => Err(fidl::Error::UnknownOrdinal {
992                ordinal: tx_header.ordinal,
993                protocol_name:
994                    <GattClientControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
995            }),
996        }
997    }
998}
999
1000/// A Stream of incoming requests for fuchsia.bluetooth.affordances/GattClientController.
1001pub struct GattClientControllerRequestStream {
1002    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1003    is_terminated: bool,
1004}
1005
1006impl std::marker::Unpin for GattClientControllerRequestStream {}
1007
1008impl futures::stream::FusedStream for GattClientControllerRequestStream {
1009    fn is_terminated(&self) -> bool {
1010        self.is_terminated
1011    }
1012}
1013
1014impl fidl::endpoints::RequestStream for GattClientControllerRequestStream {
1015    type Protocol = GattClientControllerMarker;
1016    type ControlHandle = GattClientControllerControlHandle;
1017
1018    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1019        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1020    }
1021
1022    fn control_handle(&self) -> Self::ControlHandle {
1023        GattClientControllerControlHandle { inner: self.inner.clone() }
1024    }
1025
1026    fn into_inner(
1027        self,
1028    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1029    {
1030        (self.inner, self.is_terminated)
1031    }
1032
1033    fn from_inner(
1034        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1035        is_terminated: bool,
1036    ) -> Self {
1037        Self { inner, is_terminated }
1038    }
1039}
1040
1041impl futures::Stream for GattClientControllerRequestStream {
1042    type Item = Result<GattClientControllerRequest, fidl::Error>;
1043
1044    fn poll_next(
1045        mut self: std::pin::Pin<&mut Self>,
1046        cx: &mut std::task::Context<'_>,
1047    ) -> std::task::Poll<Option<Self::Item>> {
1048        let this = &mut *self;
1049        if this.inner.check_shutdown(cx) {
1050            this.is_terminated = true;
1051            return std::task::Poll::Ready(None);
1052        }
1053        if this.is_terminated {
1054            panic!("polled GattClientControllerRequestStream after completion");
1055        }
1056        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1057            |bytes, handles| {
1058                match this.inner.channel().read_etc(cx, bytes, handles) {
1059                    std::task::Poll::Ready(Ok(())) => {}
1060                    std::task::Poll::Pending => return std::task::Poll::Pending,
1061                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1062                        this.is_terminated = true;
1063                        return std::task::Poll::Ready(None);
1064                    }
1065                    std::task::Poll::Ready(Err(e)) => {
1066                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1067                            e.into(),
1068                        ))));
1069                    }
1070                }
1071
1072                // A message has been received from the channel
1073                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1074
1075                std::task::Poll::Ready(Some(match header.ordinal {
1076                0x2451643d00753f94 => {
1077                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1078                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
1079                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1080                    let control_handle = GattClientControllerControlHandle {
1081                        inner: this.inner.clone(),
1082                    };
1083                    Ok(GattClientControllerRequest::DiscoverServices {
1084                        responder: GattClientControllerDiscoverServicesResponder {
1085                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1086                            tx_id: header.tx_id,
1087                        },
1088                    })
1089                }
1090                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1091                    Ok(GattClientControllerRequest::_UnknownMethod {
1092                        ordinal: header.ordinal,
1093                        control_handle: GattClientControllerControlHandle { inner: this.inner.clone() },
1094                        method_type: fidl::MethodType::OneWay,
1095                    })
1096                }
1097                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1098                    this.inner.send_framework_err(
1099                        fidl::encoding::FrameworkErr::UnknownMethod,
1100                        header.tx_id,
1101                        header.ordinal,
1102                        header.dynamic_flags(),
1103                        (bytes, handles),
1104                    )?;
1105                    Ok(GattClientControllerRequest::_UnknownMethod {
1106                        ordinal: header.ordinal,
1107                        control_handle: GattClientControllerControlHandle { inner: this.inner.clone() },
1108                        method_type: fidl::MethodType::TwoWay,
1109                    })
1110                }
1111                _ => Err(fidl::Error::UnknownOrdinal {
1112                    ordinal: header.ordinal,
1113                    protocol_name: <GattClientControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1114                }),
1115            }))
1116            },
1117        )
1118    }
1119}
1120
1121#[derive(Debug)]
1122pub enum GattClientControllerRequest {
1123    /// Discover GATT services on a peer connected by [`CentralController.ConnectPeripheral`].
1124    ///
1125    /// * error Returns `INTERNAL` if the operation failed (check logs).
1126    DiscoverServices { responder: GattClientControllerDiscoverServicesResponder },
1127    /// An interaction was received which does not match any known method.
1128    #[non_exhaustive]
1129    _UnknownMethod {
1130        /// Ordinal of the method that was called.
1131        ordinal: u64,
1132        control_handle: GattClientControllerControlHandle,
1133        method_type: fidl::MethodType,
1134    },
1135}
1136
1137impl GattClientControllerRequest {
1138    #[allow(irrefutable_let_patterns)]
1139    pub fn into_discover_services(self) -> Option<(GattClientControllerDiscoverServicesResponder)> {
1140        if let GattClientControllerRequest::DiscoverServices { responder } = self {
1141            Some((responder))
1142        } else {
1143            None
1144        }
1145    }
1146
1147    /// Name of the method defined in FIDL
1148    pub fn method_name(&self) -> &'static str {
1149        match *self {
1150            GattClientControllerRequest::DiscoverServices { .. } => "discover_services",
1151            GattClientControllerRequest::_UnknownMethod {
1152                method_type: fidl::MethodType::OneWay,
1153                ..
1154            } => "unknown one-way method",
1155            GattClientControllerRequest::_UnknownMethod {
1156                method_type: fidl::MethodType::TwoWay,
1157                ..
1158            } => "unknown two-way method",
1159        }
1160    }
1161}
1162
1163#[derive(Debug, Clone)]
1164pub struct GattClientControllerControlHandle {
1165    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1166}
1167
1168impl GattClientControllerControlHandle {
1169    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1170        self.inner.shutdown_with_epitaph(status.into())
1171    }
1172}
1173
1174impl fidl::endpoints::ControlHandle for GattClientControllerControlHandle {
1175    fn shutdown(&self) {
1176        self.inner.shutdown()
1177    }
1178
1179    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1180        self.inner.shutdown_with_epitaph(status)
1181    }
1182
1183    fn is_closed(&self) -> bool {
1184        self.inner.channel().is_closed()
1185    }
1186    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1187        self.inner.channel().on_closed()
1188    }
1189
1190    #[cfg(target_os = "fuchsia")]
1191    fn signal_peer(
1192        &self,
1193        clear_mask: zx::Signals,
1194        set_mask: zx::Signals,
1195    ) -> Result<(), zx_status::Status> {
1196        use fidl::Peered;
1197        self.inner.channel().signal_peer(clear_mask, set_mask)
1198    }
1199}
1200
1201impl GattClientControllerControlHandle {}
1202
1203#[must_use = "FIDL methods require a response to be sent"]
1204#[derive(Debug)]
1205pub struct GattClientControllerDiscoverServicesResponder {
1206    control_handle: std::mem::ManuallyDrop<GattClientControllerControlHandle>,
1207    tx_id: u32,
1208}
1209
1210/// Set the the channel to be shutdown (see [`GattClientControllerControlHandle::shutdown`])
1211/// if the responder is dropped without sending a response, so that the client
1212/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1213impl std::ops::Drop for GattClientControllerDiscoverServicesResponder {
1214    fn drop(&mut self) {
1215        self.control_handle.shutdown();
1216        // Safety: drops once, never accessed again
1217        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1218    }
1219}
1220
1221impl fidl::endpoints::Responder for GattClientControllerDiscoverServicesResponder {
1222    type ControlHandle = GattClientControllerControlHandle;
1223
1224    fn control_handle(&self) -> &GattClientControllerControlHandle {
1225        &self.control_handle
1226    }
1227
1228    fn drop_without_shutdown(mut self) {
1229        // Safety: drops once, never accessed again due to mem::forget
1230        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1231        // Prevent Drop from running (which would shut down the channel)
1232        std::mem::forget(self);
1233    }
1234}
1235
1236impl GattClientControllerDiscoverServicesResponder {
1237    /// Sends a response to the FIDL transaction.
1238    ///
1239    /// Sets the channel to shutdown if an error occurs.
1240    pub fn send(
1241        self,
1242        mut result: Result<&GattClientControllerDiscoverServicesResponse, Error>,
1243    ) -> Result<(), fidl::Error> {
1244        let _result = self.send_raw(result);
1245        if _result.is_err() {
1246            self.control_handle.shutdown();
1247        }
1248        self.drop_without_shutdown();
1249        _result
1250    }
1251
1252    /// Similar to "send" but does not shutdown the channel if an error occurs.
1253    pub fn send_no_shutdown_on_err(
1254        self,
1255        mut result: Result<&GattClientControllerDiscoverServicesResponse, Error>,
1256    ) -> Result<(), fidl::Error> {
1257        let _result = self.send_raw(result);
1258        self.drop_without_shutdown();
1259        _result
1260    }
1261
1262    fn send_raw(
1263        &self,
1264        mut result: Result<&GattClientControllerDiscoverServicesResponse, Error>,
1265    ) -> Result<(), fidl::Error> {
1266        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1267            GattClientControllerDiscoverServicesResponse,
1268            Error,
1269        >>(
1270            fidl::encoding::FlexibleResult::new(result),
1271            self.tx_id,
1272            0x2451643d00753f94,
1273            fidl::encoding::DynamicFlags::FLEXIBLE,
1274        )
1275    }
1276}
1277
1278#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1279pub struct HostControllerMarker;
1280
1281impl fidl::endpoints::ProtocolMarker for HostControllerMarker {
1282    type Proxy = HostControllerProxy;
1283    type RequestStream = HostControllerRequestStream;
1284    #[cfg(target_os = "fuchsia")]
1285    type SynchronousProxy = HostControllerSynchronousProxy;
1286
1287    const DEBUG_NAME: &'static str = "fuchsia.bluetooth.affordances.HostController";
1288}
1289impl fidl::endpoints::DiscoverableProtocolMarker for HostControllerMarker {}
1290pub type HostControllerGetHostsResult = Result<HostControllerGetHostsResponse, Error>;
1291pub type HostControllerSetDiscoverabilityResult = Result<(), Error>;
1292pub type HostControllerSetConnectabilityResult = Result<(), Error>;
1293
1294pub trait HostControllerProxyInterface: Send + Sync {
1295    type GetHostsResponseFut: std::future::Future<Output = Result<HostControllerGetHostsResult, fidl::Error>>
1296        + Send;
1297    fn r#get_hosts(&self) -> Self::GetHostsResponseFut;
1298    type SetDiscoverabilityResponseFut: std::future::Future<Output = Result<HostControllerSetDiscoverabilityResult, fidl::Error>>
1299        + Send;
1300    fn r#set_discoverability(
1301        &self,
1302        payload: &HostControllerSetDiscoverabilityRequest,
1303    ) -> Self::SetDiscoverabilityResponseFut;
1304    type SetConnectabilityResponseFut: std::future::Future<Output = Result<HostControllerSetConnectabilityResult, fidl::Error>>
1305        + Send;
1306    fn r#set_connectability(
1307        &self,
1308        payload: &HostControllerSetConnectabilityRequest,
1309    ) -> Self::SetConnectabilityResponseFut;
1310}
1311#[derive(Debug)]
1312#[cfg(target_os = "fuchsia")]
1313pub struct HostControllerSynchronousProxy {
1314    client: fidl::client::sync::Client,
1315}
1316
1317#[cfg(target_os = "fuchsia")]
1318impl fidl::endpoints::SynchronousProxy for HostControllerSynchronousProxy {
1319    type Proxy = HostControllerProxy;
1320    type Protocol = HostControllerMarker;
1321
1322    fn from_channel(inner: fidl::Channel) -> Self {
1323        Self::new(inner)
1324    }
1325
1326    fn into_channel(self) -> fidl::Channel {
1327        self.client.into_channel()
1328    }
1329
1330    fn as_channel(&self) -> &fidl::Channel {
1331        self.client.as_channel()
1332    }
1333}
1334
1335#[cfg(target_os = "fuchsia")]
1336impl HostControllerSynchronousProxy {
1337    pub fn new(channel: fidl::Channel) -> Self {
1338        Self { client: fidl::client::sync::Client::new(channel) }
1339    }
1340
1341    pub fn into_channel(self) -> fidl::Channel {
1342        self.client.into_channel()
1343    }
1344
1345    /// Waits until an event arrives and returns it. It is safe for other
1346    /// threads to make concurrent requests while waiting for an event.
1347    pub fn wait_for_event(
1348        &self,
1349        deadline: zx::MonotonicInstant,
1350    ) -> Result<HostControllerEvent, fidl::Error> {
1351        HostControllerEvent::decode(self.client.wait_for_event::<HostControllerMarker>(deadline)?)
1352    }
1353
1354    /// Get all known hosts.
1355    ///
1356    /// * error Returns `INTERNAL` if the operation failed (check logs).
1357    pub fn r#get_hosts(
1358        &self,
1359        ___deadline: zx::MonotonicInstant,
1360    ) -> Result<HostControllerGetHostsResult, fidl::Error> {
1361        let _response = self.client.send_query::<
1362            fidl::encoding::EmptyPayload,
1363            fidl::encoding::FlexibleResultType<HostControllerGetHostsResponse, Error>,
1364            HostControllerMarker,
1365        >(
1366            (),
1367            0x167d2522684d453d,
1368            fidl::encoding::DynamicFlags::FLEXIBLE,
1369            ___deadline,
1370        )?
1371        .into_result::<HostControllerMarker>("get_hosts")?;
1372        Ok(_response.map(|x| x))
1373    }
1374
1375    /// Set discoverability state.
1376    ///
1377    /// * error Returns `INTERNAL` if the operation failed (check logs).
1378    /// * error Returns `MISSING_PARAMETERS` if `discoverable` is missing.
1379    pub fn r#set_discoverability(
1380        &self,
1381        mut payload: &HostControllerSetDiscoverabilityRequest,
1382        ___deadline: zx::MonotonicInstant,
1383    ) -> Result<HostControllerSetDiscoverabilityResult, fidl::Error> {
1384        let _response = self.client.send_query::<
1385            HostControllerSetDiscoverabilityRequest,
1386            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
1387            HostControllerMarker,
1388        >(
1389            payload,
1390            0x1e977b538b94b08b,
1391            fidl::encoding::DynamicFlags::FLEXIBLE,
1392            ___deadline,
1393        )?
1394        .into_result::<HostControllerMarker>("set_discoverability")?;
1395        Ok(_response.map(|x| x))
1396    }
1397
1398    /// Set connection policy.
1399    ///
1400    /// * error Returns `INTERNAL` if the operation failed (check logs).
1401    /// * error Returns `MISSING_PARAMETERS` if `connectable` is missing.
1402    pub fn r#set_connectability(
1403        &self,
1404        mut payload: &HostControllerSetConnectabilityRequest,
1405        ___deadline: zx::MonotonicInstant,
1406    ) -> Result<HostControllerSetConnectabilityResult, fidl::Error> {
1407        let _response = self.client.send_query::<
1408            HostControllerSetConnectabilityRequest,
1409            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
1410            HostControllerMarker,
1411        >(
1412            payload,
1413            0x93572b659adf7d,
1414            fidl::encoding::DynamicFlags::FLEXIBLE,
1415            ___deadline,
1416        )?
1417        .into_result::<HostControllerMarker>("set_connectability")?;
1418        Ok(_response.map(|x| x))
1419    }
1420}
1421
1422#[cfg(target_os = "fuchsia")]
1423impl From<HostControllerSynchronousProxy> for zx::NullableHandle {
1424    fn from(value: HostControllerSynchronousProxy) -> Self {
1425        value.into_channel().into()
1426    }
1427}
1428
1429#[cfg(target_os = "fuchsia")]
1430impl From<fidl::Channel> for HostControllerSynchronousProxy {
1431    fn from(value: fidl::Channel) -> Self {
1432        Self::new(value)
1433    }
1434}
1435
1436#[cfg(target_os = "fuchsia")]
1437impl fidl::endpoints::FromClient for HostControllerSynchronousProxy {
1438    type Protocol = HostControllerMarker;
1439
1440    fn from_client(value: fidl::endpoints::ClientEnd<HostControllerMarker>) -> Self {
1441        Self::new(value.into_channel())
1442    }
1443}
1444
1445#[derive(Debug, Clone)]
1446pub struct HostControllerProxy {
1447    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1448}
1449
1450impl fidl::endpoints::Proxy for HostControllerProxy {
1451    type Protocol = HostControllerMarker;
1452
1453    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1454        Self::new(inner)
1455    }
1456
1457    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1458        self.client.into_channel().map_err(|client| Self { client })
1459    }
1460
1461    fn as_channel(&self) -> &::fidl::AsyncChannel {
1462        self.client.as_channel()
1463    }
1464}
1465
1466impl HostControllerProxy {
1467    /// Create a new Proxy for fuchsia.bluetooth.affordances/HostController.
1468    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1469        let protocol_name = <HostControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1470        Self { client: fidl::client::Client::new(channel, protocol_name) }
1471    }
1472
1473    /// Get a Stream of events from the remote end of the protocol.
1474    ///
1475    /// # Panics
1476    ///
1477    /// Panics if the event stream was already taken.
1478    pub fn take_event_stream(&self) -> HostControllerEventStream {
1479        HostControllerEventStream { event_receiver: self.client.take_event_receiver() }
1480    }
1481
1482    /// Get all known hosts.
1483    ///
1484    /// * error Returns `INTERNAL` if the operation failed (check logs).
1485    pub fn r#get_hosts(
1486        &self,
1487    ) -> fidl::client::QueryResponseFut<
1488        HostControllerGetHostsResult,
1489        fidl::encoding::DefaultFuchsiaResourceDialect,
1490    > {
1491        HostControllerProxyInterface::r#get_hosts(self)
1492    }
1493
1494    /// Set discoverability state.
1495    ///
1496    /// * error Returns `INTERNAL` if the operation failed (check logs).
1497    /// * error Returns `MISSING_PARAMETERS` if `discoverable` is missing.
1498    pub fn r#set_discoverability(
1499        &self,
1500        mut payload: &HostControllerSetDiscoverabilityRequest,
1501    ) -> fidl::client::QueryResponseFut<
1502        HostControllerSetDiscoverabilityResult,
1503        fidl::encoding::DefaultFuchsiaResourceDialect,
1504    > {
1505        HostControllerProxyInterface::r#set_discoverability(self, payload)
1506    }
1507
1508    /// Set connection policy.
1509    ///
1510    /// * error Returns `INTERNAL` if the operation failed (check logs).
1511    /// * error Returns `MISSING_PARAMETERS` if `connectable` is missing.
1512    pub fn r#set_connectability(
1513        &self,
1514        mut payload: &HostControllerSetConnectabilityRequest,
1515    ) -> fidl::client::QueryResponseFut<
1516        HostControllerSetConnectabilityResult,
1517        fidl::encoding::DefaultFuchsiaResourceDialect,
1518    > {
1519        HostControllerProxyInterface::r#set_connectability(self, payload)
1520    }
1521}
1522
1523impl HostControllerProxyInterface for HostControllerProxy {
1524    type GetHostsResponseFut = fidl::client::QueryResponseFut<
1525        HostControllerGetHostsResult,
1526        fidl::encoding::DefaultFuchsiaResourceDialect,
1527    >;
1528    fn r#get_hosts(&self) -> Self::GetHostsResponseFut {
1529        fn _decode(
1530            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1531        ) -> Result<HostControllerGetHostsResult, fidl::Error> {
1532            let _response = fidl::client::decode_transaction_body::<
1533                fidl::encoding::FlexibleResultType<HostControllerGetHostsResponse, Error>,
1534                fidl::encoding::DefaultFuchsiaResourceDialect,
1535                0x167d2522684d453d,
1536            >(_buf?)?
1537            .into_result::<HostControllerMarker>("get_hosts")?;
1538            Ok(_response.map(|x| x))
1539        }
1540        self.client
1541            .send_query_and_decode::<fidl::encoding::EmptyPayload, HostControllerGetHostsResult>(
1542                (),
1543                0x167d2522684d453d,
1544                fidl::encoding::DynamicFlags::FLEXIBLE,
1545                _decode,
1546            )
1547    }
1548
1549    type SetDiscoverabilityResponseFut = fidl::client::QueryResponseFut<
1550        HostControllerSetDiscoverabilityResult,
1551        fidl::encoding::DefaultFuchsiaResourceDialect,
1552    >;
1553    fn r#set_discoverability(
1554        &self,
1555        mut payload: &HostControllerSetDiscoverabilityRequest,
1556    ) -> Self::SetDiscoverabilityResponseFut {
1557        fn _decode(
1558            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1559        ) -> Result<HostControllerSetDiscoverabilityResult, fidl::Error> {
1560            let _response = fidl::client::decode_transaction_body::<
1561                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
1562                fidl::encoding::DefaultFuchsiaResourceDialect,
1563                0x1e977b538b94b08b,
1564            >(_buf?)?
1565            .into_result::<HostControllerMarker>("set_discoverability")?;
1566            Ok(_response.map(|x| x))
1567        }
1568        self.client.send_query_and_decode::<
1569            HostControllerSetDiscoverabilityRequest,
1570            HostControllerSetDiscoverabilityResult,
1571        >(
1572            payload,
1573            0x1e977b538b94b08b,
1574            fidl::encoding::DynamicFlags::FLEXIBLE,
1575            _decode,
1576        )
1577    }
1578
1579    type SetConnectabilityResponseFut = fidl::client::QueryResponseFut<
1580        HostControllerSetConnectabilityResult,
1581        fidl::encoding::DefaultFuchsiaResourceDialect,
1582    >;
1583    fn r#set_connectability(
1584        &self,
1585        mut payload: &HostControllerSetConnectabilityRequest,
1586    ) -> Self::SetConnectabilityResponseFut {
1587        fn _decode(
1588            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1589        ) -> Result<HostControllerSetConnectabilityResult, fidl::Error> {
1590            let _response = fidl::client::decode_transaction_body::<
1591                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
1592                fidl::encoding::DefaultFuchsiaResourceDialect,
1593                0x93572b659adf7d,
1594            >(_buf?)?
1595            .into_result::<HostControllerMarker>("set_connectability")?;
1596            Ok(_response.map(|x| x))
1597        }
1598        self.client.send_query_and_decode::<
1599            HostControllerSetConnectabilityRequest,
1600            HostControllerSetConnectabilityResult,
1601        >(
1602            payload,
1603            0x93572b659adf7d,
1604            fidl::encoding::DynamicFlags::FLEXIBLE,
1605            _decode,
1606        )
1607    }
1608}
1609
1610pub struct HostControllerEventStream {
1611    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1612}
1613
1614impl std::marker::Unpin for HostControllerEventStream {}
1615
1616impl futures::stream::FusedStream for HostControllerEventStream {
1617    fn is_terminated(&self) -> bool {
1618        self.event_receiver.is_terminated()
1619    }
1620}
1621
1622impl futures::Stream for HostControllerEventStream {
1623    type Item = Result<HostControllerEvent, fidl::Error>;
1624
1625    fn poll_next(
1626        mut self: std::pin::Pin<&mut Self>,
1627        cx: &mut std::task::Context<'_>,
1628    ) -> std::task::Poll<Option<Self::Item>> {
1629        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1630            &mut self.event_receiver,
1631            cx
1632        )?) {
1633            Some(buf) => std::task::Poll::Ready(Some(HostControllerEvent::decode(buf))),
1634            None => std::task::Poll::Ready(None),
1635        }
1636    }
1637}
1638
1639#[derive(Debug)]
1640pub enum HostControllerEvent {
1641    #[non_exhaustive]
1642    _UnknownEvent {
1643        /// Ordinal of the event that was sent.
1644        ordinal: u64,
1645    },
1646}
1647
1648impl HostControllerEvent {
1649    /// Decodes a message buffer as a [`HostControllerEvent`].
1650    fn decode(
1651        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1652    ) -> Result<HostControllerEvent, fidl::Error> {
1653        let (bytes, _handles) = buf.split_mut();
1654        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1655        debug_assert_eq!(tx_header.tx_id, 0);
1656        match tx_header.ordinal {
1657            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1658                Ok(HostControllerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1659            }
1660            _ => Err(fidl::Error::UnknownOrdinal {
1661                ordinal: tx_header.ordinal,
1662                protocol_name:
1663                    <HostControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1664            }),
1665        }
1666    }
1667}
1668
1669/// A Stream of incoming requests for fuchsia.bluetooth.affordances/HostController.
1670pub struct HostControllerRequestStream {
1671    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1672    is_terminated: bool,
1673}
1674
1675impl std::marker::Unpin for HostControllerRequestStream {}
1676
1677impl futures::stream::FusedStream for HostControllerRequestStream {
1678    fn is_terminated(&self) -> bool {
1679        self.is_terminated
1680    }
1681}
1682
1683impl fidl::endpoints::RequestStream for HostControllerRequestStream {
1684    type Protocol = HostControllerMarker;
1685    type ControlHandle = HostControllerControlHandle;
1686
1687    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1688        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1689    }
1690
1691    fn control_handle(&self) -> Self::ControlHandle {
1692        HostControllerControlHandle { inner: self.inner.clone() }
1693    }
1694
1695    fn into_inner(
1696        self,
1697    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1698    {
1699        (self.inner, self.is_terminated)
1700    }
1701
1702    fn from_inner(
1703        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1704        is_terminated: bool,
1705    ) -> Self {
1706        Self { inner, is_terminated }
1707    }
1708}
1709
1710impl futures::Stream for HostControllerRequestStream {
1711    type Item = Result<HostControllerRequest, fidl::Error>;
1712
1713    fn poll_next(
1714        mut self: std::pin::Pin<&mut Self>,
1715        cx: &mut std::task::Context<'_>,
1716    ) -> std::task::Poll<Option<Self::Item>> {
1717        let this = &mut *self;
1718        if this.inner.check_shutdown(cx) {
1719            this.is_terminated = true;
1720            return std::task::Poll::Ready(None);
1721        }
1722        if this.is_terminated {
1723            panic!("polled HostControllerRequestStream after completion");
1724        }
1725        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1726            |bytes, handles| {
1727                match this.inner.channel().read_etc(cx, bytes, handles) {
1728                    std::task::Poll::Ready(Ok(())) => {}
1729                    std::task::Poll::Pending => return std::task::Poll::Pending,
1730                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1731                        this.is_terminated = true;
1732                        return std::task::Poll::Ready(None);
1733                    }
1734                    std::task::Poll::Ready(Err(e)) => {
1735                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1736                            e.into(),
1737                        ))));
1738                    }
1739                }
1740
1741                // A message has been received from the channel
1742                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1743
1744                std::task::Poll::Ready(Some(match header.ordinal {
1745                    0x167d2522684d453d => {
1746                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1747                        let mut req = fidl::new_empty!(
1748                            fidl::encoding::EmptyPayload,
1749                            fidl::encoding::DefaultFuchsiaResourceDialect
1750                        );
1751                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1752                        let control_handle =
1753                            HostControllerControlHandle { inner: this.inner.clone() };
1754                        Ok(HostControllerRequest::GetHosts {
1755                            responder: HostControllerGetHostsResponder {
1756                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1757                                tx_id: header.tx_id,
1758                            },
1759                        })
1760                    }
1761                    0x1e977b538b94b08b => {
1762                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1763                        let mut req = fidl::new_empty!(
1764                            HostControllerSetDiscoverabilityRequest,
1765                            fidl::encoding::DefaultFuchsiaResourceDialect
1766                        );
1767                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<HostControllerSetDiscoverabilityRequest>(&header, _body_bytes, handles, &mut req)?;
1768                        let control_handle =
1769                            HostControllerControlHandle { inner: this.inner.clone() };
1770                        Ok(HostControllerRequest::SetDiscoverability {
1771                            payload: req,
1772                            responder: HostControllerSetDiscoverabilityResponder {
1773                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1774                                tx_id: header.tx_id,
1775                            },
1776                        })
1777                    }
1778                    0x93572b659adf7d => {
1779                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1780                        let mut req = fidl::new_empty!(
1781                            HostControllerSetConnectabilityRequest,
1782                            fidl::encoding::DefaultFuchsiaResourceDialect
1783                        );
1784                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<HostControllerSetConnectabilityRequest>(&header, _body_bytes, handles, &mut req)?;
1785                        let control_handle =
1786                            HostControllerControlHandle { inner: this.inner.clone() };
1787                        Ok(HostControllerRequest::SetConnectability {
1788                            payload: req,
1789                            responder: HostControllerSetConnectabilityResponder {
1790                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1791                                tx_id: header.tx_id,
1792                            },
1793                        })
1794                    }
1795                    _ if header.tx_id == 0
1796                        && header
1797                            .dynamic_flags()
1798                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1799                    {
1800                        Ok(HostControllerRequest::_UnknownMethod {
1801                            ordinal: header.ordinal,
1802                            control_handle: HostControllerControlHandle {
1803                                inner: this.inner.clone(),
1804                            },
1805                            method_type: fidl::MethodType::OneWay,
1806                        })
1807                    }
1808                    _ if header
1809                        .dynamic_flags()
1810                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1811                    {
1812                        this.inner.send_framework_err(
1813                            fidl::encoding::FrameworkErr::UnknownMethod,
1814                            header.tx_id,
1815                            header.ordinal,
1816                            header.dynamic_flags(),
1817                            (bytes, handles),
1818                        )?;
1819                        Ok(HostControllerRequest::_UnknownMethod {
1820                            ordinal: header.ordinal,
1821                            control_handle: HostControllerControlHandle {
1822                                inner: this.inner.clone(),
1823                            },
1824                            method_type: fidl::MethodType::TwoWay,
1825                        })
1826                    }
1827                    _ => Err(fidl::Error::UnknownOrdinal {
1828                        ordinal: header.ordinal,
1829                        protocol_name:
1830                            <HostControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1831                    }),
1832                }))
1833            },
1834        )
1835    }
1836}
1837
1838#[derive(Debug)]
1839pub enum HostControllerRequest {
1840    /// Get all known hosts.
1841    ///
1842    /// * error Returns `INTERNAL` if the operation failed (check logs).
1843    GetHosts { responder: HostControllerGetHostsResponder },
1844    /// Set discoverability state.
1845    ///
1846    /// * error Returns `INTERNAL` if the operation failed (check logs).
1847    /// * error Returns `MISSING_PARAMETERS` if `discoverable` is missing.
1848    SetDiscoverability {
1849        payload: HostControllerSetDiscoverabilityRequest,
1850        responder: HostControllerSetDiscoverabilityResponder,
1851    },
1852    /// Set connection policy.
1853    ///
1854    /// * error Returns `INTERNAL` if the operation failed (check logs).
1855    /// * error Returns `MISSING_PARAMETERS` if `connectable` is missing.
1856    SetConnectability {
1857        payload: HostControllerSetConnectabilityRequest,
1858        responder: HostControllerSetConnectabilityResponder,
1859    },
1860    /// An interaction was received which does not match any known method.
1861    #[non_exhaustive]
1862    _UnknownMethod {
1863        /// Ordinal of the method that was called.
1864        ordinal: u64,
1865        control_handle: HostControllerControlHandle,
1866        method_type: fidl::MethodType,
1867    },
1868}
1869
1870impl HostControllerRequest {
1871    #[allow(irrefutable_let_patterns)]
1872    pub fn into_get_hosts(self) -> Option<(HostControllerGetHostsResponder)> {
1873        if let HostControllerRequest::GetHosts { responder } = self {
1874            Some((responder))
1875        } else {
1876            None
1877        }
1878    }
1879
1880    #[allow(irrefutable_let_patterns)]
1881    pub fn into_set_discoverability(
1882        self,
1883    ) -> Option<(HostControllerSetDiscoverabilityRequest, HostControllerSetDiscoverabilityResponder)>
1884    {
1885        if let HostControllerRequest::SetDiscoverability { payload, responder } = self {
1886            Some((payload, responder))
1887        } else {
1888            None
1889        }
1890    }
1891
1892    #[allow(irrefutable_let_patterns)]
1893    pub fn into_set_connectability(
1894        self,
1895    ) -> Option<(HostControllerSetConnectabilityRequest, HostControllerSetConnectabilityResponder)>
1896    {
1897        if let HostControllerRequest::SetConnectability { payload, responder } = self {
1898            Some((payload, responder))
1899        } else {
1900            None
1901        }
1902    }
1903
1904    /// Name of the method defined in FIDL
1905    pub fn method_name(&self) -> &'static str {
1906        match *self {
1907            HostControllerRequest::GetHosts { .. } => "get_hosts",
1908            HostControllerRequest::SetDiscoverability { .. } => "set_discoverability",
1909            HostControllerRequest::SetConnectability { .. } => "set_connectability",
1910            HostControllerRequest::_UnknownMethod {
1911                method_type: fidl::MethodType::OneWay, ..
1912            } => "unknown one-way method",
1913            HostControllerRequest::_UnknownMethod {
1914                method_type: fidl::MethodType::TwoWay, ..
1915            } => "unknown two-way method",
1916        }
1917    }
1918}
1919
1920#[derive(Debug, Clone)]
1921pub struct HostControllerControlHandle {
1922    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1923}
1924
1925impl HostControllerControlHandle {
1926    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1927        self.inner.shutdown_with_epitaph(status.into())
1928    }
1929}
1930
1931impl fidl::endpoints::ControlHandle for HostControllerControlHandle {
1932    fn shutdown(&self) {
1933        self.inner.shutdown()
1934    }
1935
1936    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1937        self.inner.shutdown_with_epitaph(status)
1938    }
1939
1940    fn is_closed(&self) -> bool {
1941        self.inner.channel().is_closed()
1942    }
1943    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1944        self.inner.channel().on_closed()
1945    }
1946
1947    #[cfg(target_os = "fuchsia")]
1948    fn signal_peer(
1949        &self,
1950        clear_mask: zx::Signals,
1951        set_mask: zx::Signals,
1952    ) -> Result<(), zx_status::Status> {
1953        use fidl::Peered;
1954        self.inner.channel().signal_peer(clear_mask, set_mask)
1955    }
1956}
1957
1958impl HostControllerControlHandle {}
1959
1960#[must_use = "FIDL methods require a response to be sent"]
1961#[derive(Debug)]
1962pub struct HostControllerGetHostsResponder {
1963    control_handle: std::mem::ManuallyDrop<HostControllerControlHandle>,
1964    tx_id: u32,
1965}
1966
1967/// Set the the channel to be shutdown (see [`HostControllerControlHandle::shutdown`])
1968/// if the responder is dropped without sending a response, so that the client
1969/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1970impl std::ops::Drop for HostControllerGetHostsResponder {
1971    fn drop(&mut self) {
1972        self.control_handle.shutdown();
1973        // Safety: drops once, never accessed again
1974        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1975    }
1976}
1977
1978impl fidl::endpoints::Responder for HostControllerGetHostsResponder {
1979    type ControlHandle = HostControllerControlHandle;
1980
1981    fn control_handle(&self) -> &HostControllerControlHandle {
1982        &self.control_handle
1983    }
1984
1985    fn drop_without_shutdown(mut self) {
1986        // Safety: drops once, never accessed again due to mem::forget
1987        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1988        // Prevent Drop from running (which would shut down the channel)
1989        std::mem::forget(self);
1990    }
1991}
1992
1993impl HostControllerGetHostsResponder {
1994    /// Sends a response to the FIDL transaction.
1995    ///
1996    /// Sets the channel to shutdown if an error occurs.
1997    pub fn send(
1998        self,
1999        mut result: Result<&HostControllerGetHostsResponse, Error>,
2000    ) -> Result<(), fidl::Error> {
2001        let _result = self.send_raw(result);
2002        if _result.is_err() {
2003            self.control_handle.shutdown();
2004        }
2005        self.drop_without_shutdown();
2006        _result
2007    }
2008
2009    /// Similar to "send" but does not shutdown the channel if an error occurs.
2010    pub fn send_no_shutdown_on_err(
2011        self,
2012        mut result: Result<&HostControllerGetHostsResponse, Error>,
2013    ) -> Result<(), fidl::Error> {
2014        let _result = self.send_raw(result);
2015        self.drop_without_shutdown();
2016        _result
2017    }
2018
2019    fn send_raw(
2020        &self,
2021        mut result: Result<&HostControllerGetHostsResponse, Error>,
2022    ) -> Result<(), fidl::Error> {
2023        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2024            HostControllerGetHostsResponse,
2025            Error,
2026        >>(
2027            fidl::encoding::FlexibleResult::new(result),
2028            self.tx_id,
2029            0x167d2522684d453d,
2030            fidl::encoding::DynamicFlags::FLEXIBLE,
2031        )
2032    }
2033}
2034
2035#[must_use = "FIDL methods require a response to be sent"]
2036#[derive(Debug)]
2037pub struct HostControllerSetDiscoverabilityResponder {
2038    control_handle: std::mem::ManuallyDrop<HostControllerControlHandle>,
2039    tx_id: u32,
2040}
2041
2042/// Set the the channel to be shutdown (see [`HostControllerControlHandle::shutdown`])
2043/// if the responder is dropped without sending a response, so that the client
2044/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2045impl std::ops::Drop for HostControllerSetDiscoverabilityResponder {
2046    fn drop(&mut self) {
2047        self.control_handle.shutdown();
2048        // Safety: drops once, never accessed again
2049        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2050    }
2051}
2052
2053impl fidl::endpoints::Responder for HostControllerSetDiscoverabilityResponder {
2054    type ControlHandle = HostControllerControlHandle;
2055
2056    fn control_handle(&self) -> &HostControllerControlHandle {
2057        &self.control_handle
2058    }
2059
2060    fn drop_without_shutdown(mut self) {
2061        // Safety: drops once, never accessed again due to mem::forget
2062        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2063        // Prevent Drop from running (which would shut down the channel)
2064        std::mem::forget(self);
2065    }
2066}
2067
2068impl HostControllerSetDiscoverabilityResponder {
2069    /// Sends a response to the FIDL transaction.
2070    ///
2071    /// Sets the channel to shutdown if an error occurs.
2072    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2073        let _result = self.send_raw(result);
2074        if _result.is_err() {
2075            self.control_handle.shutdown();
2076        }
2077        self.drop_without_shutdown();
2078        _result
2079    }
2080
2081    /// Similar to "send" but does not shutdown the channel if an error occurs.
2082    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2083        let _result = self.send_raw(result);
2084        self.drop_without_shutdown();
2085        _result
2086    }
2087
2088    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2089        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2090            fidl::encoding::EmptyStruct,
2091            Error,
2092        >>(
2093            fidl::encoding::FlexibleResult::new(result),
2094            self.tx_id,
2095            0x1e977b538b94b08b,
2096            fidl::encoding::DynamicFlags::FLEXIBLE,
2097        )
2098    }
2099}
2100
2101#[must_use = "FIDL methods require a response to be sent"]
2102#[derive(Debug)]
2103pub struct HostControllerSetConnectabilityResponder {
2104    control_handle: std::mem::ManuallyDrop<HostControllerControlHandle>,
2105    tx_id: u32,
2106}
2107
2108/// Set the the channel to be shutdown (see [`HostControllerControlHandle::shutdown`])
2109/// if the responder is dropped without sending a response, so that the client
2110/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2111impl std::ops::Drop for HostControllerSetConnectabilityResponder {
2112    fn drop(&mut self) {
2113        self.control_handle.shutdown();
2114        // Safety: drops once, never accessed again
2115        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2116    }
2117}
2118
2119impl fidl::endpoints::Responder for HostControllerSetConnectabilityResponder {
2120    type ControlHandle = HostControllerControlHandle;
2121
2122    fn control_handle(&self) -> &HostControllerControlHandle {
2123        &self.control_handle
2124    }
2125
2126    fn drop_without_shutdown(mut self) {
2127        // Safety: drops once, never accessed again due to mem::forget
2128        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2129        // Prevent Drop from running (which would shut down the channel)
2130        std::mem::forget(self);
2131    }
2132}
2133
2134impl HostControllerSetConnectabilityResponder {
2135    /// Sends a response to the FIDL transaction.
2136    ///
2137    /// Sets the channel to shutdown if an error occurs.
2138    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2139        let _result = self.send_raw(result);
2140        if _result.is_err() {
2141            self.control_handle.shutdown();
2142        }
2143        self.drop_without_shutdown();
2144        _result
2145    }
2146
2147    /// Similar to "send" but does not shutdown the channel if an error occurs.
2148    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2149        let _result = self.send_raw(result);
2150        self.drop_without_shutdown();
2151        _result
2152    }
2153
2154    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2155        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2156            fidl::encoding::EmptyStruct,
2157            Error,
2158        >>(
2159            fidl::encoding::FlexibleResult::new(result),
2160            self.tx_id,
2161            0x93572b659adf7d,
2162            fidl::encoding::DynamicFlags::FLEXIBLE,
2163        )
2164    }
2165}
2166
2167#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2168pub struct PeerControllerMarker;
2169
2170impl fidl::endpoints::ProtocolMarker for PeerControllerMarker {
2171    type Proxy = PeerControllerProxy;
2172    type RequestStream = PeerControllerRequestStream;
2173    #[cfg(target_os = "fuchsia")]
2174    type SynchronousProxy = PeerControllerSynchronousProxy;
2175
2176    const DEBUG_NAME: &'static str = "fuchsia.bluetooth.affordances.PeerController";
2177}
2178impl fidl::endpoints::DiscoverableProtocolMarker for PeerControllerMarker {}
2179pub type PeerControllerGetKnownPeersResult = Result<PeerControllerGetKnownPeersResponse, Error>;
2180pub type PeerControllerGetPeerIdResult = Result<PeerControllerGetPeerIdResponse, Error>;
2181pub type PeerControllerSetDiscoveryResult = Result<(), Error>;
2182
2183pub trait PeerControllerProxyInterface: Send + Sync {
2184    type GetKnownPeersResponseFut: std::future::Future<Output = Result<PeerControllerGetKnownPeersResult, fidl::Error>>
2185        + Send;
2186    fn r#get_known_peers(&self) -> Self::GetKnownPeersResponseFut;
2187    type GetPeerIdResponseFut: std::future::Future<Output = Result<PeerControllerGetPeerIdResult, fidl::Error>>
2188        + Send;
2189    fn r#get_peer_id(&self, payload: &PeerControllerGetPeerIdRequest)
2190    -> Self::GetPeerIdResponseFut;
2191    type SetDiscoveryResponseFut: std::future::Future<Output = Result<PeerControllerSetDiscoveryResult, fidl::Error>>
2192        + Send;
2193    fn r#set_discovery(
2194        &self,
2195        payload: &PeerControllerSetDiscoveryRequest,
2196    ) -> Self::SetDiscoveryResponseFut;
2197}
2198#[derive(Debug)]
2199#[cfg(target_os = "fuchsia")]
2200pub struct PeerControllerSynchronousProxy {
2201    client: fidl::client::sync::Client,
2202}
2203
2204#[cfg(target_os = "fuchsia")]
2205impl fidl::endpoints::SynchronousProxy for PeerControllerSynchronousProxy {
2206    type Proxy = PeerControllerProxy;
2207    type Protocol = PeerControllerMarker;
2208
2209    fn from_channel(inner: fidl::Channel) -> Self {
2210        Self::new(inner)
2211    }
2212
2213    fn into_channel(self) -> fidl::Channel {
2214        self.client.into_channel()
2215    }
2216
2217    fn as_channel(&self) -> &fidl::Channel {
2218        self.client.as_channel()
2219    }
2220}
2221
2222#[cfg(target_os = "fuchsia")]
2223impl PeerControllerSynchronousProxy {
2224    pub fn new(channel: fidl::Channel) -> Self {
2225        Self { client: fidl::client::sync::Client::new(channel) }
2226    }
2227
2228    pub fn into_channel(self) -> fidl::Channel {
2229        self.client.into_channel()
2230    }
2231
2232    /// Waits until an event arrives and returns it. It is safe for other
2233    /// threads to make concurrent requests while waiting for an event.
2234    pub fn wait_for_event(
2235        &self,
2236        deadline: zx::MonotonicInstant,
2237    ) -> Result<PeerControllerEvent, fidl::Error> {
2238        PeerControllerEvent::decode(self.client.wait_for_event::<PeerControllerMarker>(deadline)?)
2239    }
2240
2241    /// Get a list of discovered peers.
2242    ///
2243    /// * error Returns `INTERNAL` if the operation failed (check logs).
2244    pub fn r#get_known_peers(
2245        &self,
2246        ___deadline: zx::MonotonicInstant,
2247    ) -> Result<PeerControllerGetKnownPeersResult, fidl::Error> {
2248        let _response = self.client.send_query::<
2249            fidl::encoding::EmptyPayload,
2250            fidl::encoding::FlexibleResultType<PeerControllerGetKnownPeersResponse, Error>,
2251            PeerControllerMarker,
2252        >(
2253            (),
2254            0x482cf3745bab65f6,
2255            fidl::encoding::DynamicFlags::FLEXIBLE,
2256            ___deadline,
2257        )?
2258        .into_result::<PeerControllerMarker>("get_known_peers")?;
2259        Ok(_response.map(|x| x))
2260    }
2261
2262    /// Get a peer's ID from its address.
2263    ///
2264    /// * error Returns `INTERNAL` if the operation failed (check logs).
2265    /// * error Returns `TIMEOUT` if the operation timed out without finding the peer.
2266    /// * error Returns `MISSING_PARAMETERS` if `address` is missing.
2267    pub fn r#get_peer_id(
2268        &self,
2269        mut payload: &PeerControllerGetPeerIdRequest,
2270        ___deadline: zx::MonotonicInstant,
2271    ) -> Result<PeerControllerGetPeerIdResult, fidl::Error> {
2272        let _response = self.client.send_query::<
2273            PeerControllerGetPeerIdRequest,
2274            fidl::encoding::FlexibleResultType<PeerControllerGetPeerIdResponse, Error>,
2275            PeerControllerMarker,
2276        >(
2277            payload,
2278            0x5f6f76185d19eb18,
2279            fidl::encoding::DynamicFlags::FLEXIBLE,
2280            ___deadline,
2281        )?
2282        .into_result::<PeerControllerMarker>("get_peer_id")?;
2283        Ok(_response.map(|x| x))
2284    }
2285
2286    /// Set discovery state.
2287    ///
2288    /// * error Returns `INTERNAL` if the operation failed (check logs).
2289    /// * error Returns `MISSING_PARAMETERS` if `discovery` is missing.
2290    pub fn r#set_discovery(
2291        &self,
2292        mut payload: &PeerControllerSetDiscoveryRequest,
2293        ___deadline: zx::MonotonicInstant,
2294    ) -> Result<PeerControllerSetDiscoveryResult, fidl::Error> {
2295        let _response = self.client.send_query::<
2296            PeerControllerSetDiscoveryRequest,
2297            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
2298            PeerControllerMarker,
2299        >(
2300            payload,
2301            0x3269624c9e1d6ab3,
2302            fidl::encoding::DynamicFlags::FLEXIBLE,
2303            ___deadline,
2304        )?
2305        .into_result::<PeerControllerMarker>("set_discovery")?;
2306        Ok(_response.map(|x| x))
2307    }
2308}
2309
2310#[cfg(target_os = "fuchsia")]
2311impl From<PeerControllerSynchronousProxy> for zx::NullableHandle {
2312    fn from(value: PeerControllerSynchronousProxy) -> Self {
2313        value.into_channel().into()
2314    }
2315}
2316
2317#[cfg(target_os = "fuchsia")]
2318impl From<fidl::Channel> for PeerControllerSynchronousProxy {
2319    fn from(value: fidl::Channel) -> Self {
2320        Self::new(value)
2321    }
2322}
2323
2324#[cfg(target_os = "fuchsia")]
2325impl fidl::endpoints::FromClient for PeerControllerSynchronousProxy {
2326    type Protocol = PeerControllerMarker;
2327
2328    fn from_client(value: fidl::endpoints::ClientEnd<PeerControllerMarker>) -> Self {
2329        Self::new(value.into_channel())
2330    }
2331}
2332
2333#[derive(Debug, Clone)]
2334pub struct PeerControllerProxy {
2335    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2336}
2337
2338impl fidl::endpoints::Proxy for PeerControllerProxy {
2339    type Protocol = PeerControllerMarker;
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 PeerControllerProxy {
2355    /// Create a new Proxy for fuchsia.bluetooth.affordances/PeerController.
2356    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2357        let protocol_name = <PeerControllerMarker 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) -> PeerControllerEventStream {
2367        PeerControllerEventStream { event_receiver: self.client.take_event_receiver() }
2368    }
2369
2370    /// Get a list of discovered peers.
2371    ///
2372    /// * error Returns `INTERNAL` if the operation failed (check logs).
2373    pub fn r#get_known_peers(
2374        &self,
2375    ) -> fidl::client::QueryResponseFut<
2376        PeerControllerGetKnownPeersResult,
2377        fidl::encoding::DefaultFuchsiaResourceDialect,
2378    > {
2379        PeerControllerProxyInterface::r#get_known_peers(self)
2380    }
2381
2382    /// Get a peer's ID from its address.
2383    ///
2384    /// * error Returns `INTERNAL` if the operation failed (check logs).
2385    /// * error Returns `TIMEOUT` if the operation timed out without finding the peer.
2386    /// * error Returns `MISSING_PARAMETERS` if `address` is missing.
2387    pub fn r#get_peer_id(
2388        &self,
2389        mut payload: &PeerControllerGetPeerIdRequest,
2390    ) -> fidl::client::QueryResponseFut<
2391        PeerControllerGetPeerIdResult,
2392        fidl::encoding::DefaultFuchsiaResourceDialect,
2393    > {
2394        PeerControllerProxyInterface::r#get_peer_id(self, payload)
2395    }
2396
2397    /// Set discovery state.
2398    ///
2399    /// * error Returns `INTERNAL` if the operation failed (check logs).
2400    /// * error Returns `MISSING_PARAMETERS` if `discovery` is missing.
2401    pub fn r#set_discovery(
2402        &self,
2403        mut payload: &PeerControllerSetDiscoveryRequest,
2404    ) -> fidl::client::QueryResponseFut<
2405        PeerControllerSetDiscoveryResult,
2406        fidl::encoding::DefaultFuchsiaResourceDialect,
2407    > {
2408        PeerControllerProxyInterface::r#set_discovery(self, payload)
2409    }
2410}
2411
2412impl PeerControllerProxyInterface for PeerControllerProxy {
2413    type GetKnownPeersResponseFut = fidl::client::QueryResponseFut<
2414        PeerControllerGetKnownPeersResult,
2415        fidl::encoding::DefaultFuchsiaResourceDialect,
2416    >;
2417    fn r#get_known_peers(&self) -> Self::GetKnownPeersResponseFut {
2418        fn _decode(
2419            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2420        ) -> Result<PeerControllerGetKnownPeersResult, fidl::Error> {
2421            let _response = fidl::client::decode_transaction_body::<
2422                fidl::encoding::FlexibleResultType<PeerControllerGetKnownPeersResponse, Error>,
2423                fidl::encoding::DefaultFuchsiaResourceDialect,
2424                0x482cf3745bab65f6,
2425            >(_buf?)?
2426            .into_result::<PeerControllerMarker>("get_known_peers")?;
2427            Ok(_response.map(|x| x))
2428        }
2429        self.client.send_query_and_decode::<
2430            fidl::encoding::EmptyPayload,
2431            PeerControllerGetKnownPeersResult,
2432        >(
2433            (),
2434            0x482cf3745bab65f6,
2435            fidl::encoding::DynamicFlags::FLEXIBLE,
2436            _decode,
2437        )
2438    }
2439
2440    type GetPeerIdResponseFut = fidl::client::QueryResponseFut<
2441        PeerControllerGetPeerIdResult,
2442        fidl::encoding::DefaultFuchsiaResourceDialect,
2443    >;
2444    fn r#get_peer_id(
2445        &self,
2446        mut payload: &PeerControllerGetPeerIdRequest,
2447    ) -> Self::GetPeerIdResponseFut {
2448        fn _decode(
2449            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2450        ) -> Result<PeerControllerGetPeerIdResult, fidl::Error> {
2451            let _response = fidl::client::decode_transaction_body::<
2452                fidl::encoding::FlexibleResultType<PeerControllerGetPeerIdResponse, Error>,
2453                fidl::encoding::DefaultFuchsiaResourceDialect,
2454                0x5f6f76185d19eb18,
2455            >(_buf?)?
2456            .into_result::<PeerControllerMarker>("get_peer_id")?;
2457            Ok(_response.map(|x| x))
2458        }
2459        self.client
2460            .send_query_and_decode::<PeerControllerGetPeerIdRequest, PeerControllerGetPeerIdResult>(
2461                payload,
2462                0x5f6f76185d19eb18,
2463                fidl::encoding::DynamicFlags::FLEXIBLE,
2464                _decode,
2465            )
2466    }
2467
2468    type SetDiscoveryResponseFut = fidl::client::QueryResponseFut<
2469        PeerControllerSetDiscoveryResult,
2470        fidl::encoding::DefaultFuchsiaResourceDialect,
2471    >;
2472    fn r#set_discovery(
2473        &self,
2474        mut payload: &PeerControllerSetDiscoveryRequest,
2475    ) -> Self::SetDiscoveryResponseFut {
2476        fn _decode(
2477            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2478        ) -> Result<PeerControllerSetDiscoveryResult, fidl::Error> {
2479            let _response = fidl::client::decode_transaction_body::<
2480                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, Error>,
2481                fidl::encoding::DefaultFuchsiaResourceDialect,
2482                0x3269624c9e1d6ab3,
2483            >(_buf?)?
2484            .into_result::<PeerControllerMarker>("set_discovery")?;
2485            Ok(_response.map(|x| x))
2486        }
2487        self.client.send_query_and_decode::<
2488            PeerControllerSetDiscoveryRequest,
2489            PeerControllerSetDiscoveryResult,
2490        >(
2491            payload,
2492            0x3269624c9e1d6ab3,
2493            fidl::encoding::DynamicFlags::FLEXIBLE,
2494            _decode,
2495        )
2496    }
2497}
2498
2499pub struct PeerControllerEventStream {
2500    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2501}
2502
2503impl std::marker::Unpin for PeerControllerEventStream {}
2504
2505impl futures::stream::FusedStream for PeerControllerEventStream {
2506    fn is_terminated(&self) -> bool {
2507        self.event_receiver.is_terminated()
2508    }
2509}
2510
2511impl futures::Stream for PeerControllerEventStream {
2512    type Item = Result<PeerControllerEvent, fidl::Error>;
2513
2514    fn poll_next(
2515        mut self: std::pin::Pin<&mut Self>,
2516        cx: &mut std::task::Context<'_>,
2517    ) -> std::task::Poll<Option<Self::Item>> {
2518        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2519            &mut self.event_receiver,
2520            cx
2521        )?) {
2522            Some(buf) => std::task::Poll::Ready(Some(PeerControllerEvent::decode(buf))),
2523            None => std::task::Poll::Ready(None),
2524        }
2525    }
2526}
2527
2528#[derive(Debug)]
2529pub enum PeerControllerEvent {
2530    #[non_exhaustive]
2531    _UnknownEvent {
2532        /// Ordinal of the event that was sent.
2533        ordinal: u64,
2534    },
2535}
2536
2537impl PeerControllerEvent {
2538    /// Decodes a message buffer as a [`PeerControllerEvent`].
2539    fn decode(
2540        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2541    ) -> Result<PeerControllerEvent, fidl::Error> {
2542        let (bytes, _handles) = buf.split_mut();
2543        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2544        debug_assert_eq!(tx_header.tx_id, 0);
2545        match tx_header.ordinal {
2546            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2547                Ok(PeerControllerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
2548            }
2549            _ => Err(fidl::Error::UnknownOrdinal {
2550                ordinal: tx_header.ordinal,
2551                protocol_name:
2552                    <PeerControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2553            }),
2554        }
2555    }
2556}
2557
2558/// A Stream of incoming requests for fuchsia.bluetooth.affordances/PeerController.
2559pub struct PeerControllerRequestStream {
2560    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2561    is_terminated: bool,
2562}
2563
2564impl std::marker::Unpin for PeerControllerRequestStream {}
2565
2566impl futures::stream::FusedStream for PeerControllerRequestStream {
2567    fn is_terminated(&self) -> bool {
2568        self.is_terminated
2569    }
2570}
2571
2572impl fidl::endpoints::RequestStream for PeerControllerRequestStream {
2573    type Protocol = PeerControllerMarker;
2574    type ControlHandle = PeerControllerControlHandle;
2575
2576    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2577        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2578    }
2579
2580    fn control_handle(&self) -> Self::ControlHandle {
2581        PeerControllerControlHandle { inner: self.inner.clone() }
2582    }
2583
2584    fn into_inner(
2585        self,
2586    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2587    {
2588        (self.inner, self.is_terminated)
2589    }
2590
2591    fn from_inner(
2592        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2593        is_terminated: bool,
2594    ) -> Self {
2595        Self { inner, is_terminated }
2596    }
2597}
2598
2599impl futures::Stream for PeerControllerRequestStream {
2600    type Item = Result<PeerControllerRequest, fidl::Error>;
2601
2602    fn poll_next(
2603        mut self: std::pin::Pin<&mut Self>,
2604        cx: &mut std::task::Context<'_>,
2605    ) -> std::task::Poll<Option<Self::Item>> {
2606        let this = &mut *self;
2607        if this.inner.check_shutdown(cx) {
2608            this.is_terminated = true;
2609            return std::task::Poll::Ready(None);
2610        }
2611        if this.is_terminated {
2612            panic!("polled PeerControllerRequestStream after completion");
2613        }
2614        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2615            |bytes, handles| {
2616                match this.inner.channel().read_etc(cx, bytes, handles) {
2617                    std::task::Poll::Ready(Ok(())) => {}
2618                    std::task::Poll::Pending => return std::task::Poll::Pending,
2619                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2620                        this.is_terminated = true;
2621                        return std::task::Poll::Ready(None);
2622                    }
2623                    std::task::Poll::Ready(Err(e)) => {
2624                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2625                            e.into(),
2626                        ))));
2627                    }
2628                }
2629
2630                // A message has been received from the channel
2631                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2632
2633                std::task::Poll::Ready(Some(match header.ordinal {
2634                    0x482cf3745bab65f6 => {
2635                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2636                        let mut req = fidl::new_empty!(
2637                            fidl::encoding::EmptyPayload,
2638                            fidl::encoding::DefaultFuchsiaResourceDialect
2639                        );
2640                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
2641                        let control_handle =
2642                            PeerControllerControlHandle { inner: this.inner.clone() };
2643                        Ok(PeerControllerRequest::GetKnownPeers {
2644                            responder: PeerControllerGetKnownPeersResponder {
2645                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2646                                tx_id: header.tx_id,
2647                            },
2648                        })
2649                    }
2650                    0x5f6f76185d19eb18 => {
2651                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2652                        let mut req = fidl::new_empty!(
2653                            PeerControllerGetPeerIdRequest,
2654                            fidl::encoding::DefaultFuchsiaResourceDialect
2655                        );
2656                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PeerControllerGetPeerIdRequest>(&header, _body_bytes, handles, &mut req)?;
2657                        let control_handle =
2658                            PeerControllerControlHandle { inner: this.inner.clone() };
2659                        Ok(PeerControllerRequest::GetPeerId {
2660                            payload: req,
2661                            responder: PeerControllerGetPeerIdResponder {
2662                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2663                                tx_id: header.tx_id,
2664                            },
2665                        })
2666                    }
2667                    0x3269624c9e1d6ab3 => {
2668                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2669                        let mut req = fidl::new_empty!(
2670                            PeerControllerSetDiscoveryRequest,
2671                            fidl::encoding::DefaultFuchsiaResourceDialect
2672                        );
2673                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PeerControllerSetDiscoveryRequest>(&header, _body_bytes, handles, &mut req)?;
2674                        let control_handle =
2675                            PeerControllerControlHandle { inner: this.inner.clone() };
2676                        Ok(PeerControllerRequest::SetDiscovery {
2677                            payload: req,
2678                            responder: PeerControllerSetDiscoveryResponder {
2679                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2680                                tx_id: header.tx_id,
2681                            },
2682                        })
2683                    }
2684                    _ if header.tx_id == 0
2685                        && header
2686                            .dynamic_flags()
2687                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2688                    {
2689                        Ok(PeerControllerRequest::_UnknownMethod {
2690                            ordinal: header.ordinal,
2691                            control_handle: PeerControllerControlHandle {
2692                                inner: this.inner.clone(),
2693                            },
2694                            method_type: fidl::MethodType::OneWay,
2695                        })
2696                    }
2697                    _ if header
2698                        .dynamic_flags()
2699                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2700                    {
2701                        this.inner.send_framework_err(
2702                            fidl::encoding::FrameworkErr::UnknownMethod,
2703                            header.tx_id,
2704                            header.ordinal,
2705                            header.dynamic_flags(),
2706                            (bytes, handles),
2707                        )?;
2708                        Ok(PeerControllerRequest::_UnknownMethod {
2709                            ordinal: header.ordinal,
2710                            control_handle: PeerControllerControlHandle {
2711                                inner: this.inner.clone(),
2712                            },
2713                            method_type: fidl::MethodType::TwoWay,
2714                        })
2715                    }
2716                    _ => Err(fidl::Error::UnknownOrdinal {
2717                        ordinal: header.ordinal,
2718                        protocol_name:
2719                            <PeerControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2720                    }),
2721                }))
2722            },
2723        )
2724    }
2725}
2726
2727#[derive(Debug)]
2728pub enum PeerControllerRequest {
2729    /// Get a list of discovered peers.
2730    ///
2731    /// * error Returns `INTERNAL` if the operation failed (check logs).
2732    GetKnownPeers { responder: PeerControllerGetKnownPeersResponder },
2733    /// Get a peer's ID from its address.
2734    ///
2735    /// * error Returns `INTERNAL` if the operation failed (check logs).
2736    /// * error Returns `TIMEOUT` if the operation timed out without finding the peer.
2737    /// * error Returns `MISSING_PARAMETERS` if `address` is missing.
2738    GetPeerId {
2739        payload: PeerControllerGetPeerIdRequest,
2740        responder: PeerControllerGetPeerIdResponder,
2741    },
2742    /// Set discovery state.
2743    ///
2744    /// * error Returns `INTERNAL` if the operation failed (check logs).
2745    /// * error Returns `MISSING_PARAMETERS` if `discovery` is missing.
2746    SetDiscovery {
2747        payload: PeerControllerSetDiscoveryRequest,
2748        responder: PeerControllerSetDiscoveryResponder,
2749    },
2750    /// An interaction was received which does not match any known method.
2751    #[non_exhaustive]
2752    _UnknownMethod {
2753        /// Ordinal of the method that was called.
2754        ordinal: u64,
2755        control_handle: PeerControllerControlHandle,
2756        method_type: fidl::MethodType,
2757    },
2758}
2759
2760impl PeerControllerRequest {
2761    #[allow(irrefutable_let_patterns)]
2762    pub fn into_get_known_peers(self) -> Option<(PeerControllerGetKnownPeersResponder)> {
2763        if let PeerControllerRequest::GetKnownPeers { responder } = self {
2764            Some((responder))
2765        } else {
2766            None
2767        }
2768    }
2769
2770    #[allow(irrefutable_let_patterns)]
2771    pub fn into_get_peer_id(
2772        self,
2773    ) -> Option<(PeerControllerGetPeerIdRequest, PeerControllerGetPeerIdResponder)> {
2774        if let PeerControllerRequest::GetPeerId { payload, responder } = self {
2775            Some((payload, responder))
2776        } else {
2777            None
2778        }
2779    }
2780
2781    #[allow(irrefutable_let_patterns)]
2782    pub fn into_set_discovery(
2783        self,
2784    ) -> Option<(PeerControllerSetDiscoveryRequest, PeerControllerSetDiscoveryResponder)> {
2785        if let PeerControllerRequest::SetDiscovery { payload, responder } = self {
2786            Some((payload, responder))
2787        } else {
2788            None
2789        }
2790    }
2791
2792    /// Name of the method defined in FIDL
2793    pub fn method_name(&self) -> &'static str {
2794        match *self {
2795            PeerControllerRequest::GetKnownPeers { .. } => "get_known_peers",
2796            PeerControllerRequest::GetPeerId { .. } => "get_peer_id",
2797            PeerControllerRequest::SetDiscovery { .. } => "set_discovery",
2798            PeerControllerRequest::_UnknownMethod {
2799                method_type: fidl::MethodType::OneWay, ..
2800            } => "unknown one-way method",
2801            PeerControllerRequest::_UnknownMethod {
2802                method_type: fidl::MethodType::TwoWay, ..
2803            } => "unknown two-way method",
2804        }
2805    }
2806}
2807
2808#[derive(Debug, Clone)]
2809pub struct PeerControllerControlHandle {
2810    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2811}
2812
2813impl PeerControllerControlHandle {
2814    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
2815        self.inner.shutdown_with_epitaph(status.into())
2816    }
2817}
2818
2819impl fidl::endpoints::ControlHandle for PeerControllerControlHandle {
2820    fn shutdown(&self) {
2821        self.inner.shutdown()
2822    }
2823
2824    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
2825        self.inner.shutdown_with_epitaph(status)
2826    }
2827
2828    fn is_closed(&self) -> bool {
2829        self.inner.channel().is_closed()
2830    }
2831    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2832        self.inner.channel().on_closed()
2833    }
2834
2835    #[cfg(target_os = "fuchsia")]
2836    fn signal_peer(
2837        &self,
2838        clear_mask: zx::Signals,
2839        set_mask: zx::Signals,
2840    ) -> Result<(), zx_status::Status> {
2841        use fidl::Peered;
2842        self.inner.channel().signal_peer(clear_mask, set_mask)
2843    }
2844}
2845
2846impl PeerControllerControlHandle {}
2847
2848#[must_use = "FIDL methods require a response to be sent"]
2849#[derive(Debug)]
2850pub struct PeerControllerGetKnownPeersResponder {
2851    control_handle: std::mem::ManuallyDrop<PeerControllerControlHandle>,
2852    tx_id: u32,
2853}
2854
2855/// Set the the channel to be shutdown (see [`PeerControllerControlHandle::shutdown`])
2856/// if the responder is dropped without sending a response, so that the client
2857/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2858impl std::ops::Drop for PeerControllerGetKnownPeersResponder {
2859    fn drop(&mut self) {
2860        self.control_handle.shutdown();
2861        // Safety: drops once, never accessed again
2862        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2863    }
2864}
2865
2866impl fidl::endpoints::Responder for PeerControllerGetKnownPeersResponder {
2867    type ControlHandle = PeerControllerControlHandle;
2868
2869    fn control_handle(&self) -> &PeerControllerControlHandle {
2870        &self.control_handle
2871    }
2872
2873    fn drop_without_shutdown(mut self) {
2874        // Safety: drops once, never accessed again due to mem::forget
2875        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2876        // Prevent Drop from running (which would shut down the channel)
2877        std::mem::forget(self);
2878    }
2879}
2880
2881impl PeerControllerGetKnownPeersResponder {
2882    /// Sends a response to the FIDL transaction.
2883    ///
2884    /// Sets the channel to shutdown if an error occurs.
2885    pub fn send(
2886        self,
2887        mut result: Result<&PeerControllerGetKnownPeersResponse, Error>,
2888    ) -> Result<(), fidl::Error> {
2889        let _result = self.send_raw(result);
2890        if _result.is_err() {
2891            self.control_handle.shutdown();
2892        }
2893        self.drop_without_shutdown();
2894        _result
2895    }
2896
2897    /// Similar to "send" but does not shutdown the channel if an error occurs.
2898    pub fn send_no_shutdown_on_err(
2899        self,
2900        mut result: Result<&PeerControllerGetKnownPeersResponse, Error>,
2901    ) -> Result<(), fidl::Error> {
2902        let _result = self.send_raw(result);
2903        self.drop_without_shutdown();
2904        _result
2905    }
2906
2907    fn send_raw(
2908        &self,
2909        mut result: Result<&PeerControllerGetKnownPeersResponse, Error>,
2910    ) -> Result<(), fidl::Error> {
2911        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2912            PeerControllerGetKnownPeersResponse,
2913            Error,
2914        >>(
2915            fidl::encoding::FlexibleResult::new(result),
2916            self.tx_id,
2917            0x482cf3745bab65f6,
2918            fidl::encoding::DynamicFlags::FLEXIBLE,
2919        )
2920    }
2921}
2922
2923#[must_use = "FIDL methods require a response to be sent"]
2924#[derive(Debug)]
2925pub struct PeerControllerGetPeerIdResponder {
2926    control_handle: std::mem::ManuallyDrop<PeerControllerControlHandle>,
2927    tx_id: u32,
2928}
2929
2930/// Set the the channel to be shutdown (see [`PeerControllerControlHandle::shutdown`])
2931/// if the responder is dropped without sending a response, so that the client
2932/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2933impl std::ops::Drop for PeerControllerGetPeerIdResponder {
2934    fn drop(&mut self) {
2935        self.control_handle.shutdown();
2936        // Safety: drops once, never accessed again
2937        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2938    }
2939}
2940
2941impl fidl::endpoints::Responder for PeerControllerGetPeerIdResponder {
2942    type ControlHandle = PeerControllerControlHandle;
2943
2944    fn control_handle(&self) -> &PeerControllerControlHandle {
2945        &self.control_handle
2946    }
2947
2948    fn drop_without_shutdown(mut self) {
2949        // Safety: drops once, never accessed again due to mem::forget
2950        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2951        // Prevent Drop from running (which would shut down the channel)
2952        std::mem::forget(self);
2953    }
2954}
2955
2956impl PeerControllerGetPeerIdResponder {
2957    /// Sends a response to the FIDL transaction.
2958    ///
2959    /// Sets the channel to shutdown if an error occurs.
2960    pub fn send(
2961        self,
2962        mut result: Result<&PeerControllerGetPeerIdResponse, Error>,
2963    ) -> Result<(), fidl::Error> {
2964        let _result = self.send_raw(result);
2965        if _result.is_err() {
2966            self.control_handle.shutdown();
2967        }
2968        self.drop_without_shutdown();
2969        _result
2970    }
2971
2972    /// Similar to "send" but does not shutdown the channel if an error occurs.
2973    pub fn send_no_shutdown_on_err(
2974        self,
2975        mut result: Result<&PeerControllerGetPeerIdResponse, Error>,
2976    ) -> Result<(), fidl::Error> {
2977        let _result = self.send_raw(result);
2978        self.drop_without_shutdown();
2979        _result
2980    }
2981
2982    fn send_raw(
2983        &self,
2984        mut result: Result<&PeerControllerGetPeerIdResponse, Error>,
2985    ) -> Result<(), fidl::Error> {
2986        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2987            PeerControllerGetPeerIdResponse,
2988            Error,
2989        >>(
2990            fidl::encoding::FlexibleResult::new(result),
2991            self.tx_id,
2992            0x5f6f76185d19eb18,
2993            fidl::encoding::DynamicFlags::FLEXIBLE,
2994        )
2995    }
2996}
2997
2998#[must_use = "FIDL methods require a response to be sent"]
2999#[derive(Debug)]
3000pub struct PeerControllerSetDiscoveryResponder {
3001    control_handle: std::mem::ManuallyDrop<PeerControllerControlHandle>,
3002    tx_id: u32,
3003}
3004
3005/// Set the the channel to be shutdown (see [`PeerControllerControlHandle::shutdown`])
3006/// if the responder is dropped without sending a response, so that the client
3007/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3008impl std::ops::Drop for PeerControllerSetDiscoveryResponder {
3009    fn drop(&mut self) {
3010        self.control_handle.shutdown();
3011        // Safety: drops once, never accessed again
3012        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3013    }
3014}
3015
3016impl fidl::endpoints::Responder for PeerControllerSetDiscoveryResponder {
3017    type ControlHandle = PeerControllerControlHandle;
3018
3019    fn control_handle(&self) -> &PeerControllerControlHandle {
3020        &self.control_handle
3021    }
3022
3023    fn drop_without_shutdown(mut self) {
3024        // Safety: drops once, never accessed again due to mem::forget
3025        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3026        // Prevent Drop from running (which would shut down the channel)
3027        std::mem::forget(self);
3028    }
3029}
3030
3031impl PeerControllerSetDiscoveryResponder {
3032    /// Sends a response to the FIDL transaction.
3033    ///
3034    /// Sets the channel to shutdown if an error occurs.
3035    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3036        let _result = self.send_raw(result);
3037        if _result.is_err() {
3038            self.control_handle.shutdown();
3039        }
3040        self.drop_without_shutdown();
3041        _result
3042    }
3043
3044    /// Similar to "send" but does not shutdown the channel if an error occurs.
3045    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3046        let _result = self.send_raw(result);
3047        self.drop_without_shutdown();
3048        _result
3049    }
3050
3051    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3052        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
3053            fidl::encoding::EmptyStruct,
3054            Error,
3055        >>(
3056            fidl::encoding::FlexibleResult::new(result),
3057            self.tx_id,
3058            0x3269624c9e1d6ab3,
3059            fidl::encoding::DynamicFlags::FLEXIBLE,
3060        )
3061    }
3062}
3063
3064#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3065pub struct PeripheralControllerMarker;
3066
3067impl fidl::endpoints::ProtocolMarker for PeripheralControllerMarker {
3068    type Proxy = PeripheralControllerProxy;
3069    type RequestStream = PeripheralControllerRequestStream;
3070    #[cfg(target_os = "fuchsia")]
3071    type SynchronousProxy = PeripheralControllerSynchronousProxy;
3072
3073    const DEBUG_NAME: &'static str = "fuchsia.bluetooth.affordances.PeripheralController";
3074}
3075impl fidl::endpoints::DiscoverableProtocolMarker for PeripheralControllerMarker {}
3076pub type PeripheralControllerAdvertiseResult = Result<PeripheralControllerAdvertiseResponse, Error>;
3077
3078pub trait PeripheralControllerProxyInterface: Send + Sync {
3079    type AdvertiseResponseFut: std::future::Future<Output = Result<PeripheralControllerAdvertiseResult, fidl::Error>>
3080        + Send;
3081    fn r#advertise(
3082        &self,
3083        payload: &PeripheralControllerAdvertiseRequest,
3084    ) -> Self::AdvertiseResponseFut;
3085}
3086#[derive(Debug)]
3087#[cfg(target_os = "fuchsia")]
3088pub struct PeripheralControllerSynchronousProxy {
3089    client: fidl::client::sync::Client,
3090}
3091
3092#[cfg(target_os = "fuchsia")]
3093impl fidl::endpoints::SynchronousProxy for PeripheralControllerSynchronousProxy {
3094    type Proxy = PeripheralControllerProxy;
3095    type Protocol = PeripheralControllerMarker;
3096
3097    fn from_channel(inner: fidl::Channel) -> Self {
3098        Self::new(inner)
3099    }
3100
3101    fn into_channel(self) -> fidl::Channel {
3102        self.client.into_channel()
3103    }
3104
3105    fn as_channel(&self) -> &fidl::Channel {
3106        self.client.as_channel()
3107    }
3108}
3109
3110#[cfg(target_os = "fuchsia")]
3111impl PeripheralControllerSynchronousProxy {
3112    pub fn new(channel: fidl::Channel) -> Self {
3113        Self { client: fidl::client::sync::Client::new(channel) }
3114    }
3115
3116    pub fn into_channel(self) -> fidl::Channel {
3117        self.client.into_channel()
3118    }
3119
3120    /// Waits until an event arrives and returns it. It is safe for other
3121    /// threads to make concurrent requests while waiting for an event.
3122    pub fn wait_for_event(
3123        &self,
3124        deadline: zx::MonotonicInstant,
3125    ) -> Result<PeripheralControllerEvent, fidl::Error> {
3126        PeripheralControllerEvent::decode(
3127            self.client.wait_for_event::<PeripheralControllerMarker>(deadline)?,
3128        )
3129    }
3130
3131    /// Start advertising.
3132    ///
3133    /// * error Returns `INTERNAL` if the operation failed (check logs).
3134    /// * error Returns `TIMEOUT` if the advertisement timed out without a connection.
3135    /// * error Returns `MISSING_PARAMETERS` if `parameters` or `timeout` is missing.
3136    pub fn r#advertise(
3137        &self,
3138        mut payload: &PeripheralControllerAdvertiseRequest,
3139        ___deadline: zx::MonotonicInstant,
3140    ) -> Result<PeripheralControllerAdvertiseResult, fidl::Error> {
3141        let _response = self.client.send_query::<
3142            PeripheralControllerAdvertiseRequest,
3143            fidl::encoding::FlexibleResultType<PeripheralControllerAdvertiseResponse, Error>,
3144            PeripheralControllerMarker,
3145        >(
3146            payload,
3147            0x59079a81362a66f3,
3148            fidl::encoding::DynamicFlags::FLEXIBLE,
3149            ___deadline,
3150        )?
3151        .into_result::<PeripheralControllerMarker>("advertise")?;
3152        Ok(_response.map(|x| x))
3153    }
3154}
3155
3156#[cfg(target_os = "fuchsia")]
3157impl From<PeripheralControllerSynchronousProxy> for zx::NullableHandle {
3158    fn from(value: PeripheralControllerSynchronousProxy) -> Self {
3159        value.into_channel().into()
3160    }
3161}
3162
3163#[cfg(target_os = "fuchsia")]
3164impl From<fidl::Channel> for PeripheralControllerSynchronousProxy {
3165    fn from(value: fidl::Channel) -> Self {
3166        Self::new(value)
3167    }
3168}
3169
3170#[cfg(target_os = "fuchsia")]
3171impl fidl::endpoints::FromClient for PeripheralControllerSynchronousProxy {
3172    type Protocol = PeripheralControllerMarker;
3173
3174    fn from_client(value: fidl::endpoints::ClientEnd<PeripheralControllerMarker>) -> Self {
3175        Self::new(value.into_channel())
3176    }
3177}
3178
3179#[derive(Debug, Clone)]
3180pub struct PeripheralControllerProxy {
3181    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3182}
3183
3184impl fidl::endpoints::Proxy for PeripheralControllerProxy {
3185    type Protocol = PeripheralControllerMarker;
3186
3187    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3188        Self::new(inner)
3189    }
3190
3191    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3192        self.client.into_channel().map_err(|client| Self { client })
3193    }
3194
3195    fn as_channel(&self) -> &::fidl::AsyncChannel {
3196        self.client.as_channel()
3197    }
3198}
3199
3200impl PeripheralControllerProxy {
3201    /// Create a new Proxy for fuchsia.bluetooth.affordances/PeripheralController.
3202    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3203        let protocol_name =
3204            <PeripheralControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3205        Self { client: fidl::client::Client::new(channel, protocol_name) }
3206    }
3207
3208    /// Get a Stream of events from the remote end of the protocol.
3209    ///
3210    /// # Panics
3211    ///
3212    /// Panics if the event stream was already taken.
3213    pub fn take_event_stream(&self) -> PeripheralControllerEventStream {
3214        PeripheralControllerEventStream { event_receiver: self.client.take_event_receiver() }
3215    }
3216
3217    /// Start advertising.
3218    ///
3219    /// * error Returns `INTERNAL` if the operation failed (check logs).
3220    /// * error Returns `TIMEOUT` if the advertisement timed out without a connection.
3221    /// * error Returns `MISSING_PARAMETERS` if `parameters` or `timeout` is missing.
3222    pub fn r#advertise(
3223        &self,
3224        mut payload: &PeripheralControllerAdvertiseRequest,
3225    ) -> fidl::client::QueryResponseFut<
3226        PeripheralControllerAdvertiseResult,
3227        fidl::encoding::DefaultFuchsiaResourceDialect,
3228    > {
3229        PeripheralControllerProxyInterface::r#advertise(self, payload)
3230    }
3231}
3232
3233impl PeripheralControllerProxyInterface for PeripheralControllerProxy {
3234    type AdvertiseResponseFut = fidl::client::QueryResponseFut<
3235        PeripheralControllerAdvertiseResult,
3236        fidl::encoding::DefaultFuchsiaResourceDialect,
3237    >;
3238    fn r#advertise(
3239        &self,
3240        mut payload: &PeripheralControllerAdvertiseRequest,
3241    ) -> Self::AdvertiseResponseFut {
3242        fn _decode(
3243            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3244        ) -> Result<PeripheralControllerAdvertiseResult, fidl::Error> {
3245            let _response = fidl::client::decode_transaction_body::<
3246                fidl::encoding::FlexibleResultType<PeripheralControllerAdvertiseResponse, Error>,
3247                fidl::encoding::DefaultFuchsiaResourceDialect,
3248                0x59079a81362a66f3,
3249            >(_buf?)?
3250            .into_result::<PeripheralControllerMarker>("advertise")?;
3251            Ok(_response.map(|x| x))
3252        }
3253        self.client.send_query_and_decode::<
3254            PeripheralControllerAdvertiseRequest,
3255            PeripheralControllerAdvertiseResult,
3256        >(
3257            payload,
3258            0x59079a81362a66f3,
3259            fidl::encoding::DynamicFlags::FLEXIBLE,
3260            _decode,
3261        )
3262    }
3263}
3264
3265pub struct PeripheralControllerEventStream {
3266    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3267}
3268
3269impl std::marker::Unpin for PeripheralControllerEventStream {}
3270
3271impl futures::stream::FusedStream for PeripheralControllerEventStream {
3272    fn is_terminated(&self) -> bool {
3273        self.event_receiver.is_terminated()
3274    }
3275}
3276
3277impl futures::Stream for PeripheralControllerEventStream {
3278    type Item = Result<PeripheralControllerEvent, fidl::Error>;
3279
3280    fn poll_next(
3281        mut self: std::pin::Pin<&mut Self>,
3282        cx: &mut std::task::Context<'_>,
3283    ) -> std::task::Poll<Option<Self::Item>> {
3284        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3285            &mut self.event_receiver,
3286            cx
3287        )?) {
3288            Some(buf) => std::task::Poll::Ready(Some(PeripheralControllerEvent::decode(buf))),
3289            None => std::task::Poll::Ready(None),
3290        }
3291    }
3292}
3293
3294#[derive(Debug)]
3295pub enum PeripheralControllerEvent {
3296    #[non_exhaustive]
3297    _UnknownEvent {
3298        /// Ordinal of the event that was sent.
3299        ordinal: u64,
3300    },
3301}
3302
3303impl PeripheralControllerEvent {
3304    /// Decodes a message buffer as a [`PeripheralControllerEvent`].
3305    fn decode(
3306        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3307    ) -> Result<PeripheralControllerEvent, fidl::Error> {
3308        let (bytes, _handles) = buf.split_mut();
3309        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3310        debug_assert_eq!(tx_header.tx_id, 0);
3311        match tx_header.ordinal {
3312            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3313                Ok(PeripheralControllerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
3314            }
3315            _ => Err(fidl::Error::UnknownOrdinal {
3316                ordinal: tx_header.ordinal,
3317                protocol_name:
3318                    <PeripheralControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3319            }),
3320        }
3321    }
3322}
3323
3324/// A Stream of incoming requests for fuchsia.bluetooth.affordances/PeripheralController.
3325pub struct PeripheralControllerRequestStream {
3326    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3327    is_terminated: bool,
3328}
3329
3330impl std::marker::Unpin for PeripheralControllerRequestStream {}
3331
3332impl futures::stream::FusedStream for PeripheralControllerRequestStream {
3333    fn is_terminated(&self) -> bool {
3334        self.is_terminated
3335    }
3336}
3337
3338impl fidl::endpoints::RequestStream for PeripheralControllerRequestStream {
3339    type Protocol = PeripheralControllerMarker;
3340    type ControlHandle = PeripheralControllerControlHandle;
3341
3342    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3343        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3344    }
3345
3346    fn control_handle(&self) -> Self::ControlHandle {
3347        PeripheralControllerControlHandle { inner: self.inner.clone() }
3348    }
3349
3350    fn into_inner(
3351        self,
3352    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3353    {
3354        (self.inner, self.is_terminated)
3355    }
3356
3357    fn from_inner(
3358        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3359        is_terminated: bool,
3360    ) -> Self {
3361        Self { inner, is_terminated }
3362    }
3363}
3364
3365impl futures::Stream for PeripheralControllerRequestStream {
3366    type Item = Result<PeripheralControllerRequest, fidl::Error>;
3367
3368    fn poll_next(
3369        mut self: std::pin::Pin<&mut Self>,
3370        cx: &mut std::task::Context<'_>,
3371    ) -> std::task::Poll<Option<Self::Item>> {
3372        let this = &mut *self;
3373        if this.inner.check_shutdown(cx) {
3374            this.is_terminated = true;
3375            return std::task::Poll::Ready(None);
3376        }
3377        if this.is_terminated {
3378            panic!("polled PeripheralControllerRequestStream after completion");
3379        }
3380        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3381            |bytes, handles| {
3382                match this.inner.channel().read_etc(cx, bytes, handles) {
3383                    std::task::Poll::Ready(Ok(())) => {}
3384                    std::task::Poll::Pending => return std::task::Poll::Pending,
3385                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3386                        this.is_terminated = true;
3387                        return std::task::Poll::Ready(None);
3388                    }
3389                    std::task::Poll::Ready(Err(e)) => {
3390                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3391                            e.into(),
3392                        ))));
3393                    }
3394                }
3395
3396                // A message has been received from the channel
3397                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3398
3399                std::task::Poll::Ready(Some(match header.ordinal {
3400                0x59079a81362a66f3 => {
3401                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3402                    let mut req = fidl::new_empty!(PeripheralControllerAdvertiseRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
3403                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PeripheralControllerAdvertiseRequest>(&header, _body_bytes, handles, &mut req)?;
3404                    let control_handle = PeripheralControllerControlHandle {
3405                        inner: this.inner.clone(),
3406                    };
3407                    Ok(PeripheralControllerRequest::Advertise {payload: req,
3408                        responder: PeripheralControllerAdvertiseResponder {
3409                            control_handle: std::mem::ManuallyDrop::new(control_handle),
3410                            tx_id: header.tx_id,
3411                        },
3412                    })
3413                }
3414                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3415                    Ok(PeripheralControllerRequest::_UnknownMethod {
3416                        ordinal: header.ordinal,
3417                        control_handle: PeripheralControllerControlHandle { inner: this.inner.clone() },
3418                        method_type: fidl::MethodType::OneWay,
3419                    })
3420                }
3421                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3422                    this.inner.send_framework_err(
3423                        fidl::encoding::FrameworkErr::UnknownMethod,
3424                        header.tx_id,
3425                        header.ordinal,
3426                        header.dynamic_flags(),
3427                        (bytes, handles),
3428                    )?;
3429                    Ok(PeripheralControllerRequest::_UnknownMethod {
3430                        ordinal: header.ordinal,
3431                        control_handle: PeripheralControllerControlHandle { inner: this.inner.clone() },
3432                        method_type: fidl::MethodType::TwoWay,
3433                    })
3434                }
3435                _ => Err(fidl::Error::UnknownOrdinal {
3436                    ordinal: header.ordinal,
3437                    protocol_name: <PeripheralControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3438                }),
3439            }))
3440            },
3441        )
3442    }
3443}
3444
3445#[derive(Debug)]
3446pub enum PeripheralControllerRequest {
3447    /// Start advertising.
3448    ///
3449    /// * error Returns `INTERNAL` if the operation failed (check logs).
3450    /// * error Returns `TIMEOUT` if the advertisement timed out without a connection.
3451    /// * error Returns `MISSING_PARAMETERS` if `parameters` or `timeout` is missing.
3452    Advertise {
3453        payload: PeripheralControllerAdvertiseRequest,
3454        responder: PeripheralControllerAdvertiseResponder,
3455    },
3456    /// An interaction was received which does not match any known method.
3457    #[non_exhaustive]
3458    _UnknownMethod {
3459        /// Ordinal of the method that was called.
3460        ordinal: u64,
3461        control_handle: PeripheralControllerControlHandle,
3462        method_type: fidl::MethodType,
3463    },
3464}
3465
3466impl PeripheralControllerRequest {
3467    #[allow(irrefutable_let_patterns)]
3468    pub fn into_advertise(
3469        self,
3470    ) -> Option<(PeripheralControllerAdvertiseRequest, PeripheralControllerAdvertiseResponder)>
3471    {
3472        if let PeripheralControllerRequest::Advertise { payload, responder } = self {
3473            Some((payload, responder))
3474        } else {
3475            None
3476        }
3477    }
3478
3479    /// Name of the method defined in FIDL
3480    pub fn method_name(&self) -> &'static str {
3481        match *self {
3482            PeripheralControllerRequest::Advertise { .. } => "advertise",
3483            PeripheralControllerRequest::_UnknownMethod {
3484                method_type: fidl::MethodType::OneWay,
3485                ..
3486            } => "unknown one-way method",
3487            PeripheralControllerRequest::_UnknownMethod {
3488                method_type: fidl::MethodType::TwoWay,
3489                ..
3490            } => "unknown two-way method",
3491        }
3492    }
3493}
3494
3495#[derive(Debug, Clone)]
3496pub struct PeripheralControllerControlHandle {
3497    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3498}
3499
3500impl PeripheralControllerControlHandle {
3501    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
3502        self.inner.shutdown_with_epitaph(status.into())
3503    }
3504}
3505
3506impl fidl::endpoints::ControlHandle for PeripheralControllerControlHandle {
3507    fn shutdown(&self) {
3508        self.inner.shutdown()
3509    }
3510
3511    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
3512        self.inner.shutdown_with_epitaph(status)
3513    }
3514
3515    fn is_closed(&self) -> bool {
3516        self.inner.channel().is_closed()
3517    }
3518    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3519        self.inner.channel().on_closed()
3520    }
3521
3522    #[cfg(target_os = "fuchsia")]
3523    fn signal_peer(
3524        &self,
3525        clear_mask: zx::Signals,
3526        set_mask: zx::Signals,
3527    ) -> Result<(), zx_status::Status> {
3528        use fidl::Peered;
3529        self.inner.channel().signal_peer(clear_mask, set_mask)
3530    }
3531}
3532
3533impl PeripheralControllerControlHandle {}
3534
3535#[must_use = "FIDL methods require a response to be sent"]
3536#[derive(Debug)]
3537pub struct PeripheralControllerAdvertiseResponder {
3538    control_handle: std::mem::ManuallyDrop<PeripheralControllerControlHandle>,
3539    tx_id: u32,
3540}
3541
3542/// Set the the channel to be shutdown (see [`PeripheralControllerControlHandle::shutdown`])
3543/// if the responder is dropped without sending a response, so that the client
3544/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3545impl std::ops::Drop for PeripheralControllerAdvertiseResponder {
3546    fn drop(&mut self) {
3547        self.control_handle.shutdown();
3548        // Safety: drops once, never accessed again
3549        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3550    }
3551}
3552
3553impl fidl::endpoints::Responder for PeripheralControllerAdvertiseResponder {
3554    type ControlHandle = PeripheralControllerControlHandle;
3555
3556    fn control_handle(&self) -> &PeripheralControllerControlHandle {
3557        &self.control_handle
3558    }
3559
3560    fn drop_without_shutdown(mut self) {
3561        // Safety: drops once, never accessed again due to mem::forget
3562        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3563        // Prevent Drop from running (which would shut down the channel)
3564        std::mem::forget(self);
3565    }
3566}
3567
3568impl PeripheralControllerAdvertiseResponder {
3569    /// Sends a response to the FIDL transaction.
3570    ///
3571    /// Sets the channel to shutdown if an error occurs.
3572    pub fn send(
3573        self,
3574        mut result: Result<&PeripheralControllerAdvertiseResponse, Error>,
3575    ) -> Result<(), fidl::Error> {
3576        let _result = self.send_raw(result);
3577        if _result.is_err() {
3578            self.control_handle.shutdown();
3579        }
3580        self.drop_without_shutdown();
3581        _result
3582    }
3583
3584    /// Similar to "send" but does not shutdown the channel if an error occurs.
3585    pub fn send_no_shutdown_on_err(
3586        self,
3587        mut result: Result<&PeripheralControllerAdvertiseResponse, Error>,
3588    ) -> Result<(), fidl::Error> {
3589        let _result = self.send_raw(result);
3590        self.drop_without_shutdown();
3591        _result
3592    }
3593
3594    fn send_raw(
3595        &self,
3596        mut result: Result<&PeripheralControllerAdvertiseResponse, Error>,
3597    ) -> Result<(), fidl::Error> {
3598        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
3599            PeripheralControllerAdvertiseResponse,
3600            Error,
3601        >>(
3602            fidl::encoding::FlexibleResult::new(result),
3603            self.tx_id,
3604            0x59079a81362a66f3,
3605            fidl::encoding::DynamicFlags::FLEXIBLE,
3606        )
3607    }
3608}
3609
3610#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3611pub struct ScanResultListenerMarker;
3612
3613impl fidl::endpoints::ProtocolMarker for ScanResultListenerMarker {
3614    type Proxy = ScanResultListenerProxy;
3615    type RequestStream = ScanResultListenerRequestStream;
3616    #[cfg(target_os = "fuchsia")]
3617    type SynchronousProxy = ScanResultListenerSynchronousProxy;
3618
3619    const DEBUG_NAME: &'static str = "(anonymous) ScanResultListener";
3620}
3621
3622pub trait ScanResultListenerProxyInterface: Send + Sync {
3623    type OnPeersDiscoveredResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
3624    fn r#on_peers_discovered(
3625        &self,
3626        payload: &ScanResultListenerOnPeersDiscoveredRequest,
3627    ) -> Self::OnPeersDiscoveredResponseFut;
3628}
3629#[derive(Debug)]
3630#[cfg(target_os = "fuchsia")]
3631pub struct ScanResultListenerSynchronousProxy {
3632    client: fidl::client::sync::Client,
3633}
3634
3635#[cfg(target_os = "fuchsia")]
3636impl fidl::endpoints::SynchronousProxy for ScanResultListenerSynchronousProxy {
3637    type Proxy = ScanResultListenerProxy;
3638    type Protocol = ScanResultListenerMarker;
3639
3640    fn from_channel(inner: fidl::Channel) -> Self {
3641        Self::new(inner)
3642    }
3643
3644    fn into_channel(self) -> fidl::Channel {
3645        self.client.into_channel()
3646    }
3647
3648    fn as_channel(&self) -> &fidl::Channel {
3649        self.client.as_channel()
3650    }
3651}
3652
3653#[cfg(target_os = "fuchsia")]
3654impl ScanResultListenerSynchronousProxy {
3655    pub fn new(channel: fidl::Channel) -> Self {
3656        Self { client: fidl::client::sync::Client::new(channel) }
3657    }
3658
3659    pub fn into_channel(self) -> fidl::Channel {
3660        self.client.into_channel()
3661    }
3662
3663    /// Waits until an event arrives and returns it. It is safe for other
3664    /// threads to make concurrent requests while waiting for an event.
3665    pub fn wait_for_event(
3666        &self,
3667        deadline: zx::MonotonicInstant,
3668    ) -> Result<ScanResultListenerEvent, fidl::Error> {
3669        ScanResultListenerEvent::decode(
3670            self.client.wait_for_event::<ScanResultListenerMarker>(deadline)?,
3671        )
3672    }
3673
3674    /// Called by the server when peers are discovered.
3675    pub fn r#on_peers_discovered(
3676        &self,
3677        mut payload: &ScanResultListenerOnPeersDiscoveredRequest,
3678        ___deadline: zx::MonotonicInstant,
3679    ) -> Result<(), fidl::Error> {
3680        let _response = self.client.send_query::<
3681            ScanResultListenerOnPeersDiscoveredRequest,
3682            fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
3683            ScanResultListenerMarker,
3684        >(
3685            payload,
3686            0x111ea99f3f0c8009,
3687            fidl::encoding::DynamicFlags::FLEXIBLE,
3688            ___deadline,
3689        )?
3690        .into_result::<ScanResultListenerMarker>("on_peers_discovered")?;
3691        Ok(_response)
3692    }
3693}
3694
3695#[cfg(target_os = "fuchsia")]
3696impl From<ScanResultListenerSynchronousProxy> for zx::NullableHandle {
3697    fn from(value: ScanResultListenerSynchronousProxy) -> Self {
3698        value.into_channel().into()
3699    }
3700}
3701
3702#[cfg(target_os = "fuchsia")]
3703impl From<fidl::Channel> for ScanResultListenerSynchronousProxy {
3704    fn from(value: fidl::Channel) -> Self {
3705        Self::new(value)
3706    }
3707}
3708
3709#[cfg(target_os = "fuchsia")]
3710impl fidl::endpoints::FromClient for ScanResultListenerSynchronousProxy {
3711    type Protocol = ScanResultListenerMarker;
3712
3713    fn from_client(value: fidl::endpoints::ClientEnd<ScanResultListenerMarker>) -> Self {
3714        Self::new(value.into_channel())
3715    }
3716}
3717
3718#[derive(Debug, Clone)]
3719pub struct ScanResultListenerProxy {
3720    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3721}
3722
3723impl fidl::endpoints::Proxy for ScanResultListenerProxy {
3724    type Protocol = ScanResultListenerMarker;
3725
3726    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3727        Self::new(inner)
3728    }
3729
3730    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3731        self.client.into_channel().map_err(|client| Self { client })
3732    }
3733
3734    fn as_channel(&self) -> &::fidl::AsyncChannel {
3735        self.client.as_channel()
3736    }
3737}
3738
3739impl ScanResultListenerProxy {
3740    /// Create a new Proxy for fuchsia.bluetooth.affordances/ScanResultListener.
3741    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3742        let protocol_name =
3743            <ScanResultListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3744        Self { client: fidl::client::Client::new(channel, protocol_name) }
3745    }
3746
3747    /// Get a Stream of events from the remote end of the protocol.
3748    ///
3749    /// # Panics
3750    ///
3751    /// Panics if the event stream was already taken.
3752    pub fn take_event_stream(&self) -> ScanResultListenerEventStream {
3753        ScanResultListenerEventStream { event_receiver: self.client.take_event_receiver() }
3754    }
3755
3756    /// Called by the server when peers are discovered.
3757    pub fn r#on_peers_discovered(
3758        &self,
3759        mut payload: &ScanResultListenerOnPeersDiscoveredRequest,
3760    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
3761        ScanResultListenerProxyInterface::r#on_peers_discovered(self, payload)
3762    }
3763}
3764
3765impl ScanResultListenerProxyInterface for ScanResultListenerProxy {
3766    type OnPeersDiscoveredResponseFut =
3767        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
3768    fn r#on_peers_discovered(
3769        &self,
3770        mut payload: &ScanResultListenerOnPeersDiscoveredRequest,
3771    ) -> Self::OnPeersDiscoveredResponseFut {
3772        fn _decode(
3773            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3774        ) -> Result<(), fidl::Error> {
3775            let _response = fidl::client::decode_transaction_body::<
3776                fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
3777                fidl::encoding::DefaultFuchsiaResourceDialect,
3778                0x111ea99f3f0c8009,
3779            >(_buf?)?
3780            .into_result::<ScanResultListenerMarker>("on_peers_discovered")?;
3781            Ok(_response)
3782        }
3783        self.client.send_query_and_decode::<ScanResultListenerOnPeersDiscoveredRequest, ()>(
3784            payload,
3785            0x111ea99f3f0c8009,
3786            fidl::encoding::DynamicFlags::FLEXIBLE,
3787            _decode,
3788        )
3789    }
3790}
3791
3792pub struct ScanResultListenerEventStream {
3793    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3794}
3795
3796impl std::marker::Unpin for ScanResultListenerEventStream {}
3797
3798impl futures::stream::FusedStream for ScanResultListenerEventStream {
3799    fn is_terminated(&self) -> bool {
3800        self.event_receiver.is_terminated()
3801    }
3802}
3803
3804impl futures::Stream for ScanResultListenerEventStream {
3805    type Item = Result<ScanResultListenerEvent, fidl::Error>;
3806
3807    fn poll_next(
3808        mut self: std::pin::Pin<&mut Self>,
3809        cx: &mut std::task::Context<'_>,
3810    ) -> std::task::Poll<Option<Self::Item>> {
3811        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3812            &mut self.event_receiver,
3813            cx
3814        )?) {
3815            Some(buf) => std::task::Poll::Ready(Some(ScanResultListenerEvent::decode(buf))),
3816            None => std::task::Poll::Ready(None),
3817        }
3818    }
3819}
3820
3821#[derive(Debug)]
3822pub enum ScanResultListenerEvent {
3823    #[non_exhaustive]
3824    _UnknownEvent {
3825        /// Ordinal of the event that was sent.
3826        ordinal: u64,
3827    },
3828}
3829
3830impl ScanResultListenerEvent {
3831    /// Decodes a message buffer as a [`ScanResultListenerEvent`].
3832    fn decode(
3833        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3834    ) -> Result<ScanResultListenerEvent, fidl::Error> {
3835        let (bytes, _handles) = buf.split_mut();
3836        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3837        debug_assert_eq!(tx_header.tx_id, 0);
3838        match tx_header.ordinal {
3839            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3840                Ok(ScanResultListenerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
3841            }
3842            _ => Err(fidl::Error::UnknownOrdinal {
3843                ordinal: tx_header.ordinal,
3844                protocol_name:
3845                    <ScanResultListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3846            }),
3847        }
3848    }
3849}
3850
3851/// A Stream of incoming requests for fuchsia.bluetooth.affordances/ScanResultListener.
3852pub struct ScanResultListenerRequestStream {
3853    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3854    is_terminated: bool,
3855}
3856
3857impl std::marker::Unpin for ScanResultListenerRequestStream {}
3858
3859impl futures::stream::FusedStream for ScanResultListenerRequestStream {
3860    fn is_terminated(&self) -> bool {
3861        self.is_terminated
3862    }
3863}
3864
3865impl fidl::endpoints::RequestStream for ScanResultListenerRequestStream {
3866    type Protocol = ScanResultListenerMarker;
3867    type ControlHandle = ScanResultListenerControlHandle;
3868
3869    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3870        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3871    }
3872
3873    fn control_handle(&self) -> Self::ControlHandle {
3874        ScanResultListenerControlHandle { inner: self.inner.clone() }
3875    }
3876
3877    fn into_inner(
3878        self,
3879    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3880    {
3881        (self.inner, self.is_terminated)
3882    }
3883
3884    fn from_inner(
3885        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3886        is_terminated: bool,
3887    ) -> Self {
3888        Self { inner, is_terminated }
3889    }
3890}
3891
3892impl futures::Stream for ScanResultListenerRequestStream {
3893    type Item = Result<ScanResultListenerRequest, fidl::Error>;
3894
3895    fn poll_next(
3896        mut self: std::pin::Pin<&mut Self>,
3897        cx: &mut std::task::Context<'_>,
3898    ) -> std::task::Poll<Option<Self::Item>> {
3899        let this = &mut *self;
3900        if this.inner.check_shutdown(cx) {
3901            this.is_terminated = true;
3902            return std::task::Poll::Ready(None);
3903        }
3904        if this.is_terminated {
3905            panic!("polled ScanResultListenerRequestStream after completion");
3906        }
3907        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3908            |bytes, handles| {
3909                match this.inner.channel().read_etc(cx, bytes, handles) {
3910                    std::task::Poll::Ready(Ok(())) => {}
3911                    std::task::Poll::Pending => return std::task::Poll::Pending,
3912                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3913                        this.is_terminated = true;
3914                        return std::task::Poll::Ready(None);
3915                    }
3916                    std::task::Poll::Ready(Err(e)) => {
3917                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3918                            e.into(),
3919                        ))));
3920                    }
3921                }
3922
3923                // A message has been received from the channel
3924                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3925
3926                std::task::Poll::Ready(Some(match header.ordinal {
3927                0x111ea99f3f0c8009 => {
3928                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3929                    let mut req = fidl::new_empty!(ScanResultListenerOnPeersDiscoveredRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
3930                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ScanResultListenerOnPeersDiscoveredRequest>(&header, _body_bytes, handles, &mut req)?;
3931                    let control_handle = ScanResultListenerControlHandle {
3932                        inner: this.inner.clone(),
3933                    };
3934                    Ok(ScanResultListenerRequest::OnPeersDiscovered {payload: req,
3935                        responder: ScanResultListenerOnPeersDiscoveredResponder {
3936                            control_handle: std::mem::ManuallyDrop::new(control_handle),
3937                            tx_id: header.tx_id,
3938                        },
3939                    })
3940                }
3941                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3942                    Ok(ScanResultListenerRequest::_UnknownMethod {
3943                        ordinal: header.ordinal,
3944                        control_handle: ScanResultListenerControlHandle { inner: this.inner.clone() },
3945                        method_type: fidl::MethodType::OneWay,
3946                    })
3947                }
3948                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3949                    this.inner.send_framework_err(
3950                        fidl::encoding::FrameworkErr::UnknownMethod,
3951                        header.tx_id,
3952                        header.ordinal,
3953                        header.dynamic_flags(),
3954                        (bytes, handles),
3955                    )?;
3956                    Ok(ScanResultListenerRequest::_UnknownMethod {
3957                        ordinal: header.ordinal,
3958                        control_handle: ScanResultListenerControlHandle { inner: this.inner.clone() },
3959                        method_type: fidl::MethodType::TwoWay,
3960                    })
3961                }
3962                _ => Err(fidl::Error::UnknownOrdinal {
3963                    ordinal: header.ordinal,
3964                    protocol_name: <ScanResultListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3965                }),
3966            }))
3967            },
3968        )
3969    }
3970}
3971
3972/// Protocol implemented by the client to receive scan results.
3973#[derive(Debug)]
3974pub enum ScanResultListenerRequest {
3975    /// Called by the server when peers are discovered.
3976    OnPeersDiscovered {
3977        payload: ScanResultListenerOnPeersDiscoveredRequest,
3978        responder: ScanResultListenerOnPeersDiscoveredResponder,
3979    },
3980    /// An interaction was received which does not match any known method.
3981    #[non_exhaustive]
3982    _UnknownMethod {
3983        /// Ordinal of the method that was called.
3984        ordinal: u64,
3985        control_handle: ScanResultListenerControlHandle,
3986        method_type: fidl::MethodType,
3987    },
3988}
3989
3990impl ScanResultListenerRequest {
3991    #[allow(irrefutable_let_patterns)]
3992    pub fn into_on_peers_discovered(
3993        self,
3994    ) -> Option<(
3995        ScanResultListenerOnPeersDiscoveredRequest,
3996        ScanResultListenerOnPeersDiscoveredResponder,
3997    )> {
3998        if let ScanResultListenerRequest::OnPeersDiscovered { payload, responder } = self {
3999            Some((payload, responder))
4000        } else {
4001            None
4002        }
4003    }
4004
4005    /// Name of the method defined in FIDL
4006    pub fn method_name(&self) -> &'static str {
4007        match *self {
4008            ScanResultListenerRequest::OnPeersDiscovered { .. } => "on_peers_discovered",
4009            ScanResultListenerRequest::_UnknownMethod {
4010                method_type: fidl::MethodType::OneWay,
4011                ..
4012            } => "unknown one-way method",
4013            ScanResultListenerRequest::_UnknownMethod {
4014                method_type: fidl::MethodType::TwoWay,
4015                ..
4016            } => "unknown two-way method",
4017        }
4018    }
4019}
4020
4021#[derive(Debug, Clone)]
4022pub struct ScanResultListenerControlHandle {
4023    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4024}
4025
4026impl ScanResultListenerControlHandle {
4027    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
4028        self.inner.shutdown_with_epitaph(status.into())
4029    }
4030}
4031
4032impl fidl::endpoints::ControlHandle for ScanResultListenerControlHandle {
4033    fn shutdown(&self) {
4034        self.inner.shutdown()
4035    }
4036
4037    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
4038        self.inner.shutdown_with_epitaph(status)
4039    }
4040
4041    fn is_closed(&self) -> bool {
4042        self.inner.channel().is_closed()
4043    }
4044    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
4045        self.inner.channel().on_closed()
4046    }
4047
4048    #[cfg(target_os = "fuchsia")]
4049    fn signal_peer(
4050        &self,
4051        clear_mask: zx::Signals,
4052        set_mask: zx::Signals,
4053    ) -> Result<(), zx_status::Status> {
4054        use fidl::Peered;
4055        self.inner.channel().signal_peer(clear_mask, set_mask)
4056    }
4057}
4058
4059impl ScanResultListenerControlHandle {}
4060
4061#[must_use = "FIDL methods require a response to be sent"]
4062#[derive(Debug)]
4063pub struct ScanResultListenerOnPeersDiscoveredResponder {
4064    control_handle: std::mem::ManuallyDrop<ScanResultListenerControlHandle>,
4065    tx_id: u32,
4066}
4067
4068/// Set the the channel to be shutdown (see [`ScanResultListenerControlHandle::shutdown`])
4069/// if the responder is dropped without sending a response, so that the client
4070/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4071impl std::ops::Drop for ScanResultListenerOnPeersDiscoveredResponder {
4072    fn drop(&mut self) {
4073        self.control_handle.shutdown();
4074        // Safety: drops once, never accessed again
4075        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4076    }
4077}
4078
4079impl fidl::endpoints::Responder for ScanResultListenerOnPeersDiscoveredResponder {
4080    type ControlHandle = ScanResultListenerControlHandle;
4081
4082    fn control_handle(&self) -> &ScanResultListenerControlHandle {
4083        &self.control_handle
4084    }
4085
4086    fn drop_without_shutdown(mut self) {
4087        // Safety: drops once, never accessed again due to mem::forget
4088        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4089        // Prevent Drop from running (which would shut down the channel)
4090        std::mem::forget(self);
4091    }
4092}
4093
4094impl ScanResultListenerOnPeersDiscoveredResponder {
4095    /// Sends a response to the FIDL transaction.
4096    ///
4097    /// Sets the channel to shutdown if an error occurs.
4098    pub fn send(self) -> Result<(), fidl::Error> {
4099        let _result = self.send_raw();
4100        if _result.is_err() {
4101            self.control_handle.shutdown();
4102        }
4103        self.drop_without_shutdown();
4104        _result
4105    }
4106
4107    /// Similar to "send" but does not shutdown the channel if an error occurs.
4108    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
4109        let _result = self.send_raw();
4110        self.drop_without_shutdown();
4111        _result
4112    }
4113
4114    fn send_raw(&self) -> Result<(), fidl::Error> {
4115        self.control_handle.inner.send::<fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>>(
4116            fidl::encoding::Flexible::new(()),
4117            self.tx_id,
4118            0x111ea99f3f0c8009,
4119            fidl::encoding::DynamicFlags::FLEXIBLE,
4120        )
4121    }
4122}
4123
4124mod internal {
4125    use super::*;
4126
4127    impl CentralControllerStartScanRequest {
4128        #[inline(always)]
4129        fn max_ordinal_present(&self) -> u64 {
4130            if let Some(_) = self.listener {
4131                return 1;
4132            }
4133            0
4134        }
4135    }
4136
4137    impl fidl::encoding::ResourceTypeMarker for CentralControllerStartScanRequest {
4138        type Borrowed<'a> = &'a mut Self;
4139        fn take_or_borrow<'a>(
4140            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4141        ) -> Self::Borrowed<'a> {
4142            value
4143        }
4144    }
4145
4146    unsafe impl fidl::encoding::TypeMarker for CentralControllerStartScanRequest {
4147        type Owned = Self;
4148
4149        #[inline(always)]
4150        fn inline_align(_context: fidl::encoding::Context) -> usize {
4151            8
4152        }
4153
4154        #[inline(always)]
4155        fn inline_size(_context: fidl::encoding::Context) -> usize {
4156            16
4157        }
4158    }
4159
4160    unsafe impl
4161        fidl::encoding::Encode<
4162            CentralControllerStartScanRequest,
4163            fidl::encoding::DefaultFuchsiaResourceDialect,
4164        > for &mut CentralControllerStartScanRequest
4165    {
4166        unsafe fn encode(
4167            self,
4168            encoder: &mut fidl::encoding::Encoder<
4169                '_,
4170                fidl::encoding::DefaultFuchsiaResourceDialect,
4171            >,
4172            offset: usize,
4173            mut depth: fidl::encoding::Depth,
4174        ) -> fidl::Result<()> {
4175            encoder.debug_check_bounds::<CentralControllerStartScanRequest>(offset);
4176            // Vector header
4177            let max_ordinal: u64 = self.max_ordinal_present();
4178            encoder.write_num(max_ordinal, offset);
4179            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4180            // Calling encoder.out_of_line_offset(0) is not allowed.
4181            if max_ordinal == 0 {
4182                return Ok(());
4183            }
4184            depth.increment()?;
4185            let envelope_size = 8;
4186            let bytes_len = max_ordinal as usize * envelope_size;
4187            #[allow(unused_variables)]
4188            let offset = encoder.out_of_line_offset(bytes_len);
4189            let mut _prev_end_offset: usize = 0;
4190            if 1 > max_ordinal {
4191                return Ok(());
4192            }
4193
4194            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4195            // are envelope_size bytes.
4196            let cur_offset: usize = (1 - 1) * envelope_size;
4197
4198            // Zero reserved fields.
4199            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4200
4201            // Safety:
4202            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4203            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4204            //   envelope_size bytes, there is always sufficient room.
4205            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ScanResultListenerMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
4206            self.listener.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ScanResultListenerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
4207            encoder, offset + cur_offset, depth
4208        )?;
4209
4210            _prev_end_offset = cur_offset + envelope_size;
4211
4212            Ok(())
4213        }
4214    }
4215
4216    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4217        for CentralControllerStartScanRequest
4218    {
4219        #[inline(always)]
4220        fn new_empty() -> Self {
4221            Self::default()
4222        }
4223
4224        unsafe fn decode(
4225            &mut self,
4226            decoder: &mut fidl::encoding::Decoder<
4227                '_,
4228                fidl::encoding::DefaultFuchsiaResourceDialect,
4229            >,
4230            offset: usize,
4231            mut depth: fidl::encoding::Depth,
4232        ) -> fidl::Result<()> {
4233            decoder.debug_check_bounds::<Self>(offset);
4234            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4235                None => return Err(fidl::Error::NotNullable),
4236                Some(len) => len,
4237            };
4238            // Calling decoder.out_of_line_offset(0) is not allowed.
4239            if len == 0 {
4240                return Ok(());
4241            };
4242            depth.increment()?;
4243            let envelope_size = 8;
4244            let bytes_len = len * envelope_size;
4245            let offset = decoder.out_of_line_offset(bytes_len)?;
4246            // Decode the envelope for each type.
4247            let mut _next_ordinal_to_read = 0;
4248            let mut next_offset = offset;
4249            let end_offset = offset + bytes_len;
4250            _next_ordinal_to_read += 1;
4251            if next_offset >= end_offset {
4252                return Ok(());
4253            }
4254
4255            // Decode unknown envelopes for gaps in ordinals.
4256            while _next_ordinal_to_read < 1 {
4257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4258                _next_ordinal_to_read += 1;
4259                next_offset += envelope_size;
4260            }
4261
4262            let next_out_of_line = decoder.next_out_of_line();
4263            let handles_before = decoder.remaining_handles();
4264            if let Some((inlined, num_bytes, num_handles)) =
4265                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4266            {
4267                let member_inline_size = <fidl::encoding::Endpoint<
4268                    fidl::endpoints::ClientEnd<ScanResultListenerMarker>,
4269                > as fidl::encoding::TypeMarker>::inline_size(
4270                    decoder.context
4271                );
4272                if inlined != (member_inline_size <= 4) {
4273                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4274                }
4275                let inner_offset;
4276                let mut inner_depth = depth.clone();
4277                if inlined {
4278                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4279                    inner_offset = next_offset;
4280                } else {
4281                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4282                    inner_depth.increment()?;
4283                }
4284                let val_ref = self.listener.get_or_insert_with(|| {
4285                    fidl::new_empty!(
4286                        fidl::encoding::Endpoint<
4287                            fidl::endpoints::ClientEnd<ScanResultListenerMarker>,
4288                        >,
4289                        fidl::encoding::DefaultFuchsiaResourceDialect
4290                    )
4291                });
4292                fidl::decode!(
4293                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ScanResultListenerMarker>>,
4294                    fidl::encoding::DefaultFuchsiaResourceDialect,
4295                    val_ref,
4296                    decoder,
4297                    inner_offset,
4298                    inner_depth
4299                )?;
4300                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4301                {
4302                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4303                }
4304                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4305                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4306                }
4307            }
4308
4309            next_offset += envelope_size;
4310
4311            // Decode the remaining unknown envelopes.
4312            while next_offset < end_offset {
4313                _next_ordinal_to_read += 1;
4314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4315                next_offset += envelope_size;
4316            }
4317
4318            Ok(())
4319        }
4320    }
4321}