fidl_fuchsia_net_policy_socketproxy/
fidl_fuchsia_net_policy_socketproxy.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_net_policy_socketproxy__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
15pub struct DnsServerWatcherMarker;
16
17impl fidl::endpoints::ProtocolMarker for DnsServerWatcherMarker {
18    type Proxy = DnsServerWatcherProxy;
19    type RequestStream = DnsServerWatcherRequestStream;
20    #[cfg(target_os = "fuchsia")]
21    type SynchronousProxy = DnsServerWatcherSynchronousProxy;
22
23    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.DnsServerWatcher";
24}
25impl fidl::endpoints::DiscoverableProtocolMarker for DnsServerWatcherMarker {}
26
27pub trait DnsServerWatcherProxyInterface: Send + Sync {
28    type WatchServersResponseFut: std::future::Future<Output = Result<Vec<DnsServerList>, fidl::Error>>
29        + Send;
30    fn r#watch_servers(&self) -> Self::WatchServersResponseFut;
31}
32#[derive(Debug)]
33#[cfg(target_os = "fuchsia")]
34pub struct DnsServerWatcherSynchronousProxy {
35    client: fidl::client::sync::Client,
36}
37
38#[cfg(target_os = "fuchsia")]
39impl fidl::endpoints::SynchronousProxy for DnsServerWatcherSynchronousProxy {
40    type Proxy = DnsServerWatcherProxy;
41    type Protocol = DnsServerWatcherMarker;
42
43    fn from_channel(inner: fidl::Channel) -> Self {
44        Self::new(inner)
45    }
46
47    fn into_channel(self) -> fidl::Channel {
48        self.client.into_channel()
49    }
50
51    fn as_channel(&self) -> &fidl::Channel {
52        self.client.as_channel()
53    }
54}
55
56#[cfg(target_os = "fuchsia")]
57impl DnsServerWatcherSynchronousProxy {
58    pub fn new(channel: fidl::Channel) -> Self {
59        let protocol_name = <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
60        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
61    }
62
63    pub fn into_channel(self) -> fidl::Channel {
64        self.client.into_channel()
65    }
66
67    /// Waits until an event arrives and returns it. It is safe for other
68    /// threads to make concurrent requests while waiting for an event.
69    pub fn wait_for_event(
70        &self,
71        deadline: zx::MonotonicInstant,
72    ) -> Result<DnsServerWatcherEvent, fidl::Error> {
73        DnsServerWatcherEvent::decode(self.client.wait_for_event(deadline)?)
74    }
75
76    /// Returns a list of DNS servers registered with the socketproxy.
77    ///
78    /// First call always returns a snapshot of the current list of servers or blocks if an empty
79    /// list would be returned. Subsequent calls will block until the list of servers changes.
80    ///
81    /// The list of servers changes over time by configuration or network topology changes,
82    /// expiration, etc. Callers must repeatedly call `WatchServers` and replace any previously
83    /// returned `servers` with new ones to avoid using stale or expired entries.
84    ///
85    /// It is invalid to call this method while a previous call is pending. Doing so will cause the
86    /// server end of the protocol to be closed.
87    ///
88    /// - response `servers` The list of servers to use for DNS resolution, in priority order.
89    pub fn r#watch_servers(
90        &self,
91        ___deadline: zx::MonotonicInstant,
92    ) -> Result<Vec<DnsServerList>, fidl::Error> {
93        let _response = self
94            .client
95            .send_query::<fidl::encoding::EmptyPayload, DnsServerWatcherWatchServersResponse>(
96                (),
97                0x767ad6d8df671383,
98                fidl::encoding::DynamicFlags::empty(),
99                ___deadline,
100            )?;
101        Ok(_response.servers)
102    }
103}
104
105#[cfg(target_os = "fuchsia")]
106impl From<DnsServerWatcherSynchronousProxy> for zx::NullableHandle {
107    fn from(value: DnsServerWatcherSynchronousProxy) -> Self {
108        value.into_channel().into()
109    }
110}
111
112#[cfg(target_os = "fuchsia")]
113impl From<fidl::Channel> for DnsServerWatcherSynchronousProxy {
114    fn from(value: fidl::Channel) -> Self {
115        Self::new(value)
116    }
117}
118
119#[cfg(target_os = "fuchsia")]
120impl fidl::endpoints::FromClient for DnsServerWatcherSynchronousProxy {
121    type Protocol = DnsServerWatcherMarker;
122
123    fn from_client(value: fidl::endpoints::ClientEnd<DnsServerWatcherMarker>) -> Self {
124        Self::new(value.into_channel())
125    }
126}
127
128#[derive(Debug, Clone)]
129pub struct DnsServerWatcherProxy {
130    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
131}
132
133impl fidl::endpoints::Proxy for DnsServerWatcherProxy {
134    type Protocol = DnsServerWatcherMarker;
135
136    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
137        Self::new(inner)
138    }
139
140    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
141        self.client.into_channel().map_err(|client| Self { client })
142    }
143
144    fn as_channel(&self) -> &::fidl::AsyncChannel {
145        self.client.as_channel()
146    }
147}
148
149impl DnsServerWatcherProxy {
150    /// Create a new Proxy for fuchsia.net.policy.socketproxy/DnsServerWatcher.
151    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
152        let protocol_name = <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
153        Self { client: fidl::client::Client::new(channel, protocol_name) }
154    }
155
156    /// Get a Stream of events from the remote end of the protocol.
157    ///
158    /// # Panics
159    ///
160    /// Panics if the event stream was already taken.
161    pub fn take_event_stream(&self) -> DnsServerWatcherEventStream {
162        DnsServerWatcherEventStream { event_receiver: self.client.take_event_receiver() }
163    }
164
165    /// Returns a list of DNS servers registered with the socketproxy.
166    ///
167    /// First call always returns a snapshot of the current list of servers or blocks if an empty
168    /// list would be returned. Subsequent calls will block until the list of servers changes.
169    ///
170    /// The list of servers changes over time by configuration or network topology changes,
171    /// expiration, etc. Callers must repeatedly call `WatchServers` and replace any previously
172    /// returned `servers` with new ones to avoid using stale or expired entries.
173    ///
174    /// It is invalid to call this method while a previous call is pending. Doing so will cause the
175    /// server end of the protocol to be closed.
176    ///
177    /// - response `servers` The list of servers to use for DNS resolution, in priority order.
178    pub fn r#watch_servers(
179        &self,
180    ) -> fidl::client::QueryResponseFut<
181        Vec<DnsServerList>,
182        fidl::encoding::DefaultFuchsiaResourceDialect,
183    > {
184        DnsServerWatcherProxyInterface::r#watch_servers(self)
185    }
186}
187
188impl DnsServerWatcherProxyInterface for DnsServerWatcherProxy {
189    type WatchServersResponseFut = fidl::client::QueryResponseFut<
190        Vec<DnsServerList>,
191        fidl::encoding::DefaultFuchsiaResourceDialect,
192    >;
193    fn r#watch_servers(&self) -> Self::WatchServersResponseFut {
194        fn _decode(
195            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
196        ) -> Result<Vec<DnsServerList>, fidl::Error> {
197            let _response = fidl::client::decode_transaction_body::<
198                DnsServerWatcherWatchServersResponse,
199                fidl::encoding::DefaultFuchsiaResourceDialect,
200                0x767ad6d8df671383,
201            >(_buf?)?;
202            Ok(_response.servers)
203        }
204        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, Vec<DnsServerList>>(
205            (),
206            0x767ad6d8df671383,
207            fidl::encoding::DynamicFlags::empty(),
208            _decode,
209        )
210    }
211}
212
213pub struct DnsServerWatcherEventStream {
214    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
215}
216
217impl std::marker::Unpin for DnsServerWatcherEventStream {}
218
219impl futures::stream::FusedStream for DnsServerWatcherEventStream {
220    fn is_terminated(&self) -> bool {
221        self.event_receiver.is_terminated()
222    }
223}
224
225impl futures::Stream for DnsServerWatcherEventStream {
226    type Item = Result<DnsServerWatcherEvent, fidl::Error>;
227
228    fn poll_next(
229        mut self: std::pin::Pin<&mut Self>,
230        cx: &mut std::task::Context<'_>,
231    ) -> std::task::Poll<Option<Self::Item>> {
232        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
233            &mut self.event_receiver,
234            cx
235        )?) {
236            Some(buf) => std::task::Poll::Ready(Some(DnsServerWatcherEvent::decode(buf))),
237            None => std::task::Poll::Ready(None),
238        }
239    }
240}
241
242#[derive(Debug)]
243pub enum DnsServerWatcherEvent {}
244
245impl DnsServerWatcherEvent {
246    /// Decodes a message buffer as a [`DnsServerWatcherEvent`].
247    fn decode(
248        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
249    ) -> Result<DnsServerWatcherEvent, fidl::Error> {
250        let (bytes, _handles) = buf.split_mut();
251        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
252        debug_assert_eq!(tx_header.tx_id, 0);
253        match tx_header.ordinal {
254            _ => Err(fidl::Error::UnknownOrdinal {
255                ordinal: tx_header.ordinal,
256                protocol_name:
257                    <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
258            }),
259        }
260    }
261}
262
263/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/DnsServerWatcher.
264pub struct DnsServerWatcherRequestStream {
265    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
266    is_terminated: bool,
267}
268
269impl std::marker::Unpin for DnsServerWatcherRequestStream {}
270
271impl futures::stream::FusedStream for DnsServerWatcherRequestStream {
272    fn is_terminated(&self) -> bool {
273        self.is_terminated
274    }
275}
276
277impl fidl::endpoints::RequestStream for DnsServerWatcherRequestStream {
278    type Protocol = DnsServerWatcherMarker;
279    type ControlHandle = DnsServerWatcherControlHandle;
280
281    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
282        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
283    }
284
285    fn control_handle(&self) -> Self::ControlHandle {
286        DnsServerWatcherControlHandle { inner: self.inner.clone() }
287    }
288
289    fn into_inner(
290        self,
291    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
292    {
293        (self.inner, self.is_terminated)
294    }
295
296    fn from_inner(
297        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
298        is_terminated: bool,
299    ) -> Self {
300        Self { inner, is_terminated }
301    }
302}
303
304impl futures::Stream for DnsServerWatcherRequestStream {
305    type Item = Result<DnsServerWatcherRequest, fidl::Error>;
306
307    fn poll_next(
308        mut self: std::pin::Pin<&mut Self>,
309        cx: &mut std::task::Context<'_>,
310    ) -> std::task::Poll<Option<Self::Item>> {
311        let this = &mut *self;
312        if this.inner.check_shutdown(cx) {
313            this.is_terminated = true;
314            return std::task::Poll::Ready(None);
315        }
316        if this.is_terminated {
317            panic!("polled DnsServerWatcherRequestStream after completion");
318        }
319        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
320            |bytes, handles| {
321                match this.inner.channel().read_etc(cx, bytes, handles) {
322                    std::task::Poll::Ready(Ok(())) => {}
323                    std::task::Poll::Pending => return std::task::Poll::Pending,
324                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
325                        this.is_terminated = true;
326                        return std::task::Poll::Ready(None);
327                    }
328                    std::task::Poll::Ready(Err(e)) => {
329                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
330                            e.into(),
331                        ))));
332                    }
333                }
334
335                // A message has been received from the channel
336                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
337
338                std::task::Poll::Ready(Some(match header.ordinal {
339                    0x767ad6d8df671383 => {
340                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
341                        let mut req = fidl::new_empty!(
342                            fidl::encoding::EmptyPayload,
343                            fidl::encoding::DefaultFuchsiaResourceDialect
344                        );
345                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
346                        let control_handle =
347                            DnsServerWatcherControlHandle { inner: this.inner.clone() };
348                        Ok(DnsServerWatcherRequest::WatchServers {
349                            responder: DnsServerWatcherWatchServersResponder {
350                                control_handle: std::mem::ManuallyDrop::new(control_handle),
351                                tx_id: header.tx_id,
352                            },
353                        })
354                    }
355                    _ => Err(fidl::Error::UnknownOrdinal {
356                        ordinal: header.ordinal,
357                        protocol_name:
358                            <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
359                    }),
360                }))
361            },
362        )
363    }
364}
365
366/// Provides a hanging get interface to watch for DNS servers configuration.
367/// Only one connection to this service is considered valid at any one time.
368#[derive(Debug)]
369pub enum DnsServerWatcherRequest {
370    /// Returns a list of DNS servers registered with the socketproxy.
371    ///
372    /// First call always returns a snapshot of the current list of servers or blocks if an empty
373    /// list would be returned. Subsequent calls will block until the list of servers changes.
374    ///
375    /// The list of servers changes over time by configuration or network topology changes,
376    /// expiration, etc. Callers must repeatedly call `WatchServers` and replace any previously
377    /// returned `servers` with new ones to avoid using stale or expired entries.
378    ///
379    /// It is invalid to call this method while a previous call is pending. Doing so will cause the
380    /// server end of the protocol to be closed.
381    ///
382    /// - response `servers` The list of servers to use for DNS resolution, in priority order.
383    WatchServers { responder: DnsServerWatcherWatchServersResponder },
384}
385
386impl DnsServerWatcherRequest {
387    #[allow(irrefutable_let_patterns)]
388    pub fn into_watch_servers(self) -> Option<(DnsServerWatcherWatchServersResponder)> {
389        if let DnsServerWatcherRequest::WatchServers { responder } = self {
390            Some((responder))
391        } else {
392            None
393        }
394    }
395
396    /// Name of the method defined in FIDL
397    pub fn method_name(&self) -> &'static str {
398        match *self {
399            DnsServerWatcherRequest::WatchServers { .. } => "watch_servers",
400        }
401    }
402}
403
404#[derive(Debug, Clone)]
405pub struct DnsServerWatcherControlHandle {
406    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
407}
408
409impl fidl::endpoints::ControlHandle for DnsServerWatcherControlHandle {
410    fn shutdown(&self) {
411        self.inner.shutdown()
412    }
413
414    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
415        self.inner.shutdown_with_epitaph(status)
416    }
417
418    fn is_closed(&self) -> bool {
419        self.inner.channel().is_closed()
420    }
421    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
422        self.inner.channel().on_closed()
423    }
424
425    #[cfg(target_os = "fuchsia")]
426    fn signal_peer(
427        &self,
428        clear_mask: zx::Signals,
429        set_mask: zx::Signals,
430    ) -> Result<(), zx_status::Status> {
431        use fidl::Peered;
432        self.inner.channel().signal_peer(clear_mask, set_mask)
433    }
434}
435
436impl DnsServerWatcherControlHandle {}
437
438#[must_use = "FIDL methods require a response to be sent"]
439#[derive(Debug)]
440pub struct DnsServerWatcherWatchServersResponder {
441    control_handle: std::mem::ManuallyDrop<DnsServerWatcherControlHandle>,
442    tx_id: u32,
443}
444
445/// Set the the channel to be shutdown (see [`DnsServerWatcherControlHandle::shutdown`])
446/// if the responder is dropped without sending a response, so that the client
447/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
448impl std::ops::Drop for DnsServerWatcherWatchServersResponder {
449    fn drop(&mut self) {
450        self.control_handle.shutdown();
451        // Safety: drops once, never accessed again
452        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
453    }
454}
455
456impl fidl::endpoints::Responder for DnsServerWatcherWatchServersResponder {
457    type ControlHandle = DnsServerWatcherControlHandle;
458
459    fn control_handle(&self) -> &DnsServerWatcherControlHandle {
460        &self.control_handle
461    }
462
463    fn drop_without_shutdown(mut self) {
464        // Safety: drops once, never accessed again due to mem::forget
465        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
466        // Prevent Drop from running (which would shut down the channel)
467        std::mem::forget(self);
468    }
469}
470
471impl DnsServerWatcherWatchServersResponder {
472    /// Sends a response to the FIDL transaction.
473    ///
474    /// Sets the channel to shutdown if an error occurs.
475    pub fn send(self, mut servers: &[DnsServerList]) -> Result<(), fidl::Error> {
476        let _result = self.send_raw(servers);
477        if _result.is_err() {
478            self.control_handle.shutdown();
479        }
480        self.drop_without_shutdown();
481        _result
482    }
483
484    /// Similar to "send" but does not shutdown the channel if an error occurs.
485    pub fn send_no_shutdown_on_err(self, mut servers: &[DnsServerList]) -> Result<(), fidl::Error> {
486        let _result = self.send_raw(servers);
487        self.drop_without_shutdown();
488        _result
489    }
490
491    fn send_raw(&self, mut servers: &[DnsServerList]) -> Result<(), fidl::Error> {
492        self.control_handle.inner.send::<DnsServerWatcherWatchServersResponse>(
493            (servers,),
494            self.tx_id,
495            0x767ad6d8df671383,
496            fidl::encoding::DynamicFlags::empty(),
497        )
498    }
499}
500
501#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
502pub struct FuchsiaNetworksMarker;
503
504impl fidl::endpoints::ProtocolMarker for FuchsiaNetworksMarker {
505    type Proxy = FuchsiaNetworksProxy;
506    type RequestStream = FuchsiaNetworksRequestStream;
507    #[cfg(target_os = "fuchsia")]
508    type SynchronousProxy = FuchsiaNetworksSynchronousProxy;
509
510    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.FuchsiaNetworks";
511}
512impl fidl::endpoints::DiscoverableProtocolMarker for FuchsiaNetworksMarker {}
513
514pub trait FuchsiaNetworksProxyInterface: Send + Sync {
515    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
516        + Send;
517    fn r#set_default(
518        &self,
519        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
520    ) -> Self::SetDefaultResponseFut;
521    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
522        + Send;
523    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
524    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
525        + Send;
526    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
527    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
528        + Send;
529    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
530}
531#[derive(Debug)]
532#[cfg(target_os = "fuchsia")]
533pub struct FuchsiaNetworksSynchronousProxy {
534    client: fidl::client::sync::Client,
535}
536
537#[cfg(target_os = "fuchsia")]
538impl fidl::endpoints::SynchronousProxy for FuchsiaNetworksSynchronousProxy {
539    type Proxy = FuchsiaNetworksProxy;
540    type Protocol = FuchsiaNetworksMarker;
541
542    fn from_channel(inner: fidl::Channel) -> Self {
543        Self::new(inner)
544    }
545
546    fn into_channel(self) -> fidl::Channel {
547        self.client.into_channel()
548    }
549
550    fn as_channel(&self) -> &fidl::Channel {
551        self.client.as_channel()
552    }
553}
554
555#[cfg(target_os = "fuchsia")]
556impl FuchsiaNetworksSynchronousProxy {
557    pub fn new(channel: fidl::Channel) -> Self {
558        let protocol_name = <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
559        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
560    }
561
562    pub fn into_channel(self) -> fidl::Channel {
563        self.client.into_channel()
564    }
565
566    /// Waits until an event arrives and returns it. It is safe for other
567    /// threads to make concurrent requests while waiting for an event.
568    pub fn wait_for_event(
569        &self,
570        deadline: zx::MonotonicInstant,
571    ) -> Result<FuchsiaNetworksEvent, fidl::Error> {
572        FuchsiaNetworksEvent::decode(self.client.wait_for_event(deadline)?)
573    }
574
575    /// Sets the default network.
576    ///
577    /// The network must have previously been registered by a call to `Add`.
578    pub fn r#set_default(
579        &self,
580        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
581        ___deadline: zx::MonotonicInstant,
582    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
583        let _response =
584            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
585                fidl::encoding::EmptyStruct,
586                NetworkRegistrySetDefaultError,
587            >>(
588                (network_id,),
589                0x787930c67b8cf82c,
590                fidl::encoding::DynamicFlags::empty(),
591                ___deadline,
592            )?;
593        Ok(_response.map(|x| x))
594    }
595
596    /// Add a new network.
597    ///
598    /// This call will not return until the DNS servers have been successfully
599    /// updated in netcfg.
600    pub fn r#add(
601        &self,
602        mut network: &Network,
603        ___deadline: zx::MonotonicInstant,
604    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
605        let _response =
606            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
607                fidl::encoding::EmptyStruct,
608                NetworkRegistryAddError,
609            >>(
610                (network,),
611                0x197e70a1cbeab3ad,
612                fidl::encoding::DynamicFlags::empty(),
613                ___deadline,
614            )?;
615        Ok(_response.map(|x| x))
616    }
617
618    /// Update a previously Added network.
619    ///
620    /// This call will not return until the DNS servers have been
621    /// successfully updated in netcfg.
622    pub fn r#update(
623        &self,
624        mut network: &Network,
625        ___deadline: zx::MonotonicInstant,
626    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
627        let _response =
628            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
629                fidl::encoding::EmptyStruct,
630                NetworkRegistryUpdateError,
631            >>(
632                (network,),
633                0x3bc790ae5418ff0e,
634                fidl::encoding::DynamicFlags::empty(),
635                ___deadline,
636            )?;
637        Ok(_response.map(|x| x))
638    }
639
640    /// Remove a previously Added network.
641    ///
642    /// This call will not return until the DNS servers have been
643    /// successfully updated in netcfg.
644    pub fn r#remove(
645        &self,
646        mut network_id: u32,
647        ___deadline: zx::MonotonicInstant,
648    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
649        let _response =
650            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
651                fidl::encoding::EmptyStruct,
652                NetworkRegistryRemoveError,
653            >>(
654                (network_id,),
655                0x1302df41dca6379e,
656                fidl::encoding::DynamicFlags::empty(),
657                ___deadline,
658            )?;
659        Ok(_response.map(|x| x))
660    }
661}
662
663#[cfg(target_os = "fuchsia")]
664impl From<FuchsiaNetworksSynchronousProxy> for zx::NullableHandle {
665    fn from(value: FuchsiaNetworksSynchronousProxy) -> Self {
666        value.into_channel().into()
667    }
668}
669
670#[cfg(target_os = "fuchsia")]
671impl From<fidl::Channel> for FuchsiaNetworksSynchronousProxy {
672    fn from(value: fidl::Channel) -> Self {
673        Self::new(value)
674    }
675}
676
677#[cfg(target_os = "fuchsia")]
678impl fidl::endpoints::FromClient for FuchsiaNetworksSynchronousProxy {
679    type Protocol = FuchsiaNetworksMarker;
680
681    fn from_client(value: fidl::endpoints::ClientEnd<FuchsiaNetworksMarker>) -> Self {
682        Self::new(value.into_channel())
683    }
684}
685
686#[derive(Debug, Clone)]
687pub struct FuchsiaNetworksProxy {
688    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
689}
690
691impl fidl::endpoints::Proxy for FuchsiaNetworksProxy {
692    type Protocol = FuchsiaNetworksMarker;
693
694    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
695        Self::new(inner)
696    }
697
698    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
699        self.client.into_channel().map_err(|client| Self { client })
700    }
701
702    fn as_channel(&self) -> &::fidl::AsyncChannel {
703        self.client.as_channel()
704    }
705}
706
707impl FuchsiaNetworksProxy {
708    /// Create a new Proxy for fuchsia.net.policy.socketproxy/FuchsiaNetworks.
709    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
710        let protocol_name = <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
711        Self { client: fidl::client::Client::new(channel, protocol_name) }
712    }
713
714    /// Get a Stream of events from the remote end of the protocol.
715    ///
716    /// # Panics
717    ///
718    /// Panics if the event stream was already taken.
719    pub fn take_event_stream(&self) -> FuchsiaNetworksEventStream {
720        FuchsiaNetworksEventStream { event_receiver: self.client.take_event_receiver() }
721    }
722
723    /// Sets the default network.
724    ///
725    /// The network must have previously been registered by a call to `Add`.
726    pub fn r#set_default(
727        &self,
728        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
729    ) -> fidl::client::QueryResponseFut<
730        NetworkRegistrySetDefaultResult,
731        fidl::encoding::DefaultFuchsiaResourceDialect,
732    > {
733        FuchsiaNetworksProxyInterface::r#set_default(self, network_id)
734    }
735
736    /// Add a new network.
737    ///
738    /// This call will not return until the DNS servers have been successfully
739    /// updated in netcfg.
740    pub fn r#add(
741        &self,
742        mut network: &Network,
743    ) -> fidl::client::QueryResponseFut<
744        NetworkRegistryAddResult,
745        fidl::encoding::DefaultFuchsiaResourceDialect,
746    > {
747        FuchsiaNetworksProxyInterface::r#add(self, network)
748    }
749
750    /// Update a previously Added network.
751    ///
752    /// This call will not return until the DNS servers have been
753    /// successfully updated in netcfg.
754    pub fn r#update(
755        &self,
756        mut network: &Network,
757    ) -> fidl::client::QueryResponseFut<
758        NetworkRegistryUpdateResult,
759        fidl::encoding::DefaultFuchsiaResourceDialect,
760    > {
761        FuchsiaNetworksProxyInterface::r#update(self, network)
762    }
763
764    /// Remove a previously Added network.
765    ///
766    /// This call will not return until the DNS servers have been
767    /// successfully updated in netcfg.
768    pub fn r#remove(
769        &self,
770        mut network_id: u32,
771    ) -> fidl::client::QueryResponseFut<
772        NetworkRegistryRemoveResult,
773        fidl::encoding::DefaultFuchsiaResourceDialect,
774    > {
775        FuchsiaNetworksProxyInterface::r#remove(self, network_id)
776    }
777}
778
779impl FuchsiaNetworksProxyInterface for FuchsiaNetworksProxy {
780    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
781        NetworkRegistrySetDefaultResult,
782        fidl::encoding::DefaultFuchsiaResourceDialect,
783    >;
784    fn r#set_default(
785        &self,
786        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
787    ) -> Self::SetDefaultResponseFut {
788        fn _decode(
789            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
790        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
791            let _response = fidl::client::decode_transaction_body::<
792                fidl::encoding::ResultType<
793                    fidl::encoding::EmptyStruct,
794                    NetworkRegistrySetDefaultError,
795                >,
796                fidl::encoding::DefaultFuchsiaResourceDialect,
797                0x787930c67b8cf82c,
798            >(_buf?)?;
799            Ok(_response.map(|x| x))
800        }
801        self.client.send_query_and_decode::<
802            NetworkRegistrySetDefaultRequest,
803            NetworkRegistrySetDefaultResult,
804        >(
805            (network_id,),
806            0x787930c67b8cf82c,
807            fidl::encoding::DynamicFlags::empty(),
808            _decode,
809        )
810    }
811
812    type AddResponseFut = fidl::client::QueryResponseFut<
813        NetworkRegistryAddResult,
814        fidl::encoding::DefaultFuchsiaResourceDialect,
815    >;
816    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
817        fn _decode(
818            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
819        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
820            let _response = fidl::client::decode_transaction_body::<
821                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
822                fidl::encoding::DefaultFuchsiaResourceDialect,
823                0x197e70a1cbeab3ad,
824            >(_buf?)?;
825            Ok(_response.map(|x| x))
826        }
827        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
828            (network,),
829            0x197e70a1cbeab3ad,
830            fidl::encoding::DynamicFlags::empty(),
831            _decode,
832        )
833    }
834
835    type UpdateResponseFut = fidl::client::QueryResponseFut<
836        NetworkRegistryUpdateResult,
837        fidl::encoding::DefaultFuchsiaResourceDialect,
838    >;
839    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
840        fn _decode(
841            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
842        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
843            let _response = fidl::client::decode_transaction_body::<
844                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
845                fidl::encoding::DefaultFuchsiaResourceDialect,
846                0x3bc790ae5418ff0e,
847            >(_buf?)?;
848            Ok(_response.map(|x| x))
849        }
850        self.client
851            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
852                (network,),
853                0x3bc790ae5418ff0e,
854                fidl::encoding::DynamicFlags::empty(),
855                _decode,
856            )
857    }
858
859    type RemoveResponseFut = fidl::client::QueryResponseFut<
860        NetworkRegistryRemoveResult,
861        fidl::encoding::DefaultFuchsiaResourceDialect,
862    >;
863    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
864        fn _decode(
865            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
866        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
867            let _response = fidl::client::decode_transaction_body::<
868                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
869                fidl::encoding::DefaultFuchsiaResourceDialect,
870                0x1302df41dca6379e,
871            >(_buf?)?;
872            Ok(_response.map(|x| x))
873        }
874        self.client
875            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
876                (network_id,),
877                0x1302df41dca6379e,
878                fidl::encoding::DynamicFlags::empty(),
879                _decode,
880            )
881    }
882}
883
884pub struct FuchsiaNetworksEventStream {
885    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
886}
887
888impl std::marker::Unpin for FuchsiaNetworksEventStream {}
889
890impl futures::stream::FusedStream for FuchsiaNetworksEventStream {
891    fn is_terminated(&self) -> bool {
892        self.event_receiver.is_terminated()
893    }
894}
895
896impl futures::Stream for FuchsiaNetworksEventStream {
897    type Item = Result<FuchsiaNetworksEvent, fidl::Error>;
898
899    fn poll_next(
900        mut self: std::pin::Pin<&mut Self>,
901        cx: &mut std::task::Context<'_>,
902    ) -> std::task::Poll<Option<Self::Item>> {
903        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
904            &mut self.event_receiver,
905            cx
906        )?) {
907            Some(buf) => std::task::Poll::Ready(Some(FuchsiaNetworksEvent::decode(buf))),
908            None => std::task::Poll::Ready(None),
909        }
910    }
911}
912
913#[derive(Debug)]
914pub enum FuchsiaNetworksEvent {}
915
916impl FuchsiaNetworksEvent {
917    /// Decodes a message buffer as a [`FuchsiaNetworksEvent`].
918    fn decode(
919        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
920    ) -> Result<FuchsiaNetworksEvent, fidl::Error> {
921        let (bytes, _handles) = buf.split_mut();
922        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
923        debug_assert_eq!(tx_header.tx_id, 0);
924        match tx_header.ordinal {
925            _ => Err(fidl::Error::UnknownOrdinal {
926                ordinal: tx_header.ordinal,
927                protocol_name:
928                    <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
929            }),
930        }
931    }
932}
933
934/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/FuchsiaNetworks.
935pub struct FuchsiaNetworksRequestStream {
936    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
937    is_terminated: bool,
938}
939
940impl std::marker::Unpin for FuchsiaNetworksRequestStream {}
941
942impl futures::stream::FusedStream for FuchsiaNetworksRequestStream {
943    fn is_terminated(&self) -> bool {
944        self.is_terminated
945    }
946}
947
948impl fidl::endpoints::RequestStream for FuchsiaNetworksRequestStream {
949    type Protocol = FuchsiaNetworksMarker;
950    type ControlHandle = FuchsiaNetworksControlHandle;
951
952    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
953        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
954    }
955
956    fn control_handle(&self) -> Self::ControlHandle {
957        FuchsiaNetworksControlHandle { inner: self.inner.clone() }
958    }
959
960    fn into_inner(
961        self,
962    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
963    {
964        (self.inner, self.is_terminated)
965    }
966
967    fn from_inner(
968        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
969        is_terminated: bool,
970    ) -> Self {
971        Self { inner, is_terminated }
972    }
973}
974
975impl futures::Stream for FuchsiaNetworksRequestStream {
976    type Item = Result<FuchsiaNetworksRequest, fidl::Error>;
977
978    fn poll_next(
979        mut self: std::pin::Pin<&mut Self>,
980        cx: &mut std::task::Context<'_>,
981    ) -> std::task::Poll<Option<Self::Item>> {
982        let this = &mut *self;
983        if this.inner.check_shutdown(cx) {
984            this.is_terminated = true;
985            return std::task::Poll::Ready(None);
986        }
987        if this.is_terminated {
988            panic!("polled FuchsiaNetworksRequestStream after completion");
989        }
990        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
991            |bytes, handles| {
992                match this.inner.channel().read_etc(cx, bytes, handles) {
993                    std::task::Poll::Ready(Ok(())) => {}
994                    std::task::Poll::Pending => return std::task::Poll::Pending,
995                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
996                        this.is_terminated = true;
997                        return std::task::Poll::Ready(None);
998                    }
999                    std::task::Poll::Ready(Err(e)) => {
1000                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1001                            e.into(),
1002                        ))));
1003                    }
1004                }
1005
1006                // A message has been received from the channel
1007                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1008
1009                std::task::Poll::Ready(Some(match header.ordinal {
1010                    0x787930c67b8cf82c => {
1011                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1012                        let mut req = fidl::new_empty!(
1013                            NetworkRegistrySetDefaultRequest,
1014                            fidl::encoding::DefaultFuchsiaResourceDialect
1015                        );
1016                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
1017                        let control_handle =
1018                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1019                        Ok(FuchsiaNetworksRequest::SetDefault {
1020                            network_id: req.network_id,
1021
1022                            responder: FuchsiaNetworksSetDefaultResponder {
1023                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1024                                tx_id: header.tx_id,
1025                            },
1026                        })
1027                    }
1028                    0x197e70a1cbeab3ad => {
1029                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1030                        let mut req = fidl::new_empty!(
1031                            NetworkRegistryAddRequest,
1032                            fidl::encoding::DefaultFuchsiaResourceDialect
1033                        );
1034                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
1035                        let control_handle =
1036                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1037                        Ok(FuchsiaNetworksRequest::Add {
1038                            network: req.network,
1039
1040                            responder: FuchsiaNetworksAddResponder {
1041                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1042                                tx_id: header.tx_id,
1043                            },
1044                        })
1045                    }
1046                    0x3bc790ae5418ff0e => {
1047                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1048                        let mut req = fidl::new_empty!(
1049                            NetworkRegistryUpdateRequest,
1050                            fidl::encoding::DefaultFuchsiaResourceDialect
1051                        );
1052                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
1053                        let control_handle =
1054                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1055                        Ok(FuchsiaNetworksRequest::Update {
1056                            network: req.network,
1057
1058                            responder: FuchsiaNetworksUpdateResponder {
1059                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1060                                tx_id: header.tx_id,
1061                            },
1062                        })
1063                    }
1064                    0x1302df41dca6379e => {
1065                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1066                        let mut req = fidl::new_empty!(
1067                            NetworkRegistryRemoveRequest,
1068                            fidl::encoding::DefaultFuchsiaResourceDialect
1069                        );
1070                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
1071                        let control_handle =
1072                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1073                        Ok(FuchsiaNetworksRequest::Remove {
1074                            network_id: req.network_id,
1075
1076                            responder: FuchsiaNetworksRemoveResponder {
1077                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1078                                tx_id: header.tx_id,
1079                            },
1080                        })
1081                    }
1082                    _ => Err(fidl::Error::UnknownOrdinal {
1083                        ordinal: header.ordinal,
1084                        protocol_name:
1085                            <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1086                    }),
1087                }))
1088            },
1089        )
1090    }
1091}
1092
1093/// FuchsiaNetworks is used for Fuchsia to communicate changes to the network.
1094/// Only one connection to this service is considered valid at any one time.
1095/// If the connection is lost for any reason, all previously registered
1096/// networks are considered invalid and will be removed.
1097#[derive(Debug)]
1098pub enum FuchsiaNetworksRequest {
1099    /// Sets the default network.
1100    ///
1101    /// The network must have previously been registered by a call to `Add`.
1102    SetDefault {
1103        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
1104        responder: FuchsiaNetworksSetDefaultResponder,
1105    },
1106    /// Add a new network.
1107    ///
1108    /// This call will not return until the DNS servers have been successfully
1109    /// updated in netcfg.
1110    Add { network: Network, responder: FuchsiaNetworksAddResponder },
1111    /// Update a previously Added network.
1112    ///
1113    /// This call will not return until the DNS servers have been
1114    /// successfully updated in netcfg.
1115    Update { network: Network, responder: FuchsiaNetworksUpdateResponder },
1116    /// Remove a previously Added network.
1117    ///
1118    /// This call will not return until the DNS servers have been
1119    /// successfully updated in netcfg.
1120    Remove { network_id: u32, responder: FuchsiaNetworksRemoveResponder },
1121}
1122
1123impl FuchsiaNetworksRequest {
1124    #[allow(irrefutable_let_patterns)]
1125    pub fn into_set_default(
1126        self,
1127    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, FuchsiaNetworksSetDefaultResponder)>
1128    {
1129        if let FuchsiaNetworksRequest::SetDefault { network_id, responder } = self {
1130            Some((network_id, responder))
1131        } else {
1132            None
1133        }
1134    }
1135
1136    #[allow(irrefutable_let_patterns)]
1137    pub fn into_add(self) -> Option<(Network, FuchsiaNetworksAddResponder)> {
1138        if let FuchsiaNetworksRequest::Add { network, responder } = self {
1139            Some((network, responder))
1140        } else {
1141            None
1142        }
1143    }
1144
1145    #[allow(irrefutable_let_patterns)]
1146    pub fn into_update(self) -> Option<(Network, FuchsiaNetworksUpdateResponder)> {
1147        if let FuchsiaNetworksRequest::Update { network, responder } = self {
1148            Some((network, responder))
1149        } else {
1150            None
1151        }
1152    }
1153
1154    #[allow(irrefutable_let_patterns)]
1155    pub fn into_remove(self) -> Option<(u32, FuchsiaNetworksRemoveResponder)> {
1156        if let FuchsiaNetworksRequest::Remove { network_id, responder } = self {
1157            Some((network_id, responder))
1158        } else {
1159            None
1160        }
1161    }
1162
1163    /// Name of the method defined in FIDL
1164    pub fn method_name(&self) -> &'static str {
1165        match *self {
1166            FuchsiaNetworksRequest::SetDefault { .. } => "set_default",
1167            FuchsiaNetworksRequest::Add { .. } => "add",
1168            FuchsiaNetworksRequest::Update { .. } => "update",
1169            FuchsiaNetworksRequest::Remove { .. } => "remove",
1170        }
1171    }
1172}
1173
1174#[derive(Debug, Clone)]
1175pub struct FuchsiaNetworksControlHandle {
1176    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1177}
1178
1179impl fidl::endpoints::ControlHandle for FuchsiaNetworksControlHandle {
1180    fn shutdown(&self) {
1181        self.inner.shutdown()
1182    }
1183
1184    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1185        self.inner.shutdown_with_epitaph(status)
1186    }
1187
1188    fn is_closed(&self) -> bool {
1189        self.inner.channel().is_closed()
1190    }
1191    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1192        self.inner.channel().on_closed()
1193    }
1194
1195    #[cfg(target_os = "fuchsia")]
1196    fn signal_peer(
1197        &self,
1198        clear_mask: zx::Signals,
1199        set_mask: zx::Signals,
1200    ) -> Result<(), zx_status::Status> {
1201        use fidl::Peered;
1202        self.inner.channel().signal_peer(clear_mask, set_mask)
1203    }
1204}
1205
1206impl FuchsiaNetworksControlHandle {}
1207
1208#[must_use = "FIDL methods require a response to be sent"]
1209#[derive(Debug)]
1210pub struct FuchsiaNetworksSetDefaultResponder {
1211    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1212    tx_id: u32,
1213}
1214
1215/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1216/// if the responder is dropped without sending a response, so that the client
1217/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1218impl std::ops::Drop for FuchsiaNetworksSetDefaultResponder {
1219    fn drop(&mut self) {
1220        self.control_handle.shutdown();
1221        // Safety: drops once, never accessed again
1222        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1223    }
1224}
1225
1226impl fidl::endpoints::Responder for FuchsiaNetworksSetDefaultResponder {
1227    type ControlHandle = FuchsiaNetworksControlHandle;
1228
1229    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1230        &self.control_handle
1231    }
1232
1233    fn drop_without_shutdown(mut self) {
1234        // Safety: drops once, never accessed again due to mem::forget
1235        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1236        // Prevent Drop from running (which would shut down the channel)
1237        std::mem::forget(self);
1238    }
1239}
1240
1241impl FuchsiaNetworksSetDefaultResponder {
1242    /// Sends a response to the FIDL transaction.
1243    ///
1244    /// Sets the channel to shutdown if an error occurs.
1245    pub fn send(
1246        self,
1247        mut result: Result<(), NetworkRegistrySetDefaultError>,
1248    ) -> Result<(), fidl::Error> {
1249        let _result = self.send_raw(result);
1250        if _result.is_err() {
1251            self.control_handle.shutdown();
1252        }
1253        self.drop_without_shutdown();
1254        _result
1255    }
1256
1257    /// Similar to "send" but does not shutdown the channel if an error occurs.
1258    pub fn send_no_shutdown_on_err(
1259        self,
1260        mut result: Result<(), NetworkRegistrySetDefaultError>,
1261    ) -> Result<(), fidl::Error> {
1262        let _result = self.send_raw(result);
1263        self.drop_without_shutdown();
1264        _result
1265    }
1266
1267    fn send_raw(
1268        &self,
1269        mut result: Result<(), NetworkRegistrySetDefaultError>,
1270    ) -> Result<(), fidl::Error> {
1271        self.control_handle.inner.send::<fidl::encoding::ResultType<
1272            fidl::encoding::EmptyStruct,
1273            NetworkRegistrySetDefaultError,
1274        >>(
1275            result,
1276            self.tx_id,
1277            0x787930c67b8cf82c,
1278            fidl::encoding::DynamicFlags::empty(),
1279        )
1280    }
1281}
1282
1283#[must_use = "FIDL methods require a response to be sent"]
1284#[derive(Debug)]
1285pub struct FuchsiaNetworksAddResponder {
1286    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1287    tx_id: u32,
1288}
1289
1290/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1291/// if the responder is dropped without sending a response, so that the client
1292/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1293impl std::ops::Drop for FuchsiaNetworksAddResponder {
1294    fn drop(&mut self) {
1295        self.control_handle.shutdown();
1296        // Safety: drops once, never accessed again
1297        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1298    }
1299}
1300
1301impl fidl::endpoints::Responder for FuchsiaNetworksAddResponder {
1302    type ControlHandle = FuchsiaNetworksControlHandle;
1303
1304    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1305        &self.control_handle
1306    }
1307
1308    fn drop_without_shutdown(mut self) {
1309        // Safety: drops once, never accessed again due to mem::forget
1310        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1311        // Prevent Drop from running (which would shut down the channel)
1312        std::mem::forget(self);
1313    }
1314}
1315
1316impl FuchsiaNetworksAddResponder {
1317    /// Sends a response to the FIDL transaction.
1318    ///
1319    /// Sets the channel to shutdown if an error occurs.
1320    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
1321        let _result = self.send_raw(result);
1322        if _result.is_err() {
1323            self.control_handle.shutdown();
1324        }
1325        self.drop_without_shutdown();
1326        _result
1327    }
1328
1329    /// Similar to "send" but does not shutdown the channel if an error occurs.
1330    pub fn send_no_shutdown_on_err(
1331        self,
1332        mut result: Result<(), NetworkRegistryAddError>,
1333    ) -> Result<(), fidl::Error> {
1334        let _result = self.send_raw(result);
1335        self.drop_without_shutdown();
1336        _result
1337    }
1338
1339    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
1340        self.control_handle.inner.send::<fidl::encoding::ResultType<
1341            fidl::encoding::EmptyStruct,
1342            NetworkRegistryAddError,
1343        >>(
1344            result,
1345            self.tx_id,
1346            0x197e70a1cbeab3ad,
1347            fidl::encoding::DynamicFlags::empty(),
1348        )
1349    }
1350}
1351
1352#[must_use = "FIDL methods require a response to be sent"]
1353#[derive(Debug)]
1354pub struct FuchsiaNetworksUpdateResponder {
1355    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1356    tx_id: u32,
1357}
1358
1359/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1360/// if the responder is dropped without sending a response, so that the client
1361/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1362impl std::ops::Drop for FuchsiaNetworksUpdateResponder {
1363    fn drop(&mut self) {
1364        self.control_handle.shutdown();
1365        // Safety: drops once, never accessed again
1366        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1367    }
1368}
1369
1370impl fidl::endpoints::Responder for FuchsiaNetworksUpdateResponder {
1371    type ControlHandle = FuchsiaNetworksControlHandle;
1372
1373    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1374        &self.control_handle
1375    }
1376
1377    fn drop_without_shutdown(mut self) {
1378        // Safety: drops once, never accessed again due to mem::forget
1379        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1380        // Prevent Drop from running (which would shut down the channel)
1381        std::mem::forget(self);
1382    }
1383}
1384
1385impl FuchsiaNetworksUpdateResponder {
1386    /// Sends a response to the FIDL transaction.
1387    ///
1388    /// Sets the channel to shutdown if an error occurs.
1389    pub fn send(
1390        self,
1391        mut result: Result<(), NetworkRegistryUpdateError>,
1392    ) -> Result<(), fidl::Error> {
1393        let _result = self.send_raw(result);
1394        if _result.is_err() {
1395            self.control_handle.shutdown();
1396        }
1397        self.drop_without_shutdown();
1398        _result
1399    }
1400
1401    /// Similar to "send" but does not shutdown the channel if an error occurs.
1402    pub fn send_no_shutdown_on_err(
1403        self,
1404        mut result: Result<(), NetworkRegistryUpdateError>,
1405    ) -> Result<(), fidl::Error> {
1406        let _result = self.send_raw(result);
1407        self.drop_without_shutdown();
1408        _result
1409    }
1410
1411    fn send_raw(
1412        &self,
1413        mut result: Result<(), NetworkRegistryUpdateError>,
1414    ) -> Result<(), fidl::Error> {
1415        self.control_handle.inner.send::<fidl::encoding::ResultType<
1416            fidl::encoding::EmptyStruct,
1417            NetworkRegistryUpdateError,
1418        >>(
1419            result,
1420            self.tx_id,
1421            0x3bc790ae5418ff0e,
1422            fidl::encoding::DynamicFlags::empty(),
1423        )
1424    }
1425}
1426
1427#[must_use = "FIDL methods require a response to be sent"]
1428#[derive(Debug)]
1429pub struct FuchsiaNetworksRemoveResponder {
1430    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1431    tx_id: u32,
1432}
1433
1434/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1435/// if the responder is dropped without sending a response, so that the client
1436/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1437impl std::ops::Drop for FuchsiaNetworksRemoveResponder {
1438    fn drop(&mut self) {
1439        self.control_handle.shutdown();
1440        // Safety: drops once, never accessed again
1441        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1442    }
1443}
1444
1445impl fidl::endpoints::Responder for FuchsiaNetworksRemoveResponder {
1446    type ControlHandle = FuchsiaNetworksControlHandle;
1447
1448    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1449        &self.control_handle
1450    }
1451
1452    fn drop_without_shutdown(mut self) {
1453        // Safety: drops once, never accessed again due to mem::forget
1454        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1455        // Prevent Drop from running (which would shut down the channel)
1456        std::mem::forget(self);
1457    }
1458}
1459
1460impl FuchsiaNetworksRemoveResponder {
1461    /// Sends a response to the FIDL transaction.
1462    ///
1463    /// Sets the channel to shutdown if an error occurs.
1464    pub fn send(
1465        self,
1466        mut result: Result<(), NetworkRegistryRemoveError>,
1467    ) -> Result<(), fidl::Error> {
1468        let _result = self.send_raw(result);
1469        if _result.is_err() {
1470            self.control_handle.shutdown();
1471        }
1472        self.drop_without_shutdown();
1473        _result
1474    }
1475
1476    /// Similar to "send" but does not shutdown the channel if an error occurs.
1477    pub fn send_no_shutdown_on_err(
1478        self,
1479        mut result: Result<(), NetworkRegistryRemoveError>,
1480    ) -> Result<(), fidl::Error> {
1481        let _result = self.send_raw(result);
1482        self.drop_without_shutdown();
1483        _result
1484    }
1485
1486    fn send_raw(
1487        &self,
1488        mut result: Result<(), NetworkRegistryRemoveError>,
1489    ) -> Result<(), fidl::Error> {
1490        self.control_handle.inner.send::<fidl::encoding::ResultType<
1491            fidl::encoding::EmptyStruct,
1492            NetworkRegistryRemoveError,
1493        >>(
1494            result,
1495            self.tx_id,
1496            0x1302df41dca6379e,
1497            fidl::encoding::DynamicFlags::empty(),
1498        )
1499    }
1500}
1501
1502#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1503pub struct NetworkRegistryMarker;
1504
1505impl fidl::endpoints::ProtocolMarker for NetworkRegistryMarker {
1506    type Proxy = NetworkRegistryProxy;
1507    type RequestStream = NetworkRegistryRequestStream;
1508    #[cfg(target_os = "fuchsia")]
1509    type SynchronousProxy = NetworkRegistrySynchronousProxy;
1510
1511    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.NetworkRegistry";
1512}
1513impl fidl::endpoints::DiscoverableProtocolMarker for NetworkRegistryMarker {}
1514pub type NetworkRegistrySetDefaultResult = Result<(), NetworkRegistrySetDefaultError>;
1515pub type NetworkRegistryAddResult = Result<(), NetworkRegistryAddError>;
1516pub type NetworkRegistryUpdateResult = Result<(), NetworkRegistryUpdateError>;
1517pub type NetworkRegistryRemoveResult = Result<(), NetworkRegistryRemoveError>;
1518
1519pub trait NetworkRegistryProxyInterface: Send + Sync {
1520    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
1521        + Send;
1522    fn r#set_default(
1523        &self,
1524        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1525    ) -> Self::SetDefaultResponseFut;
1526    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
1527        + Send;
1528    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
1529    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
1530        + Send;
1531    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
1532    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
1533        + Send;
1534    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
1535}
1536#[derive(Debug)]
1537#[cfg(target_os = "fuchsia")]
1538pub struct NetworkRegistrySynchronousProxy {
1539    client: fidl::client::sync::Client,
1540}
1541
1542#[cfg(target_os = "fuchsia")]
1543impl fidl::endpoints::SynchronousProxy for NetworkRegistrySynchronousProxy {
1544    type Proxy = NetworkRegistryProxy;
1545    type Protocol = NetworkRegistryMarker;
1546
1547    fn from_channel(inner: fidl::Channel) -> Self {
1548        Self::new(inner)
1549    }
1550
1551    fn into_channel(self) -> fidl::Channel {
1552        self.client.into_channel()
1553    }
1554
1555    fn as_channel(&self) -> &fidl::Channel {
1556        self.client.as_channel()
1557    }
1558}
1559
1560#[cfg(target_os = "fuchsia")]
1561impl NetworkRegistrySynchronousProxy {
1562    pub fn new(channel: fidl::Channel) -> Self {
1563        let protocol_name = <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1564        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1565    }
1566
1567    pub fn into_channel(self) -> fidl::Channel {
1568        self.client.into_channel()
1569    }
1570
1571    /// Waits until an event arrives and returns it. It is safe for other
1572    /// threads to make concurrent requests while waiting for an event.
1573    pub fn wait_for_event(
1574        &self,
1575        deadline: zx::MonotonicInstant,
1576    ) -> Result<NetworkRegistryEvent, fidl::Error> {
1577        NetworkRegistryEvent::decode(self.client.wait_for_event(deadline)?)
1578    }
1579
1580    /// Sets the default network.
1581    ///
1582    /// The network must have previously been registered by a call to `Add`.
1583    pub fn r#set_default(
1584        &self,
1585        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1586        ___deadline: zx::MonotonicInstant,
1587    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
1588        let _response =
1589            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
1590                fidl::encoding::EmptyStruct,
1591                NetworkRegistrySetDefaultError,
1592            >>(
1593                (network_id,),
1594                0x787930c67b8cf82c,
1595                fidl::encoding::DynamicFlags::empty(),
1596                ___deadline,
1597            )?;
1598        Ok(_response.map(|x| x))
1599    }
1600
1601    /// Add a new network.
1602    ///
1603    /// This call will not return until the DNS servers have been successfully
1604    /// updated in netcfg.
1605    pub fn r#add(
1606        &self,
1607        mut network: &Network,
1608        ___deadline: zx::MonotonicInstant,
1609    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
1610        let _response =
1611            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
1612                fidl::encoding::EmptyStruct,
1613                NetworkRegistryAddError,
1614            >>(
1615                (network,),
1616                0x197e70a1cbeab3ad,
1617                fidl::encoding::DynamicFlags::empty(),
1618                ___deadline,
1619            )?;
1620        Ok(_response.map(|x| x))
1621    }
1622
1623    /// Update a previously Added network.
1624    ///
1625    /// This call will not return until the DNS servers have been
1626    /// successfully updated in netcfg.
1627    pub fn r#update(
1628        &self,
1629        mut network: &Network,
1630        ___deadline: zx::MonotonicInstant,
1631    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
1632        let _response =
1633            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
1634                fidl::encoding::EmptyStruct,
1635                NetworkRegistryUpdateError,
1636            >>(
1637                (network,),
1638                0x3bc790ae5418ff0e,
1639                fidl::encoding::DynamicFlags::empty(),
1640                ___deadline,
1641            )?;
1642        Ok(_response.map(|x| x))
1643    }
1644
1645    /// Remove a previously Added network.
1646    ///
1647    /// This call will not return until the DNS servers have been
1648    /// successfully updated in netcfg.
1649    pub fn r#remove(
1650        &self,
1651        mut network_id: u32,
1652        ___deadline: zx::MonotonicInstant,
1653    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
1654        let _response =
1655            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
1656                fidl::encoding::EmptyStruct,
1657                NetworkRegistryRemoveError,
1658            >>(
1659                (network_id,),
1660                0x1302df41dca6379e,
1661                fidl::encoding::DynamicFlags::empty(),
1662                ___deadline,
1663            )?;
1664        Ok(_response.map(|x| x))
1665    }
1666}
1667
1668#[cfg(target_os = "fuchsia")]
1669impl From<NetworkRegistrySynchronousProxy> for zx::NullableHandle {
1670    fn from(value: NetworkRegistrySynchronousProxy) -> Self {
1671        value.into_channel().into()
1672    }
1673}
1674
1675#[cfg(target_os = "fuchsia")]
1676impl From<fidl::Channel> for NetworkRegistrySynchronousProxy {
1677    fn from(value: fidl::Channel) -> Self {
1678        Self::new(value)
1679    }
1680}
1681
1682#[cfg(target_os = "fuchsia")]
1683impl fidl::endpoints::FromClient for NetworkRegistrySynchronousProxy {
1684    type Protocol = NetworkRegistryMarker;
1685
1686    fn from_client(value: fidl::endpoints::ClientEnd<NetworkRegistryMarker>) -> Self {
1687        Self::new(value.into_channel())
1688    }
1689}
1690
1691#[derive(Debug, Clone)]
1692pub struct NetworkRegistryProxy {
1693    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1694}
1695
1696impl fidl::endpoints::Proxy for NetworkRegistryProxy {
1697    type Protocol = NetworkRegistryMarker;
1698
1699    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1700        Self::new(inner)
1701    }
1702
1703    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1704        self.client.into_channel().map_err(|client| Self { client })
1705    }
1706
1707    fn as_channel(&self) -> &::fidl::AsyncChannel {
1708        self.client.as_channel()
1709    }
1710}
1711
1712impl NetworkRegistryProxy {
1713    /// Create a new Proxy for fuchsia.net.policy.socketproxy/NetworkRegistry.
1714    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1715        let protocol_name = <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1716        Self { client: fidl::client::Client::new(channel, protocol_name) }
1717    }
1718
1719    /// Get a Stream of events from the remote end of the protocol.
1720    ///
1721    /// # Panics
1722    ///
1723    /// Panics if the event stream was already taken.
1724    pub fn take_event_stream(&self) -> NetworkRegistryEventStream {
1725        NetworkRegistryEventStream { event_receiver: self.client.take_event_receiver() }
1726    }
1727
1728    /// Sets the default network.
1729    ///
1730    /// The network must have previously been registered by a call to `Add`.
1731    pub fn r#set_default(
1732        &self,
1733        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1734    ) -> fidl::client::QueryResponseFut<
1735        NetworkRegistrySetDefaultResult,
1736        fidl::encoding::DefaultFuchsiaResourceDialect,
1737    > {
1738        NetworkRegistryProxyInterface::r#set_default(self, network_id)
1739    }
1740
1741    /// Add a new network.
1742    ///
1743    /// This call will not return until the DNS servers have been successfully
1744    /// updated in netcfg.
1745    pub fn r#add(
1746        &self,
1747        mut network: &Network,
1748    ) -> fidl::client::QueryResponseFut<
1749        NetworkRegistryAddResult,
1750        fidl::encoding::DefaultFuchsiaResourceDialect,
1751    > {
1752        NetworkRegistryProxyInterface::r#add(self, network)
1753    }
1754
1755    /// Update a previously Added network.
1756    ///
1757    /// This call will not return until the DNS servers have been
1758    /// successfully updated in netcfg.
1759    pub fn r#update(
1760        &self,
1761        mut network: &Network,
1762    ) -> fidl::client::QueryResponseFut<
1763        NetworkRegistryUpdateResult,
1764        fidl::encoding::DefaultFuchsiaResourceDialect,
1765    > {
1766        NetworkRegistryProxyInterface::r#update(self, network)
1767    }
1768
1769    /// Remove a previously Added network.
1770    ///
1771    /// This call will not return until the DNS servers have been
1772    /// successfully updated in netcfg.
1773    pub fn r#remove(
1774        &self,
1775        mut network_id: u32,
1776    ) -> fidl::client::QueryResponseFut<
1777        NetworkRegistryRemoveResult,
1778        fidl::encoding::DefaultFuchsiaResourceDialect,
1779    > {
1780        NetworkRegistryProxyInterface::r#remove(self, network_id)
1781    }
1782}
1783
1784impl NetworkRegistryProxyInterface for NetworkRegistryProxy {
1785    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
1786        NetworkRegistrySetDefaultResult,
1787        fidl::encoding::DefaultFuchsiaResourceDialect,
1788    >;
1789    fn r#set_default(
1790        &self,
1791        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1792    ) -> Self::SetDefaultResponseFut {
1793        fn _decode(
1794            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1795        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
1796            let _response = fidl::client::decode_transaction_body::<
1797                fidl::encoding::ResultType<
1798                    fidl::encoding::EmptyStruct,
1799                    NetworkRegistrySetDefaultError,
1800                >,
1801                fidl::encoding::DefaultFuchsiaResourceDialect,
1802                0x787930c67b8cf82c,
1803            >(_buf?)?;
1804            Ok(_response.map(|x| x))
1805        }
1806        self.client.send_query_and_decode::<
1807            NetworkRegistrySetDefaultRequest,
1808            NetworkRegistrySetDefaultResult,
1809        >(
1810            (network_id,),
1811            0x787930c67b8cf82c,
1812            fidl::encoding::DynamicFlags::empty(),
1813            _decode,
1814        )
1815    }
1816
1817    type AddResponseFut = fidl::client::QueryResponseFut<
1818        NetworkRegistryAddResult,
1819        fidl::encoding::DefaultFuchsiaResourceDialect,
1820    >;
1821    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
1822        fn _decode(
1823            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1824        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
1825            let _response = fidl::client::decode_transaction_body::<
1826                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
1827                fidl::encoding::DefaultFuchsiaResourceDialect,
1828                0x197e70a1cbeab3ad,
1829            >(_buf?)?;
1830            Ok(_response.map(|x| x))
1831        }
1832        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
1833            (network,),
1834            0x197e70a1cbeab3ad,
1835            fidl::encoding::DynamicFlags::empty(),
1836            _decode,
1837        )
1838    }
1839
1840    type UpdateResponseFut = fidl::client::QueryResponseFut<
1841        NetworkRegistryUpdateResult,
1842        fidl::encoding::DefaultFuchsiaResourceDialect,
1843    >;
1844    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
1845        fn _decode(
1846            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1847        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
1848            let _response = fidl::client::decode_transaction_body::<
1849                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
1850                fidl::encoding::DefaultFuchsiaResourceDialect,
1851                0x3bc790ae5418ff0e,
1852            >(_buf?)?;
1853            Ok(_response.map(|x| x))
1854        }
1855        self.client
1856            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
1857                (network,),
1858                0x3bc790ae5418ff0e,
1859                fidl::encoding::DynamicFlags::empty(),
1860                _decode,
1861            )
1862    }
1863
1864    type RemoveResponseFut = fidl::client::QueryResponseFut<
1865        NetworkRegistryRemoveResult,
1866        fidl::encoding::DefaultFuchsiaResourceDialect,
1867    >;
1868    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
1869        fn _decode(
1870            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1871        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
1872            let _response = fidl::client::decode_transaction_body::<
1873                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
1874                fidl::encoding::DefaultFuchsiaResourceDialect,
1875                0x1302df41dca6379e,
1876            >(_buf?)?;
1877            Ok(_response.map(|x| x))
1878        }
1879        self.client
1880            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
1881                (network_id,),
1882                0x1302df41dca6379e,
1883                fidl::encoding::DynamicFlags::empty(),
1884                _decode,
1885            )
1886    }
1887}
1888
1889pub struct NetworkRegistryEventStream {
1890    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1891}
1892
1893impl std::marker::Unpin for NetworkRegistryEventStream {}
1894
1895impl futures::stream::FusedStream for NetworkRegistryEventStream {
1896    fn is_terminated(&self) -> bool {
1897        self.event_receiver.is_terminated()
1898    }
1899}
1900
1901impl futures::Stream for NetworkRegistryEventStream {
1902    type Item = Result<NetworkRegistryEvent, fidl::Error>;
1903
1904    fn poll_next(
1905        mut self: std::pin::Pin<&mut Self>,
1906        cx: &mut std::task::Context<'_>,
1907    ) -> std::task::Poll<Option<Self::Item>> {
1908        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1909            &mut self.event_receiver,
1910            cx
1911        )?) {
1912            Some(buf) => std::task::Poll::Ready(Some(NetworkRegistryEvent::decode(buf))),
1913            None => std::task::Poll::Ready(None),
1914        }
1915    }
1916}
1917
1918#[derive(Debug)]
1919pub enum NetworkRegistryEvent {}
1920
1921impl NetworkRegistryEvent {
1922    /// Decodes a message buffer as a [`NetworkRegistryEvent`].
1923    fn decode(
1924        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1925    ) -> Result<NetworkRegistryEvent, fidl::Error> {
1926        let (bytes, _handles) = buf.split_mut();
1927        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1928        debug_assert_eq!(tx_header.tx_id, 0);
1929        match tx_header.ordinal {
1930            _ => Err(fidl::Error::UnknownOrdinal {
1931                ordinal: tx_header.ordinal,
1932                protocol_name:
1933                    <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1934            }),
1935        }
1936    }
1937}
1938
1939/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/NetworkRegistry.
1940pub struct NetworkRegistryRequestStream {
1941    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1942    is_terminated: bool,
1943}
1944
1945impl std::marker::Unpin for NetworkRegistryRequestStream {}
1946
1947impl futures::stream::FusedStream for NetworkRegistryRequestStream {
1948    fn is_terminated(&self) -> bool {
1949        self.is_terminated
1950    }
1951}
1952
1953impl fidl::endpoints::RequestStream for NetworkRegistryRequestStream {
1954    type Protocol = NetworkRegistryMarker;
1955    type ControlHandle = NetworkRegistryControlHandle;
1956
1957    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1958        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1959    }
1960
1961    fn control_handle(&self) -> Self::ControlHandle {
1962        NetworkRegistryControlHandle { inner: self.inner.clone() }
1963    }
1964
1965    fn into_inner(
1966        self,
1967    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1968    {
1969        (self.inner, self.is_terminated)
1970    }
1971
1972    fn from_inner(
1973        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1974        is_terminated: bool,
1975    ) -> Self {
1976        Self { inner, is_terminated }
1977    }
1978}
1979
1980impl futures::Stream for NetworkRegistryRequestStream {
1981    type Item = Result<NetworkRegistryRequest, fidl::Error>;
1982
1983    fn poll_next(
1984        mut self: std::pin::Pin<&mut Self>,
1985        cx: &mut std::task::Context<'_>,
1986    ) -> std::task::Poll<Option<Self::Item>> {
1987        let this = &mut *self;
1988        if this.inner.check_shutdown(cx) {
1989            this.is_terminated = true;
1990            return std::task::Poll::Ready(None);
1991        }
1992        if this.is_terminated {
1993            panic!("polled NetworkRegistryRequestStream after completion");
1994        }
1995        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1996            |bytes, handles| {
1997                match this.inner.channel().read_etc(cx, bytes, handles) {
1998                    std::task::Poll::Ready(Ok(())) => {}
1999                    std::task::Poll::Pending => return std::task::Poll::Pending,
2000                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2001                        this.is_terminated = true;
2002                        return std::task::Poll::Ready(None);
2003                    }
2004                    std::task::Poll::Ready(Err(e)) => {
2005                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2006                            e.into(),
2007                        ))));
2008                    }
2009                }
2010
2011                // A message has been received from the channel
2012                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2013
2014                std::task::Poll::Ready(Some(match header.ordinal {
2015                    0x787930c67b8cf82c => {
2016                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2017                        let mut req = fidl::new_empty!(
2018                            NetworkRegistrySetDefaultRequest,
2019                            fidl::encoding::DefaultFuchsiaResourceDialect
2020                        );
2021                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
2022                        let control_handle =
2023                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2024                        Ok(NetworkRegistryRequest::SetDefault {
2025                            network_id: req.network_id,
2026
2027                            responder: NetworkRegistrySetDefaultResponder {
2028                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2029                                tx_id: header.tx_id,
2030                            },
2031                        })
2032                    }
2033                    0x197e70a1cbeab3ad => {
2034                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2035                        let mut req = fidl::new_empty!(
2036                            NetworkRegistryAddRequest,
2037                            fidl::encoding::DefaultFuchsiaResourceDialect
2038                        );
2039                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
2040                        let control_handle =
2041                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2042                        Ok(NetworkRegistryRequest::Add {
2043                            network: req.network,
2044
2045                            responder: NetworkRegistryAddResponder {
2046                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2047                                tx_id: header.tx_id,
2048                            },
2049                        })
2050                    }
2051                    0x3bc790ae5418ff0e => {
2052                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2053                        let mut req = fidl::new_empty!(
2054                            NetworkRegistryUpdateRequest,
2055                            fidl::encoding::DefaultFuchsiaResourceDialect
2056                        );
2057                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
2058                        let control_handle =
2059                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2060                        Ok(NetworkRegistryRequest::Update {
2061                            network: req.network,
2062
2063                            responder: NetworkRegistryUpdateResponder {
2064                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2065                                tx_id: header.tx_id,
2066                            },
2067                        })
2068                    }
2069                    0x1302df41dca6379e => {
2070                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2071                        let mut req = fidl::new_empty!(
2072                            NetworkRegistryRemoveRequest,
2073                            fidl::encoding::DefaultFuchsiaResourceDialect
2074                        );
2075                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
2076                        let control_handle =
2077                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2078                        Ok(NetworkRegistryRequest::Remove {
2079                            network_id: req.network_id,
2080
2081                            responder: NetworkRegistryRemoveResponder {
2082                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2083                                tx_id: header.tx_id,
2084                            },
2085                        })
2086                    }
2087                    _ => Err(fidl::Error::UnknownOrdinal {
2088                        ordinal: header.ordinal,
2089                        protocol_name:
2090                            <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2091                    }),
2092                }))
2093            },
2094        )
2095    }
2096}
2097
2098#[derive(Debug)]
2099pub enum NetworkRegistryRequest {
2100    /// Sets the default network.
2101    ///
2102    /// The network must have previously been registered by a call to `Add`.
2103    SetDefault {
2104        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
2105        responder: NetworkRegistrySetDefaultResponder,
2106    },
2107    /// Add a new network.
2108    ///
2109    /// This call will not return until the DNS servers have been successfully
2110    /// updated in netcfg.
2111    Add { network: Network, responder: NetworkRegistryAddResponder },
2112    /// Update a previously Added network.
2113    ///
2114    /// This call will not return until the DNS servers have been
2115    /// successfully updated in netcfg.
2116    Update { network: Network, responder: NetworkRegistryUpdateResponder },
2117    /// Remove a previously Added network.
2118    ///
2119    /// This call will not return until the DNS servers have been
2120    /// successfully updated in netcfg.
2121    Remove { network_id: u32, responder: NetworkRegistryRemoveResponder },
2122}
2123
2124impl NetworkRegistryRequest {
2125    #[allow(irrefutable_let_patterns)]
2126    pub fn into_set_default(
2127        self,
2128    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, NetworkRegistrySetDefaultResponder)>
2129    {
2130        if let NetworkRegistryRequest::SetDefault { network_id, responder } = self {
2131            Some((network_id, responder))
2132        } else {
2133            None
2134        }
2135    }
2136
2137    #[allow(irrefutable_let_patterns)]
2138    pub fn into_add(self) -> Option<(Network, NetworkRegistryAddResponder)> {
2139        if let NetworkRegistryRequest::Add { network, responder } = self {
2140            Some((network, responder))
2141        } else {
2142            None
2143        }
2144    }
2145
2146    #[allow(irrefutable_let_patterns)]
2147    pub fn into_update(self) -> Option<(Network, NetworkRegistryUpdateResponder)> {
2148        if let NetworkRegistryRequest::Update { network, responder } = self {
2149            Some((network, responder))
2150        } else {
2151            None
2152        }
2153    }
2154
2155    #[allow(irrefutable_let_patterns)]
2156    pub fn into_remove(self) -> Option<(u32, NetworkRegistryRemoveResponder)> {
2157        if let NetworkRegistryRequest::Remove { network_id, responder } = self {
2158            Some((network_id, responder))
2159        } else {
2160            None
2161        }
2162    }
2163
2164    /// Name of the method defined in FIDL
2165    pub fn method_name(&self) -> &'static str {
2166        match *self {
2167            NetworkRegistryRequest::SetDefault { .. } => "set_default",
2168            NetworkRegistryRequest::Add { .. } => "add",
2169            NetworkRegistryRequest::Update { .. } => "update",
2170            NetworkRegistryRequest::Remove { .. } => "remove",
2171        }
2172    }
2173}
2174
2175#[derive(Debug, Clone)]
2176pub struct NetworkRegistryControlHandle {
2177    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2178}
2179
2180impl fidl::endpoints::ControlHandle for NetworkRegistryControlHandle {
2181    fn shutdown(&self) {
2182        self.inner.shutdown()
2183    }
2184
2185    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2186        self.inner.shutdown_with_epitaph(status)
2187    }
2188
2189    fn is_closed(&self) -> bool {
2190        self.inner.channel().is_closed()
2191    }
2192    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2193        self.inner.channel().on_closed()
2194    }
2195
2196    #[cfg(target_os = "fuchsia")]
2197    fn signal_peer(
2198        &self,
2199        clear_mask: zx::Signals,
2200        set_mask: zx::Signals,
2201    ) -> Result<(), zx_status::Status> {
2202        use fidl::Peered;
2203        self.inner.channel().signal_peer(clear_mask, set_mask)
2204    }
2205}
2206
2207impl NetworkRegistryControlHandle {}
2208
2209#[must_use = "FIDL methods require a response to be sent"]
2210#[derive(Debug)]
2211pub struct NetworkRegistrySetDefaultResponder {
2212    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2213    tx_id: u32,
2214}
2215
2216/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2217/// if the responder is dropped without sending a response, so that the client
2218/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2219impl std::ops::Drop for NetworkRegistrySetDefaultResponder {
2220    fn drop(&mut self) {
2221        self.control_handle.shutdown();
2222        // Safety: drops once, never accessed again
2223        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2224    }
2225}
2226
2227impl fidl::endpoints::Responder for NetworkRegistrySetDefaultResponder {
2228    type ControlHandle = NetworkRegistryControlHandle;
2229
2230    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2231        &self.control_handle
2232    }
2233
2234    fn drop_without_shutdown(mut self) {
2235        // Safety: drops once, never accessed again due to mem::forget
2236        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2237        // Prevent Drop from running (which would shut down the channel)
2238        std::mem::forget(self);
2239    }
2240}
2241
2242impl NetworkRegistrySetDefaultResponder {
2243    /// Sends a response to the FIDL transaction.
2244    ///
2245    /// Sets the channel to shutdown if an error occurs.
2246    pub fn send(
2247        self,
2248        mut result: Result<(), NetworkRegistrySetDefaultError>,
2249    ) -> Result<(), fidl::Error> {
2250        let _result = self.send_raw(result);
2251        if _result.is_err() {
2252            self.control_handle.shutdown();
2253        }
2254        self.drop_without_shutdown();
2255        _result
2256    }
2257
2258    /// Similar to "send" but does not shutdown the channel if an error occurs.
2259    pub fn send_no_shutdown_on_err(
2260        self,
2261        mut result: Result<(), NetworkRegistrySetDefaultError>,
2262    ) -> Result<(), fidl::Error> {
2263        let _result = self.send_raw(result);
2264        self.drop_without_shutdown();
2265        _result
2266    }
2267
2268    fn send_raw(
2269        &self,
2270        mut result: Result<(), NetworkRegistrySetDefaultError>,
2271    ) -> Result<(), fidl::Error> {
2272        self.control_handle.inner.send::<fidl::encoding::ResultType<
2273            fidl::encoding::EmptyStruct,
2274            NetworkRegistrySetDefaultError,
2275        >>(
2276            result,
2277            self.tx_id,
2278            0x787930c67b8cf82c,
2279            fidl::encoding::DynamicFlags::empty(),
2280        )
2281    }
2282}
2283
2284#[must_use = "FIDL methods require a response to be sent"]
2285#[derive(Debug)]
2286pub struct NetworkRegistryAddResponder {
2287    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2288    tx_id: u32,
2289}
2290
2291/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2292/// if the responder is dropped without sending a response, so that the client
2293/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2294impl std::ops::Drop for NetworkRegistryAddResponder {
2295    fn drop(&mut self) {
2296        self.control_handle.shutdown();
2297        // Safety: drops once, never accessed again
2298        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2299    }
2300}
2301
2302impl fidl::endpoints::Responder for NetworkRegistryAddResponder {
2303    type ControlHandle = NetworkRegistryControlHandle;
2304
2305    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2306        &self.control_handle
2307    }
2308
2309    fn drop_without_shutdown(mut self) {
2310        // Safety: drops once, never accessed again due to mem::forget
2311        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2312        // Prevent Drop from running (which would shut down the channel)
2313        std::mem::forget(self);
2314    }
2315}
2316
2317impl NetworkRegistryAddResponder {
2318    /// Sends a response to the FIDL transaction.
2319    ///
2320    /// Sets the channel to shutdown if an error occurs.
2321    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
2322        let _result = self.send_raw(result);
2323        if _result.is_err() {
2324            self.control_handle.shutdown();
2325        }
2326        self.drop_without_shutdown();
2327        _result
2328    }
2329
2330    /// Similar to "send" but does not shutdown the channel if an error occurs.
2331    pub fn send_no_shutdown_on_err(
2332        self,
2333        mut result: Result<(), NetworkRegistryAddError>,
2334    ) -> Result<(), fidl::Error> {
2335        let _result = self.send_raw(result);
2336        self.drop_without_shutdown();
2337        _result
2338    }
2339
2340    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
2341        self.control_handle.inner.send::<fidl::encoding::ResultType<
2342            fidl::encoding::EmptyStruct,
2343            NetworkRegistryAddError,
2344        >>(
2345            result,
2346            self.tx_id,
2347            0x197e70a1cbeab3ad,
2348            fidl::encoding::DynamicFlags::empty(),
2349        )
2350    }
2351}
2352
2353#[must_use = "FIDL methods require a response to be sent"]
2354#[derive(Debug)]
2355pub struct NetworkRegistryUpdateResponder {
2356    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2357    tx_id: u32,
2358}
2359
2360/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2361/// if the responder is dropped without sending a response, so that the client
2362/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2363impl std::ops::Drop for NetworkRegistryUpdateResponder {
2364    fn drop(&mut self) {
2365        self.control_handle.shutdown();
2366        // Safety: drops once, never accessed again
2367        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2368    }
2369}
2370
2371impl fidl::endpoints::Responder for NetworkRegistryUpdateResponder {
2372    type ControlHandle = NetworkRegistryControlHandle;
2373
2374    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2375        &self.control_handle
2376    }
2377
2378    fn drop_without_shutdown(mut self) {
2379        // Safety: drops once, never accessed again due to mem::forget
2380        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2381        // Prevent Drop from running (which would shut down the channel)
2382        std::mem::forget(self);
2383    }
2384}
2385
2386impl NetworkRegistryUpdateResponder {
2387    /// Sends a response to the FIDL transaction.
2388    ///
2389    /// Sets the channel to shutdown if an error occurs.
2390    pub fn send(
2391        self,
2392        mut result: Result<(), NetworkRegistryUpdateError>,
2393    ) -> Result<(), fidl::Error> {
2394        let _result = self.send_raw(result);
2395        if _result.is_err() {
2396            self.control_handle.shutdown();
2397        }
2398        self.drop_without_shutdown();
2399        _result
2400    }
2401
2402    /// Similar to "send" but does not shutdown the channel if an error occurs.
2403    pub fn send_no_shutdown_on_err(
2404        self,
2405        mut result: Result<(), NetworkRegistryUpdateError>,
2406    ) -> Result<(), fidl::Error> {
2407        let _result = self.send_raw(result);
2408        self.drop_without_shutdown();
2409        _result
2410    }
2411
2412    fn send_raw(
2413        &self,
2414        mut result: Result<(), NetworkRegistryUpdateError>,
2415    ) -> Result<(), fidl::Error> {
2416        self.control_handle.inner.send::<fidl::encoding::ResultType<
2417            fidl::encoding::EmptyStruct,
2418            NetworkRegistryUpdateError,
2419        >>(
2420            result,
2421            self.tx_id,
2422            0x3bc790ae5418ff0e,
2423            fidl::encoding::DynamicFlags::empty(),
2424        )
2425    }
2426}
2427
2428#[must_use = "FIDL methods require a response to be sent"]
2429#[derive(Debug)]
2430pub struct NetworkRegistryRemoveResponder {
2431    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2432    tx_id: u32,
2433}
2434
2435/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2436/// if the responder is dropped without sending a response, so that the client
2437/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2438impl std::ops::Drop for NetworkRegistryRemoveResponder {
2439    fn drop(&mut self) {
2440        self.control_handle.shutdown();
2441        // Safety: drops once, never accessed again
2442        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2443    }
2444}
2445
2446impl fidl::endpoints::Responder for NetworkRegistryRemoveResponder {
2447    type ControlHandle = NetworkRegistryControlHandle;
2448
2449    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2450        &self.control_handle
2451    }
2452
2453    fn drop_without_shutdown(mut self) {
2454        // Safety: drops once, never accessed again due to mem::forget
2455        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2456        // Prevent Drop from running (which would shut down the channel)
2457        std::mem::forget(self);
2458    }
2459}
2460
2461impl NetworkRegistryRemoveResponder {
2462    /// Sends a response to the FIDL transaction.
2463    ///
2464    /// Sets the channel to shutdown if an error occurs.
2465    pub fn send(
2466        self,
2467        mut result: Result<(), NetworkRegistryRemoveError>,
2468    ) -> Result<(), fidl::Error> {
2469        let _result = self.send_raw(result);
2470        if _result.is_err() {
2471            self.control_handle.shutdown();
2472        }
2473        self.drop_without_shutdown();
2474        _result
2475    }
2476
2477    /// Similar to "send" but does not shutdown the channel if an error occurs.
2478    pub fn send_no_shutdown_on_err(
2479        self,
2480        mut result: Result<(), NetworkRegistryRemoveError>,
2481    ) -> Result<(), fidl::Error> {
2482        let _result = self.send_raw(result);
2483        self.drop_without_shutdown();
2484        _result
2485    }
2486
2487    fn send_raw(
2488        &self,
2489        mut result: Result<(), NetworkRegistryRemoveError>,
2490    ) -> Result<(), fidl::Error> {
2491        self.control_handle.inner.send::<fidl::encoding::ResultType<
2492            fidl::encoding::EmptyStruct,
2493            NetworkRegistryRemoveError,
2494        >>(
2495            result,
2496            self.tx_id,
2497            0x1302df41dca6379e,
2498            fidl::encoding::DynamicFlags::empty(),
2499        )
2500    }
2501}
2502
2503#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2504pub struct StarnixNetworksMarker;
2505
2506impl fidl::endpoints::ProtocolMarker for StarnixNetworksMarker {
2507    type Proxy = StarnixNetworksProxy;
2508    type RequestStream = StarnixNetworksRequestStream;
2509    #[cfg(target_os = "fuchsia")]
2510    type SynchronousProxy = StarnixNetworksSynchronousProxy;
2511
2512    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.StarnixNetworks";
2513}
2514impl fidl::endpoints::DiscoverableProtocolMarker for StarnixNetworksMarker {}
2515
2516pub trait StarnixNetworksProxyInterface: Send + Sync {
2517    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
2518        + Send;
2519    fn r#set_default(
2520        &self,
2521        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
2522    ) -> Self::SetDefaultResponseFut;
2523    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
2524        + Send;
2525    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
2526    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
2527        + Send;
2528    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
2529    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
2530        + Send;
2531    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
2532}
2533#[derive(Debug)]
2534#[cfg(target_os = "fuchsia")]
2535pub struct StarnixNetworksSynchronousProxy {
2536    client: fidl::client::sync::Client,
2537}
2538
2539#[cfg(target_os = "fuchsia")]
2540impl fidl::endpoints::SynchronousProxy for StarnixNetworksSynchronousProxy {
2541    type Proxy = StarnixNetworksProxy;
2542    type Protocol = StarnixNetworksMarker;
2543
2544    fn from_channel(inner: fidl::Channel) -> Self {
2545        Self::new(inner)
2546    }
2547
2548    fn into_channel(self) -> fidl::Channel {
2549        self.client.into_channel()
2550    }
2551
2552    fn as_channel(&self) -> &fidl::Channel {
2553        self.client.as_channel()
2554    }
2555}
2556
2557#[cfg(target_os = "fuchsia")]
2558impl StarnixNetworksSynchronousProxy {
2559    pub fn new(channel: fidl::Channel) -> Self {
2560        let protocol_name = <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2561        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
2562    }
2563
2564    pub fn into_channel(self) -> fidl::Channel {
2565        self.client.into_channel()
2566    }
2567
2568    /// Waits until an event arrives and returns it. It is safe for other
2569    /// threads to make concurrent requests while waiting for an event.
2570    pub fn wait_for_event(
2571        &self,
2572        deadline: zx::MonotonicInstant,
2573    ) -> Result<StarnixNetworksEvent, fidl::Error> {
2574        StarnixNetworksEvent::decode(self.client.wait_for_event(deadline)?)
2575    }
2576
2577    /// Sets the default network.
2578    ///
2579    /// The network must have previously been registered by a call to `Add`.
2580    pub fn r#set_default(
2581        &self,
2582        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
2583        ___deadline: zx::MonotonicInstant,
2584    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
2585        let _response =
2586            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
2587                fidl::encoding::EmptyStruct,
2588                NetworkRegistrySetDefaultError,
2589            >>(
2590                (network_id,),
2591                0x787930c67b8cf82c,
2592                fidl::encoding::DynamicFlags::empty(),
2593                ___deadline,
2594            )?;
2595        Ok(_response.map(|x| x))
2596    }
2597
2598    /// Add a new network.
2599    ///
2600    /// This call will not return until the DNS servers have been successfully
2601    /// updated in netcfg.
2602    pub fn r#add(
2603        &self,
2604        mut network: &Network,
2605        ___deadline: zx::MonotonicInstant,
2606    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
2607        let _response =
2608            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
2609                fidl::encoding::EmptyStruct,
2610                NetworkRegistryAddError,
2611            >>(
2612                (network,),
2613                0x197e70a1cbeab3ad,
2614                fidl::encoding::DynamicFlags::empty(),
2615                ___deadline,
2616            )?;
2617        Ok(_response.map(|x| x))
2618    }
2619
2620    /// Update a previously Added network.
2621    ///
2622    /// This call will not return until the DNS servers have been
2623    /// successfully updated in netcfg.
2624    pub fn r#update(
2625        &self,
2626        mut network: &Network,
2627        ___deadline: zx::MonotonicInstant,
2628    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
2629        let _response =
2630            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
2631                fidl::encoding::EmptyStruct,
2632                NetworkRegistryUpdateError,
2633            >>(
2634                (network,),
2635                0x3bc790ae5418ff0e,
2636                fidl::encoding::DynamicFlags::empty(),
2637                ___deadline,
2638            )?;
2639        Ok(_response.map(|x| x))
2640    }
2641
2642    /// Remove a previously Added network.
2643    ///
2644    /// This call will not return until the DNS servers have been
2645    /// successfully updated in netcfg.
2646    pub fn r#remove(
2647        &self,
2648        mut network_id: u32,
2649        ___deadline: zx::MonotonicInstant,
2650    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
2651        let _response =
2652            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
2653                fidl::encoding::EmptyStruct,
2654                NetworkRegistryRemoveError,
2655            >>(
2656                (network_id,),
2657                0x1302df41dca6379e,
2658                fidl::encoding::DynamicFlags::empty(),
2659                ___deadline,
2660            )?;
2661        Ok(_response.map(|x| x))
2662    }
2663}
2664
2665#[cfg(target_os = "fuchsia")]
2666impl From<StarnixNetworksSynchronousProxy> for zx::NullableHandle {
2667    fn from(value: StarnixNetworksSynchronousProxy) -> Self {
2668        value.into_channel().into()
2669    }
2670}
2671
2672#[cfg(target_os = "fuchsia")]
2673impl From<fidl::Channel> for StarnixNetworksSynchronousProxy {
2674    fn from(value: fidl::Channel) -> Self {
2675        Self::new(value)
2676    }
2677}
2678
2679#[cfg(target_os = "fuchsia")]
2680impl fidl::endpoints::FromClient for StarnixNetworksSynchronousProxy {
2681    type Protocol = StarnixNetworksMarker;
2682
2683    fn from_client(value: fidl::endpoints::ClientEnd<StarnixNetworksMarker>) -> Self {
2684        Self::new(value.into_channel())
2685    }
2686}
2687
2688#[derive(Debug, Clone)]
2689pub struct StarnixNetworksProxy {
2690    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2691}
2692
2693impl fidl::endpoints::Proxy for StarnixNetworksProxy {
2694    type Protocol = StarnixNetworksMarker;
2695
2696    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2697        Self::new(inner)
2698    }
2699
2700    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2701        self.client.into_channel().map_err(|client| Self { client })
2702    }
2703
2704    fn as_channel(&self) -> &::fidl::AsyncChannel {
2705        self.client.as_channel()
2706    }
2707}
2708
2709impl StarnixNetworksProxy {
2710    /// Create a new Proxy for fuchsia.net.policy.socketproxy/StarnixNetworks.
2711    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2712        let protocol_name = <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2713        Self { client: fidl::client::Client::new(channel, protocol_name) }
2714    }
2715
2716    /// Get a Stream of events from the remote end of the protocol.
2717    ///
2718    /// # Panics
2719    ///
2720    /// Panics if the event stream was already taken.
2721    pub fn take_event_stream(&self) -> StarnixNetworksEventStream {
2722        StarnixNetworksEventStream { event_receiver: self.client.take_event_receiver() }
2723    }
2724
2725    /// Sets the default network.
2726    ///
2727    /// The network must have previously been registered by a call to `Add`.
2728    pub fn r#set_default(
2729        &self,
2730        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
2731    ) -> fidl::client::QueryResponseFut<
2732        NetworkRegistrySetDefaultResult,
2733        fidl::encoding::DefaultFuchsiaResourceDialect,
2734    > {
2735        StarnixNetworksProxyInterface::r#set_default(self, network_id)
2736    }
2737
2738    /// Add a new network.
2739    ///
2740    /// This call will not return until the DNS servers have been successfully
2741    /// updated in netcfg.
2742    pub fn r#add(
2743        &self,
2744        mut network: &Network,
2745    ) -> fidl::client::QueryResponseFut<
2746        NetworkRegistryAddResult,
2747        fidl::encoding::DefaultFuchsiaResourceDialect,
2748    > {
2749        StarnixNetworksProxyInterface::r#add(self, network)
2750    }
2751
2752    /// Update a previously Added network.
2753    ///
2754    /// This call will not return until the DNS servers have been
2755    /// successfully updated in netcfg.
2756    pub fn r#update(
2757        &self,
2758        mut network: &Network,
2759    ) -> fidl::client::QueryResponseFut<
2760        NetworkRegistryUpdateResult,
2761        fidl::encoding::DefaultFuchsiaResourceDialect,
2762    > {
2763        StarnixNetworksProxyInterface::r#update(self, network)
2764    }
2765
2766    /// Remove a previously Added network.
2767    ///
2768    /// This call will not return until the DNS servers have been
2769    /// successfully updated in netcfg.
2770    pub fn r#remove(
2771        &self,
2772        mut network_id: u32,
2773    ) -> fidl::client::QueryResponseFut<
2774        NetworkRegistryRemoveResult,
2775        fidl::encoding::DefaultFuchsiaResourceDialect,
2776    > {
2777        StarnixNetworksProxyInterface::r#remove(self, network_id)
2778    }
2779}
2780
2781impl StarnixNetworksProxyInterface for StarnixNetworksProxy {
2782    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
2783        NetworkRegistrySetDefaultResult,
2784        fidl::encoding::DefaultFuchsiaResourceDialect,
2785    >;
2786    fn r#set_default(
2787        &self,
2788        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
2789    ) -> Self::SetDefaultResponseFut {
2790        fn _decode(
2791            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2792        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
2793            let _response = fidl::client::decode_transaction_body::<
2794                fidl::encoding::ResultType<
2795                    fidl::encoding::EmptyStruct,
2796                    NetworkRegistrySetDefaultError,
2797                >,
2798                fidl::encoding::DefaultFuchsiaResourceDialect,
2799                0x787930c67b8cf82c,
2800            >(_buf?)?;
2801            Ok(_response.map(|x| x))
2802        }
2803        self.client.send_query_and_decode::<
2804            NetworkRegistrySetDefaultRequest,
2805            NetworkRegistrySetDefaultResult,
2806        >(
2807            (network_id,),
2808            0x787930c67b8cf82c,
2809            fidl::encoding::DynamicFlags::empty(),
2810            _decode,
2811        )
2812    }
2813
2814    type AddResponseFut = fidl::client::QueryResponseFut<
2815        NetworkRegistryAddResult,
2816        fidl::encoding::DefaultFuchsiaResourceDialect,
2817    >;
2818    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
2819        fn _decode(
2820            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2821        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
2822            let _response = fidl::client::decode_transaction_body::<
2823                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
2824                fidl::encoding::DefaultFuchsiaResourceDialect,
2825                0x197e70a1cbeab3ad,
2826            >(_buf?)?;
2827            Ok(_response.map(|x| x))
2828        }
2829        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
2830            (network,),
2831            0x197e70a1cbeab3ad,
2832            fidl::encoding::DynamicFlags::empty(),
2833            _decode,
2834        )
2835    }
2836
2837    type UpdateResponseFut = fidl::client::QueryResponseFut<
2838        NetworkRegistryUpdateResult,
2839        fidl::encoding::DefaultFuchsiaResourceDialect,
2840    >;
2841    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
2842        fn _decode(
2843            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2844        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
2845            let _response = fidl::client::decode_transaction_body::<
2846                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
2847                fidl::encoding::DefaultFuchsiaResourceDialect,
2848                0x3bc790ae5418ff0e,
2849            >(_buf?)?;
2850            Ok(_response.map(|x| x))
2851        }
2852        self.client
2853            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
2854                (network,),
2855                0x3bc790ae5418ff0e,
2856                fidl::encoding::DynamicFlags::empty(),
2857                _decode,
2858            )
2859    }
2860
2861    type RemoveResponseFut = fidl::client::QueryResponseFut<
2862        NetworkRegistryRemoveResult,
2863        fidl::encoding::DefaultFuchsiaResourceDialect,
2864    >;
2865    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
2866        fn _decode(
2867            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2868        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
2869            let _response = fidl::client::decode_transaction_body::<
2870                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
2871                fidl::encoding::DefaultFuchsiaResourceDialect,
2872                0x1302df41dca6379e,
2873            >(_buf?)?;
2874            Ok(_response.map(|x| x))
2875        }
2876        self.client
2877            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
2878                (network_id,),
2879                0x1302df41dca6379e,
2880                fidl::encoding::DynamicFlags::empty(),
2881                _decode,
2882            )
2883    }
2884}
2885
2886pub struct StarnixNetworksEventStream {
2887    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2888}
2889
2890impl std::marker::Unpin for StarnixNetworksEventStream {}
2891
2892impl futures::stream::FusedStream for StarnixNetworksEventStream {
2893    fn is_terminated(&self) -> bool {
2894        self.event_receiver.is_terminated()
2895    }
2896}
2897
2898impl futures::Stream for StarnixNetworksEventStream {
2899    type Item = Result<StarnixNetworksEvent, fidl::Error>;
2900
2901    fn poll_next(
2902        mut self: std::pin::Pin<&mut Self>,
2903        cx: &mut std::task::Context<'_>,
2904    ) -> std::task::Poll<Option<Self::Item>> {
2905        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2906            &mut self.event_receiver,
2907            cx
2908        )?) {
2909            Some(buf) => std::task::Poll::Ready(Some(StarnixNetworksEvent::decode(buf))),
2910            None => std::task::Poll::Ready(None),
2911        }
2912    }
2913}
2914
2915#[derive(Debug)]
2916pub enum StarnixNetworksEvent {}
2917
2918impl StarnixNetworksEvent {
2919    /// Decodes a message buffer as a [`StarnixNetworksEvent`].
2920    fn decode(
2921        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2922    ) -> Result<StarnixNetworksEvent, fidl::Error> {
2923        let (bytes, _handles) = buf.split_mut();
2924        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2925        debug_assert_eq!(tx_header.tx_id, 0);
2926        match tx_header.ordinal {
2927            _ => Err(fidl::Error::UnknownOrdinal {
2928                ordinal: tx_header.ordinal,
2929                protocol_name:
2930                    <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2931            }),
2932        }
2933    }
2934}
2935
2936/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/StarnixNetworks.
2937pub struct StarnixNetworksRequestStream {
2938    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2939    is_terminated: bool,
2940}
2941
2942impl std::marker::Unpin for StarnixNetworksRequestStream {}
2943
2944impl futures::stream::FusedStream for StarnixNetworksRequestStream {
2945    fn is_terminated(&self) -> bool {
2946        self.is_terminated
2947    }
2948}
2949
2950impl fidl::endpoints::RequestStream for StarnixNetworksRequestStream {
2951    type Protocol = StarnixNetworksMarker;
2952    type ControlHandle = StarnixNetworksControlHandle;
2953
2954    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2955        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2956    }
2957
2958    fn control_handle(&self) -> Self::ControlHandle {
2959        StarnixNetworksControlHandle { inner: self.inner.clone() }
2960    }
2961
2962    fn into_inner(
2963        self,
2964    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2965    {
2966        (self.inner, self.is_terminated)
2967    }
2968
2969    fn from_inner(
2970        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2971        is_terminated: bool,
2972    ) -> Self {
2973        Self { inner, is_terminated }
2974    }
2975}
2976
2977impl futures::Stream for StarnixNetworksRequestStream {
2978    type Item = Result<StarnixNetworksRequest, fidl::Error>;
2979
2980    fn poll_next(
2981        mut self: std::pin::Pin<&mut Self>,
2982        cx: &mut std::task::Context<'_>,
2983    ) -> std::task::Poll<Option<Self::Item>> {
2984        let this = &mut *self;
2985        if this.inner.check_shutdown(cx) {
2986            this.is_terminated = true;
2987            return std::task::Poll::Ready(None);
2988        }
2989        if this.is_terminated {
2990            panic!("polled StarnixNetworksRequestStream after completion");
2991        }
2992        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2993            |bytes, handles| {
2994                match this.inner.channel().read_etc(cx, bytes, handles) {
2995                    std::task::Poll::Ready(Ok(())) => {}
2996                    std::task::Poll::Pending => return std::task::Poll::Pending,
2997                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2998                        this.is_terminated = true;
2999                        return std::task::Poll::Ready(None);
3000                    }
3001                    std::task::Poll::Ready(Err(e)) => {
3002                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3003                            e.into(),
3004                        ))));
3005                    }
3006                }
3007
3008                // A message has been received from the channel
3009                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3010
3011                std::task::Poll::Ready(Some(match header.ordinal {
3012                    0x787930c67b8cf82c => {
3013                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3014                        let mut req = fidl::new_empty!(
3015                            NetworkRegistrySetDefaultRequest,
3016                            fidl::encoding::DefaultFuchsiaResourceDialect
3017                        );
3018                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
3019                        let control_handle =
3020                            StarnixNetworksControlHandle { inner: this.inner.clone() };
3021                        Ok(StarnixNetworksRequest::SetDefault {
3022                            network_id: req.network_id,
3023
3024                            responder: StarnixNetworksSetDefaultResponder {
3025                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3026                                tx_id: header.tx_id,
3027                            },
3028                        })
3029                    }
3030                    0x197e70a1cbeab3ad => {
3031                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3032                        let mut req = fidl::new_empty!(
3033                            NetworkRegistryAddRequest,
3034                            fidl::encoding::DefaultFuchsiaResourceDialect
3035                        );
3036                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
3037                        let control_handle =
3038                            StarnixNetworksControlHandle { inner: this.inner.clone() };
3039                        Ok(StarnixNetworksRequest::Add {
3040                            network: req.network,
3041
3042                            responder: StarnixNetworksAddResponder {
3043                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3044                                tx_id: header.tx_id,
3045                            },
3046                        })
3047                    }
3048                    0x3bc790ae5418ff0e => {
3049                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3050                        let mut req = fidl::new_empty!(
3051                            NetworkRegistryUpdateRequest,
3052                            fidl::encoding::DefaultFuchsiaResourceDialect
3053                        );
3054                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
3055                        let control_handle =
3056                            StarnixNetworksControlHandle { inner: this.inner.clone() };
3057                        Ok(StarnixNetworksRequest::Update {
3058                            network: req.network,
3059
3060                            responder: StarnixNetworksUpdateResponder {
3061                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3062                                tx_id: header.tx_id,
3063                            },
3064                        })
3065                    }
3066                    0x1302df41dca6379e => {
3067                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3068                        let mut req = fidl::new_empty!(
3069                            NetworkRegistryRemoveRequest,
3070                            fidl::encoding::DefaultFuchsiaResourceDialect
3071                        );
3072                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
3073                        let control_handle =
3074                            StarnixNetworksControlHandle { inner: this.inner.clone() };
3075                        Ok(StarnixNetworksRequest::Remove {
3076                            network_id: req.network_id,
3077
3078                            responder: StarnixNetworksRemoveResponder {
3079                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3080                                tx_id: header.tx_id,
3081                            },
3082                        })
3083                    }
3084                    _ => Err(fidl::Error::UnknownOrdinal {
3085                        ordinal: header.ordinal,
3086                        protocol_name:
3087                            <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3088                    }),
3089                }))
3090            },
3091        )
3092    }
3093}
3094
3095/// StarnixNetworks is used for the starnix nmfs service to communicate changes
3096/// to the network. Only one connection to this service is considered valid at
3097/// any one time. If the connection is lost for any reason, all previously
3098/// registered networks are considered invalid and will be removed.
3099#[derive(Debug)]
3100pub enum StarnixNetworksRequest {
3101    /// Sets the default network.
3102    ///
3103    /// The network must have previously been registered by a call to `Add`.
3104    SetDefault {
3105        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
3106        responder: StarnixNetworksSetDefaultResponder,
3107    },
3108    /// Add a new network.
3109    ///
3110    /// This call will not return until the DNS servers have been successfully
3111    /// updated in netcfg.
3112    Add { network: Network, responder: StarnixNetworksAddResponder },
3113    /// Update a previously Added network.
3114    ///
3115    /// This call will not return until the DNS servers have been
3116    /// successfully updated in netcfg.
3117    Update { network: Network, responder: StarnixNetworksUpdateResponder },
3118    /// Remove a previously Added network.
3119    ///
3120    /// This call will not return until the DNS servers have been
3121    /// successfully updated in netcfg.
3122    Remove { network_id: u32, responder: StarnixNetworksRemoveResponder },
3123}
3124
3125impl StarnixNetworksRequest {
3126    #[allow(irrefutable_let_patterns)]
3127    pub fn into_set_default(
3128        self,
3129    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, StarnixNetworksSetDefaultResponder)>
3130    {
3131        if let StarnixNetworksRequest::SetDefault { network_id, responder } = self {
3132            Some((network_id, responder))
3133        } else {
3134            None
3135        }
3136    }
3137
3138    #[allow(irrefutable_let_patterns)]
3139    pub fn into_add(self) -> Option<(Network, StarnixNetworksAddResponder)> {
3140        if let StarnixNetworksRequest::Add { network, responder } = self {
3141            Some((network, responder))
3142        } else {
3143            None
3144        }
3145    }
3146
3147    #[allow(irrefutable_let_patterns)]
3148    pub fn into_update(self) -> Option<(Network, StarnixNetworksUpdateResponder)> {
3149        if let StarnixNetworksRequest::Update { network, responder } = self {
3150            Some((network, responder))
3151        } else {
3152            None
3153        }
3154    }
3155
3156    #[allow(irrefutable_let_patterns)]
3157    pub fn into_remove(self) -> Option<(u32, StarnixNetworksRemoveResponder)> {
3158        if let StarnixNetworksRequest::Remove { network_id, responder } = self {
3159            Some((network_id, responder))
3160        } else {
3161            None
3162        }
3163    }
3164
3165    /// Name of the method defined in FIDL
3166    pub fn method_name(&self) -> &'static str {
3167        match *self {
3168            StarnixNetworksRequest::SetDefault { .. } => "set_default",
3169            StarnixNetworksRequest::Add { .. } => "add",
3170            StarnixNetworksRequest::Update { .. } => "update",
3171            StarnixNetworksRequest::Remove { .. } => "remove",
3172        }
3173    }
3174}
3175
3176#[derive(Debug, Clone)]
3177pub struct StarnixNetworksControlHandle {
3178    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3179}
3180
3181impl fidl::endpoints::ControlHandle for StarnixNetworksControlHandle {
3182    fn shutdown(&self) {
3183        self.inner.shutdown()
3184    }
3185
3186    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
3187        self.inner.shutdown_with_epitaph(status)
3188    }
3189
3190    fn is_closed(&self) -> bool {
3191        self.inner.channel().is_closed()
3192    }
3193    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3194        self.inner.channel().on_closed()
3195    }
3196
3197    #[cfg(target_os = "fuchsia")]
3198    fn signal_peer(
3199        &self,
3200        clear_mask: zx::Signals,
3201        set_mask: zx::Signals,
3202    ) -> Result<(), zx_status::Status> {
3203        use fidl::Peered;
3204        self.inner.channel().signal_peer(clear_mask, set_mask)
3205    }
3206}
3207
3208impl StarnixNetworksControlHandle {}
3209
3210#[must_use = "FIDL methods require a response to be sent"]
3211#[derive(Debug)]
3212pub struct StarnixNetworksSetDefaultResponder {
3213    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
3214    tx_id: u32,
3215}
3216
3217/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
3218/// if the responder is dropped without sending a response, so that the client
3219/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3220impl std::ops::Drop for StarnixNetworksSetDefaultResponder {
3221    fn drop(&mut self) {
3222        self.control_handle.shutdown();
3223        // Safety: drops once, never accessed again
3224        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3225    }
3226}
3227
3228impl fidl::endpoints::Responder for StarnixNetworksSetDefaultResponder {
3229    type ControlHandle = StarnixNetworksControlHandle;
3230
3231    fn control_handle(&self) -> &StarnixNetworksControlHandle {
3232        &self.control_handle
3233    }
3234
3235    fn drop_without_shutdown(mut self) {
3236        // Safety: drops once, never accessed again due to mem::forget
3237        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3238        // Prevent Drop from running (which would shut down the channel)
3239        std::mem::forget(self);
3240    }
3241}
3242
3243impl StarnixNetworksSetDefaultResponder {
3244    /// Sends a response to the FIDL transaction.
3245    ///
3246    /// Sets the channel to shutdown if an error occurs.
3247    pub fn send(
3248        self,
3249        mut result: Result<(), NetworkRegistrySetDefaultError>,
3250    ) -> Result<(), fidl::Error> {
3251        let _result = self.send_raw(result);
3252        if _result.is_err() {
3253            self.control_handle.shutdown();
3254        }
3255        self.drop_without_shutdown();
3256        _result
3257    }
3258
3259    /// Similar to "send" but does not shutdown the channel if an error occurs.
3260    pub fn send_no_shutdown_on_err(
3261        self,
3262        mut result: Result<(), NetworkRegistrySetDefaultError>,
3263    ) -> Result<(), fidl::Error> {
3264        let _result = self.send_raw(result);
3265        self.drop_without_shutdown();
3266        _result
3267    }
3268
3269    fn send_raw(
3270        &self,
3271        mut result: Result<(), NetworkRegistrySetDefaultError>,
3272    ) -> Result<(), fidl::Error> {
3273        self.control_handle.inner.send::<fidl::encoding::ResultType<
3274            fidl::encoding::EmptyStruct,
3275            NetworkRegistrySetDefaultError,
3276        >>(
3277            result,
3278            self.tx_id,
3279            0x787930c67b8cf82c,
3280            fidl::encoding::DynamicFlags::empty(),
3281        )
3282    }
3283}
3284
3285#[must_use = "FIDL methods require a response to be sent"]
3286#[derive(Debug)]
3287pub struct StarnixNetworksAddResponder {
3288    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
3289    tx_id: u32,
3290}
3291
3292/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
3293/// if the responder is dropped without sending a response, so that the client
3294/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3295impl std::ops::Drop for StarnixNetworksAddResponder {
3296    fn drop(&mut self) {
3297        self.control_handle.shutdown();
3298        // Safety: drops once, never accessed again
3299        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3300    }
3301}
3302
3303impl fidl::endpoints::Responder for StarnixNetworksAddResponder {
3304    type ControlHandle = StarnixNetworksControlHandle;
3305
3306    fn control_handle(&self) -> &StarnixNetworksControlHandle {
3307        &self.control_handle
3308    }
3309
3310    fn drop_without_shutdown(mut self) {
3311        // Safety: drops once, never accessed again due to mem::forget
3312        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3313        // Prevent Drop from running (which would shut down the channel)
3314        std::mem::forget(self);
3315    }
3316}
3317
3318impl StarnixNetworksAddResponder {
3319    /// Sends a response to the FIDL transaction.
3320    ///
3321    /// Sets the channel to shutdown if an error occurs.
3322    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
3323        let _result = self.send_raw(result);
3324        if _result.is_err() {
3325            self.control_handle.shutdown();
3326        }
3327        self.drop_without_shutdown();
3328        _result
3329    }
3330
3331    /// Similar to "send" but does not shutdown the channel if an error occurs.
3332    pub fn send_no_shutdown_on_err(
3333        self,
3334        mut result: Result<(), NetworkRegistryAddError>,
3335    ) -> Result<(), fidl::Error> {
3336        let _result = self.send_raw(result);
3337        self.drop_without_shutdown();
3338        _result
3339    }
3340
3341    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
3342        self.control_handle.inner.send::<fidl::encoding::ResultType<
3343            fidl::encoding::EmptyStruct,
3344            NetworkRegistryAddError,
3345        >>(
3346            result,
3347            self.tx_id,
3348            0x197e70a1cbeab3ad,
3349            fidl::encoding::DynamicFlags::empty(),
3350        )
3351    }
3352}
3353
3354#[must_use = "FIDL methods require a response to be sent"]
3355#[derive(Debug)]
3356pub struct StarnixNetworksUpdateResponder {
3357    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
3358    tx_id: u32,
3359}
3360
3361/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
3362/// if the responder is dropped without sending a response, so that the client
3363/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3364impl std::ops::Drop for StarnixNetworksUpdateResponder {
3365    fn drop(&mut self) {
3366        self.control_handle.shutdown();
3367        // Safety: drops once, never accessed again
3368        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3369    }
3370}
3371
3372impl fidl::endpoints::Responder for StarnixNetworksUpdateResponder {
3373    type ControlHandle = StarnixNetworksControlHandle;
3374
3375    fn control_handle(&self) -> &StarnixNetworksControlHandle {
3376        &self.control_handle
3377    }
3378
3379    fn drop_without_shutdown(mut self) {
3380        // Safety: drops once, never accessed again due to mem::forget
3381        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3382        // Prevent Drop from running (which would shut down the channel)
3383        std::mem::forget(self);
3384    }
3385}
3386
3387impl StarnixNetworksUpdateResponder {
3388    /// Sends a response to the FIDL transaction.
3389    ///
3390    /// Sets the channel to shutdown if an error occurs.
3391    pub fn send(
3392        self,
3393        mut result: Result<(), NetworkRegistryUpdateError>,
3394    ) -> Result<(), fidl::Error> {
3395        let _result = self.send_raw(result);
3396        if _result.is_err() {
3397            self.control_handle.shutdown();
3398        }
3399        self.drop_without_shutdown();
3400        _result
3401    }
3402
3403    /// Similar to "send" but does not shutdown the channel if an error occurs.
3404    pub fn send_no_shutdown_on_err(
3405        self,
3406        mut result: Result<(), NetworkRegistryUpdateError>,
3407    ) -> Result<(), fidl::Error> {
3408        let _result = self.send_raw(result);
3409        self.drop_without_shutdown();
3410        _result
3411    }
3412
3413    fn send_raw(
3414        &self,
3415        mut result: Result<(), NetworkRegistryUpdateError>,
3416    ) -> Result<(), fidl::Error> {
3417        self.control_handle.inner.send::<fidl::encoding::ResultType<
3418            fidl::encoding::EmptyStruct,
3419            NetworkRegistryUpdateError,
3420        >>(
3421            result,
3422            self.tx_id,
3423            0x3bc790ae5418ff0e,
3424            fidl::encoding::DynamicFlags::empty(),
3425        )
3426    }
3427}
3428
3429#[must_use = "FIDL methods require a response to be sent"]
3430#[derive(Debug)]
3431pub struct StarnixNetworksRemoveResponder {
3432    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
3433    tx_id: u32,
3434}
3435
3436/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
3437/// if the responder is dropped without sending a response, so that the client
3438/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3439impl std::ops::Drop for StarnixNetworksRemoveResponder {
3440    fn drop(&mut self) {
3441        self.control_handle.shutdown();
3442        // Safety: drops once, never accessed again
3443        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3444    }
3445}
3446
3447impl fidl::endpoints::Responder for StarnixNetworksRemoveResponder {
3448    type ControlHandle = StarnixNetworksControlHandle;
3449
3450    fn control_handle(&self) -> &StarnixNetworksControlHandle {
3451        &self.control_handle
3452    }
3453
3454    fn drop_without_shutdown(mut self) {
3455        // Safety: drops once, never accessed again due to mem::forget
3456        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3457        // Prevent Drop from running (which would shut down the channel)
3458        std::mem::forget(self);
3459    }
3460}
3461
3462impl StarnixNetworksRemoveResponder {
3463    /// Sends a response to the FIDL transaction.
3464    ///
3465    /// Sets the channel to shutdown if an error occurs.
3466    pub fn send(
3467        self,
3468        mut result: Result<(), NetworkRegistryRemoveError>,
3469    ) -> Result<(), fidl::Error> {
3470        let _result = self.send_raw(result);
3471        if _result.is_err() {
3472            self.control_handle.shutdown();
3473        }
3474        self.drop_without_shutdown();
3475        _result
3476    }
3477
3478    /// Similar to "send" but does not shutdown the channel if an error occurs.
3479    pub fn send_no_shutdown_on_err(
3480        self,
3481        mut result: Result<(), NetworkRegistryRemoveError>,
3482    ) -> Result<(), fidl::Error> {
3483        let _result = self.send_raw(result);
3484        self.drop_without_shutdown();
3485        _result
3486    }
3487
3488    fn send_raw(
3489        &self,
3490        mut result: Result<(), NetworkRegistryRemoveError>,
3491    ) -> Result<(), fidl::Error> {
3492        self.control_handle.inner.send::<fidl::encoding::ResultType<
3493            fidl::encoding::EmptyStruct,
3494            NetworkRegistryRemoveError,
3495        >>(
3496            result,
3497            self.tx_id,
3498            0x1302df41dca6379e,
3499            fidl::encoding::DynamicFlags::empty(),
3500        )
3501    }
3502}
3503
3504mod internal {
3505    use super::*;
3506}