Skip to main content

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        Self { client: fidl::client::sync::Client::new(channel) }
60    }
61
62    pub fn into_channel(self) -> fidl::Channel {
63        self.client.into_channel()
64    }
65
66    /// Waits until an event arrives and returns it. It is safe for other
67    /// threads to make concurrent requests while waiting for an event.
68    pub fn wait_for_event(
69        &self,
70        deadline: zx::MonotonicInstant,
71    ) -> Result<DnsServerWatcherEvent, fidl::Error> {
72        DnsServerWatcherEvent::decode(
73            self.client.wait_for_event::<DnsServerWatcherMarker>(deadline)?,
74        )
75    }
76
77    /// Returns a list of DNS servers registered with the socketproxy.
78    ///
79    /// First call always returns a snapshot of the current list of servers or blocks if an empty
80    /// list would be returned. Subsequent calls will block until the list of servers changes.
81    ///
82    /// The list of servers changes over time by configuration or network topology changes,
83    /// expiration, etc. Callers must repeatedly call `WatchServers` and replace any previously
84    /// returned `servers` with new ones to avoid using stale or expired entries.
85    ///
86    /// It is invalid to call this method while a previous call is pending. Doing so will cause the
87    /// server end of the protocol to be closed.
88    ///
89    /// - response `servers` The list of servers to use for DNS resolution, in priority order.
90    pub fn r#watch_servers(
91        &self,
92        ___deadline: zx::MonotonicInstant,
93    ) -> Result<Vec<DnsServerList>, fidl::Error> {
94        let _response = self.client.send_query::<
95            fidl::encoding::EmptyPayload,
96            DnsServerWatcherWatchServersResponse,
97            DnsServerWatcherMarker,
98        >(
99            (),
100            0x767ad6d8df671383,
101            fidl::encoding::DynamicFlags::empty(),
102            ___deadline,
103        )?;
104        Ok(_response.servers)
105    }
106}
107
108#[cfg(target_os = "fuchsia")]
109impl From<DnsServerWatcherSynchronousProxy> for zx::NullableHandle {
110    fn from(value: DnsServerWatcherSynchronousProxy) -> Self {
111        value.into_channel().into()
112    }
113}
114
115#[cfg(target_os = "fuchsia")]
116impl From<fidl::Channel> for DnsServerWatcherSynchronousProxy {
117    fn from(value: fidl::Channel) -> Self {
118        Self::new(value)
119    }
120}
121
122#[cfg(target_os = "fuchsia")]
123impl fidl::endpoints::FromClient for DnsServerWatcherSynchronousProxy {
124    type Protocol = DnsServerWatcherMarker;
125
126    fn from_client(value: fidl::endpoints::ClientEnd<DnsServerWatcherMarker>) -> Self {
127        Self::new(value.into_channel())
128    }
129}
130
131#[derive(Debug, Clone)]
132pub struct DnsServerWatcherProxy {
133    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
134}
135
136impl fidl::endpoints::Proxy for DnsServerWatcherProxy {
137    type Protocol = DnsServerWatcherMarker;
138
139    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
140        Self::new(inner)
141    }
142
143    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
144        self.client.into_channel().map_err(|client| Self { client })
145    }
146
147    fn as_channel(&self) -> &::fidl::AsyncChannel {
148        self.client.as_channel()
149    }
150}
151
152impl DnsServerWatcherProxy {
153    /// Create a new Proxy for fuchsia.net.policy.socketproxy/DnsServerWatcher.
154    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
155        let protocol_name = <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
156        Self { client: fidl::client::Client::new(channel, protocol_name) }
157    }
158
159    /// Get a Stream of events from the remote end of the protocol.
160    ///
161    /// # Panics
162    ///
163    /// Panics if the event stream was already taken.
164    pub fn take_event_stream(&self) -> DnsServerWatcherEventStream {
165        DnsServerWatcherEventStream { event_receiver: self.client.take_event_receiver() }
166    }
167
168    /// Returns a list of DNS servers registered with the socketproxy.
169    ///
170    /// First call always returns a snapshot of the current list of servers or blocks if an empty
171    /// list would be returned. Subsequent calls will block until the list of servers changes.
172    ///
173    /// The list of servers changes over time by configuration or network topology changes,
174    /// expiration, etc. Callers must repeatedly call `WatchServers` and replace any previously
175    /// returned `servers` with new ones to avoid using stale or expired entries.
176    ///
177    /// It is invalid to call this method while a previous call is pending. Doing so will cause the
178    /// server end of the protocol to be closed.
179    ///
180    /// - response `servers` The list of servers to use for DNS resolution, in priority order.
181    pub fn r#watch_servers(
182        &self,
183    ) -> fidl::client::QueryResponseFut<
184        Vec<DnsServerList>,
185        fidl::encoding::DefaultFuchsiaResourceDialect,
186    > {
187        DnsServerWatcherProxyInterface::r#watch_servers(self)
188    }
189}
190
191impl DnsServerWatcherProxyInterface for DnsServerWatcherProxy {
192    type WatchServersResponseFut = fidl::client::QueryResponseFut<
193        Vec<DnsServerList>,
194        fidl::encoding::DefaultFuchsiaResourceDialect,
195    >;
196    fn r#watch_servers(&self) -> Self::WatchServersResponseFut {
197        fn _decode(
198            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
199        ) -> Result<Vec<DnsServerList>, fidl::Error> {
200            let _response = fidl::client::decode_transaction_body::<
201                DnsServerWatcherWatchServersResponse,
202                fidl::encoding::DefaultFuchsiaResourceDialect,
203                0x767ad6d8df671383,
204            >(_buf?)?;
205            Ok(_response.servers)
206        }
207        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, Vec<DnsServerList>>(
208            (),
209            0x767ad6d8df671383,
210            fidl::encoding::DynamicFlags::empty(),
211            _decode,
212        )
213    }
214}
215
216pub struct DnsServerWatcherEventStream {
217    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
218}
219
220impl std::marker::Unpin for DnsServerWatcherEventStream {}
221
222impl futures::stream::FusedStream for DnsServerWatcherEventStream {
223    fn is_terminated(&self) -> bool {
224        self.event_receiver.is_terminated()
225    }
226}
227
228impl futures::Stream for DnsServerWatcherEventStream {
229    type Item = Result<DnsServerWatcherEvent, fidl::Error>;
230
231    fn poll_next(
232        mut self: std::pin::Pin<&mut Self>,
233        cx: &mut std::task::Context<'_>,
234    ) -> std::task::Poll<Option<Self::Item>> {
235        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
236            &mut self.event_receiver,
237            cx
238        )?) {
239            Some(buf) => std::task::Poll::Ready(Some(DnsServerWatcherEvent::decode(buf))),
240            None => std::task::Poll::Ready(None),
241        }
242    }
243}
244
245#[derive(Debug)]
246pub enum DnsServerWatcherEvent {}
247
248impl DnsServerWatcherEvent {
249    /// Decodes a message buffer as a [`DnsServerWatcherEvent`].
250    fn decode(
251        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
252    ) -> Result<DnsServerWatcherEvent, fidl::Error> {
253        let (bytes, _handles) = buf.split_mut();
254        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
255        debug_assert_eq!(tx_header.tx_id, 0);
256        match tx_header.ordinal {
257            _ => Err(fidl::Error::UnknownOrdinal {
258                ordinal: tx_header.ordinal,
259                protocol_name:
260                    <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
261            }),
262        }
263    }
264}
265
266/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/DnsServerWatcher.
267pub struct DnsServerWatcherRequestStream {
268    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
269    is_terminated: bool,
270}
271
272impl std::marker::Unpin for DnsServerWatcherRequestStream {}
273
274impl futures::stream::FusedStream for DnsServerWatcherRequestStream {
275    fn is_terminated(&self) -> bool {
276        self.is_terminated
277    }
278}
279
280impl fidl::endpoints::RequestStream for DnsServerWatcherRequestStream {
281    type Protocol = DnsServerWatcherMarker;
282    type ControlHandle = DnsServerWatcherControlHandle;
283
284    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
285        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
286    }
287
288    fn control_handle(&self) -> Self::ControlHandle {
289        DnsServerWatcherControlHandle { inner: self.inner.clone() }
290    }
291
292    fn into_inner(
293        self,
294    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
295    {
296        (self.inner, self.is_terminated)
297    }
298
299    fn from_inner(
300        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
301        is_terminated: bool,
302    ) -> Self {
303        Self { inner, is_terminated }
304    }
305}
306
307impl futures::Stream for DnsServerWatcherRequestStream {
308    type Item = Result<DnsServerWatcherRequest, fidl::Error>;
309
310    fn poll_next(
311        mut self: std::pin::Pin<&mut Self>,
312        cx: &mut std::task::Context<'_>,
313    ) -> std::task::Poll<Option<Self::Item>> {
314        let this = &mut *self;
315        if this.inner.check_shutdown(cx) {
316            this.is_terminated = true;
317            return std::task::Poll::Ready(None);
318        }
319        if this.is_terminated {
320            panic!("polled DnsServerWatcherRequestStream after completion");
321        }
322        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
323            |bytes, handles| {
324                match this.inner.channel().read_etc(cx, bytes, handles) {
325                    std::task::Poll::Ready(Ok(())) => {}
326                    std::task::Poll::Pending => return std::task::Poll::Pending,
327                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
328                        this.is_terminated = true;
329                        return std::task::Poll::Ready(None);
330                    }
331                    std::task::Poll::Ready(Err(e)) => {
332                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
333                            e.into(),
334                        ))));
335                    }
336                }
337
338                // A message has been received from the channel
339                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
340
341                std::task::Poll::Ready(Some(match header.ordinal {
342                    0x767ad6d8df671383 => {
343                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
344                        let mut req = fidl::new_empty!(
345                            fidl::encoding::EmptyPayload,
346                            fidl::encoding::DefaultFuchsiaResourceDialect
347                        );
348                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
349                        let control_handle =
350                            DnsServerWatcherControlHandle { inner: this.inner.clone() };
351                        Ok(DnsServerWatcherRequest::WatchServers {
352                            responder: DnsServerWatcherWatchServersResponder {
353                                control_handle: std::mem::ManuallyDrop::new(control_handle),
354                                tx_id: header.tx_id,
355                            },
356                        })
357                    }
358                    _ => Err(fidl::Error::UnknownOrdinal {
359                        ordinal: header.ordinal,
360                        protocol_name:
361                            <DnsServerWatcherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
362                    }),
363                }))
364            },
365        )
366    }
367}
368
369/// Provides a hanging get interface to watch for DNS servers configuration.
370/// Only one connection to this service is considered valid at any one time.
371#[derive(Debug)]
372pub enum DnsServerWatcherRequest {
373    /// Returns a list of DNS servers registered with the socketproxy.
374    ///
375    /// First call always returns a snapshot of the current list of servers or blocks if an empty
376    /// list would be returned. Subsequent calls will block until the list of servers changes.
377    ///
378    /// The list of servers changes over time by configuration or network topology changes,
379    /// expiration, etc. Callers must repeatedly call `WatchServers` and replace any previously
380    /// returned `servers` with new ones to avoid using stale or expired entries.
381    ///
382    /// It is invalid to call this method while a previous call is pending. Doing so will cause the
383    /// server end of the protocol to be closed.
384    ///
385    /// - response `servers` The list of servers to use for DNS resolution, in priority order.
386    WatchServers { responder: DnsServerWatcherWatchServersResponder },
387}
388
389impl DnsServerWatcherRequest {
390    #[allow(irrefutable_let_patterns)]
391    pub fn into_watch_servers(self) -> Option<(DnsServerWatcherWatchServersResponder)> {
392        if let DnsServerWatcherRequest::WatchServers { responder } = self {
393            Some((responder))
394        } else {
395            None
396        }
397    }
398
399    /// Name of the method defined in FIDL
400    pub fn method_name(&self) -> &'static str {
401        match *self {
402            DnsServerWatcherRequest::WatchServers { .. } => "watch_servers",
403        }
404    }
405}
406
407#[derive(Debug, Clone)]
408pub struct DnsServerWatcherControlHandle {
409    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
410}
411
412impl fidl::endpoints::ControlHandle for DnsServerWatcherControlHandle {
413    fn shutdown(&self) {
414        self.inner.shutdown()
415    }
416
417    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
418        self.inner.shutdown_with_epitaph(status)
419    }
420
421    fn is_closed(&self) -> bool {
422        self.inner.channel().is_closed()
423    }
424    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
425        self.inner.channel().on_closed()
426    }
427
428    #[cfg(target_os = "fuchsia")]
429    fn signal_peer(
430        &self,
431        clear_mask: zx::Signals,
432        set_mask: zx::Signals,
433    ) -> Result<(), zx_status::Status> {
434        use fidl::Peered;
435        self.inner.channel().signal_peer(clear_mask, set_mask)
436    }
437}
438
439impl DnsServerWatcherControlHandle {}
440
441#[must_use = "FIDL methods require a response to be sent"]
442#[derive(Debug)]
443pub struct DnsServerWatcherWatchServersResponder {
444    control_handle: std::mem::ManuallyDrop<DnsServerWatcherControlHandle>,
445    tx_id: u32,
446}
447
448/// Set the the channel to be shutdown (see [`DnsServerWatcherControlHandle::shutdown`])
449/// if the responder is dropped without sending a response, so that the client
450/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
451impl std::ops::Drop for DnsServerWatcherWatchServersResponder {
452    fn drop(&mut self) {
453        self.control_handle.shutdown();
454        // Safety: drops once, never accessed again
455        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
456    }
457}
458
459impl fidl::endpoints::Responder for DnsServerWatcherWatchServersResponder {
460    type ControlHandle = DnsServerWatcherControlHandle;
461
462    fn control_handle(&self) -> &DnsServerWatcherControlHandle {
463        &self.control_handle
464    }
465
466    fn drop_without_shutdown(mut self) {
467        // Safety: drops once, never accessed again due to mem::forget
468        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
469        // Prevent Drop from running (which would shut down the channel)
470        std::mem::forget(self);
471    }
472}
473
474impl DnsServerWatcherWatchServersResponder {
475    /// Sends a response to the FIDL transaction.
476    ///
477    /// Sets the channel to shutdown if an error occurs.
478    pub fn send(self, mut servers: &[DnsServerList]) -> Result<(), fidl::Error> {
479        let _result = self.send_raw(servers);
480        if _result.is_err() {
481            self.control_handle.shutdown();
482        }
483        self.drop_without_shutdown();
484        _result
485    }
486
487    /// Similar to "send" but does not shutdown the channel if an error occurs.
488    pub fn send_no_shutdown_on_err(self, mut servers: &[DnsServerList]) -> Result<(), fidl::Error> {
489        let _result = self.send_raw(servers);
490        self.drop_without_shutdown();
491        _result
492    }
493
494    fn send_raw(&self, mut servers: &[DnsServerList]) -> Result<(), fidl::Error> {
495        self.control_handle.inner.send::<DnsServerWatcherWatchServersResponse>(
496            (servers,),
497            self.tx_id,
498            0x767ad6d8df671383,
499            fidl::encoding::DynamicFlags::empty(),
500        )
501    }
502}
503
504#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
505pub struct FuchsiaNetworksMarker;
506
507impl fidl::endpoints::ProtocolMarker for FuchsiaNetworksMarker {
508    type Proxy = FuchsiaNetworksProxy;
509    type RequestStream = FuchsiaNetworksRequestStream;
510    #[cfg(target_os = "fuchsia")]
511    type SynchronousProxy = FuchsiaNetworksSynchronousProxy;
512
513    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.FuchsiaNetworks";
514}
515impl fidl::endpoints::DiscoverableProtocolMarker for FuchsiaNetworksMarker {}
516
517pub trait FuchsiaNetworksProxyInterface: Send + Sync {
518    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
519        + Send;
520    fn r#set_default(
521        &self,
522        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
523    ) -> Self::SetDefaultResponseFut;
524    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
525        + Send;
526    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
527    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
528        + Send;
529    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
530    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
531        + Send;
532    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
533}
534#[derive(Debug)]
535#[cfg(target_os = "fuchsia")]
536pub struct FuchsiaNetworksSynchronousProxy {
537    client: fidl::client::sync::Client,
538}
539
540#[cfg(target_os = "fuchsia")]
541impl fidl::endpoints::SynchronousProxy for FuchsiaNetworksSynchronousProxy {
542    type Proxy = FuchsiaNetworksProxy;
543    type Protocol = FuchsiaNetworksMarker;
544
545    fn from_channel(inner: fidl::Channel) -> Self {
546        Self::new(inner)
547    }
548
549    fn into_channel(self) -> fidl::Channel {
550        self.client.into_channel()
551    }
552
553    fn as_channel(&self) -> &fidl::Channel {
554        self.client.as_channel()
555    }
556}
557
558#[cfg(target_os = "fuchsia")]
559impl FuchsiaNetworksSynchronousProxy {
560    pub fn new(channel: fidl::Channel) -> Self {
561        Self { client: fidl::client::sync::Client::new(channel) }
562    }
563
564    pub fn into_channel(self) -> fidl::Channel {
565        self.client.into_channel()
566    }
567
568    /// Waits until an event arrives and returns it. It is safe for other
569    /// threads to make concurrent requests while waiting for an event.
570    pub fn wait_for_event(
571        &self,
572        deadline: zx::MonotonicInstant,
573    ) -> Result<FuchsiaNetworksEvent, fidl::Error> {
574        FuchsiaNetworksEvent::decode(self.client.wait_for_event::<FuchsiaNetworksMarker>(deadline)?)
575    }
576
577    /// Sets the default network.
578    ///
579    /// The network must have previously been registered by a call to `Add`.
580    pub fn r#set_default(
581        &self,
582        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
583        ___deadline: zx::MonotonicInstant,
584    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
585        let _response =
586            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
587                fidl::encoding::EmptyStruct,
588                NetworkRegistrySetDefaultError,
589            >, FuchsiaNetworksMarker>(
590                (network_id,),
591                0x787930c67b8cf82c,
592                fidl::encoding::DynamicFlags::empty(),
593                ___deadline,
594            )?;
595        Ok(_response.map(|x| x))
596    }
597
598    /// Add a new network.
599    ///
600    /// This call will not return until the DNS servers have been successfully
601    /// updated in netcfg.
602    pub fn r#add(
603        &self,
604        mut network: &Network,
605        ___deadline: zx::MonotonicInstant,
606    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
607        let _response =
608            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
609                fidl::encoding::EmptyStruct,
610                NetworkRegistryAddError,
611            >, FuchsiaNetworksMarker>(
612                (network,),
613                0x197e70a1cbeab3ad,
614                fidl::encoding::DynamicFlags::empty(),
615                ___deadline,
616            )?;
617        Ok(_response.map(|x| x))
618    }
619
620    /// Update a previously Added network.
621    ///
622    /// This call will not return until the DNS servers have been
623    /// successfully updated in netcfg.
624    pub fn r#update(
625        &self,
626        mut network: &Network,
627        ___deadline: zx::MonotonicInstant,
628    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
629        let _response =
630            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
631                fidl::encoding::EmptyStruct,
632                NetworkRegistryUpdateError,
633            >, FuchsiaNetworksMarker>(
634                (network,),
635                0x3bc790ae5418ff0e,
636                fidl::encoding::DynamicFlags::empty(),
637                ___deadline,
638            )?;
639        Ok(_response.map(|x| x))
640    }
641
642    /// Remove a previously Added network.
643    ///
644    /// This call will not return until the DNS servers have been
645    /// successfully updated in netcfg.
646    pub fn r#remove(
647        &self,
648        mut network_id: u32,
649        ___deadline: zx::MonotonicInstant,
650    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
651        let _response =
652            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
653                fidl::encoding::EmptyStruct,
654                NetworkRegistryRemoveError,
655            >, FuchsiaNetworksMarker>(
656                (network_id,),
657                0x1302df41dca6379e,
658                fidl::encoding::DynamicFlags::empty(),
659                ___deadline,
660            )?;
661        Ok(_response.map(|x| x))
662    }
663}
664
665#[cfg(target_os = "fuchsia")]
666impl From<FuchsiaNetworksSynchronousProxy> for zx::NullableHandle {
667    fn from(value: FuchsiaNetworksSynchronousProxy) -> Self {
668        value.into_channel().into()
669    }
670}
671
672#[cfg(target_os = "fuchsia")]
673impl From<fidl::Channel> for FuchsiaNetworksSynchronousProxy {
674    fn from(value: fidl::Channel) -> Self {
675        Self::new(value)
676    }
677}
678
679#[cfg(target_os = "fuchsia")]
680impl fidl::endpoints::FromClient for FuchsiaNetworksSynchronousProxy {
681    type Protocol = FuchsiaNetworksMarker;
682
683    fn from_client(value: fidl::endpoints::ClientEnd<FuchsiaNetworksMarker>) -> Self {
684        Self::new(value.into_channel())
685    }
686}
687
688#[derive(Debug, Clone)]
689pub struct FuchsiaNetworksProxy {
690    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
691}
692
693impl fidl::endpoints::Proxy for FuchsiaNetworksProxy {
694    type Protocol = FuchsiaNetworksMarker;
695
696    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
697        Self::new(inner)
698    }
699
700    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
701        self.client.into_channel().map_err(|client| Self { client })
702    }
703
704    fn as_channel(&self) -> &::fidl::AsyncChannel {
705        self.client.as_channel()
706    }
707}
708
709impl FuchsiaNetworksProxy {
710    /// Create a new Proxy for fuchsia.net.policy.socketproxy/FuchsiaNetworks.
711    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
712        let protocol_name = <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
713        Self { client: fidl::client::Client::new(channel, protocol_name) }
714    }
715
716    /// Get a Stream of events from the remote end of the protocol.
717    ///
718    /// # Panics
719    ///
720    /// Panics if the event stream was already taken.
721    pub fn take_event_stream(&self) -> FuchsiaNetworksEventStream {
722        FuchsiaNetworksEventStream { event_receiver: self.client.take_event_receiver() }
723    }
724
725    /// Sets the default network.
726    ///
727    /// The network must have previously been registered by a call to `Add`.
728    pub fn r#set_default(
729        &self,
730        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
731    ) -> fidl::client::QueryResponseFut<
732        NetworkRegistrySetDefaultResult,
733        fidl::encoding::DefaultFuchsiaResourceDialect,
734    > {
735        FuchsiaNetworksProxyInterface::r#set_default(self, network_id)
736    }
737
738    /// Add a new network.
739    ///
740    /// This call will not return until the DNS servers have been successfully
741    /// updated in netcfg.
742    pub fn r#add(
743        &self,
744        mut network: &Network,
745    ) -> fidl::client::QueryResponseFut<
746        NetworkRegistryAddResult,
747        fidl::encoding::DefaultFuchsiaResourceDialect,
748    > {
749        FuchsiaNetworksProxyInterface::r#add(self, network)
750    }
751
752    /// Update a previously Added network.
753    ///
754    /// This call will not return until the DNS servers have been
755    /// successfully updated in netcfg.
756    pub fn r#update(
757        &self,
758        mut network: &Network,
759    ) -> fidl::client::QueryResponseFut<
760        NetworkRegistryUpdateResult,
761        fidl::encoding::DefaultFuchsiaResourceDialect,
762    > {
763        FuchsiaNetworksProxyInterface::r#update(self, network)
764    }
765
766    /// Remove a previously Added network.
767    ///
768    /// This call will not return until the DNS servers have been
769    /// successfully updated in netcfg.
770    pub fn r#remove(
771        &self,
772        mut network_id: u32,
773    ) -> fidl::client::QueryResponseFut<
774        NetworkRegistryRemoveResult,
775        fidl::encoding::DefaultFuchsiaResourceDialect,
776    > {
777        FuchsiaNetworksProxyInterface::r#remove(self, network_id)
778    }
779}
780
781impl FuchsiaNetworksProxyInterface for FuchsiaNetworksProxy {
782    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
783        NetworkRegistrySetDefaultResult,
784        fidl::encoding::DefaultFuchsiaResourceDialect,
785    >;
786    fn r#set_default(
787        &self,
788        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
789    ) -> Self::SetDefaultResponseFut {
790        fn _decode(
791            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
792        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
793            let _response = fidl::client::decode_transaction_body::<
794                fidl::encoding::ResultType<
795                    fidl::encoding::EmptyStruct,
796                    NetworkRegistrySetDefaultError,
797                >,
798                fidl::encoding::DefaultFuchsiaResourceDialect,
799                0x787930c67b8cf82c,
800            >(_buf?)?;
801            Ok(_response.map(|x| x))
802        }
803        self.client.send_query_and_decode::<
804            NetworkRegistrySetDefaultRequest,
805            NetworkRegistrySetDefaultResult,
806        >(
807            (network_id,),
808            0x787930c67b8cf82c,
809            fidl::encoding::DynamicFlags::empty(),
810            _decode,
811        )
812    }
813
814    type AddResponseFut = fidl::client::QueryResponseFut<
815        NetworkRegistryAddResult,
816        fidl::encoding::DefaultFuchsiaResourceDialect,
817    >;
818    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
819        fn _decode(
820            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
821        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
822            let _response = fidl::client::decode_transaction_body::<
823                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
824                fidl::encoding::DefaultFuchsiaResourceDialect,
825                0x197e70a1cbeab3ad,
826            >(_buf?)?;
827            Ok(_response.map(|x| x))
828        }
829        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
830            (network,),
831            0x197e70a1cbeab3ad,
832            fidl::encoding::DynamicFlags::empty(),
833            _decode,
834        )
835    }
836
837    type UpdateResponseFut = fidl::client::QueryResponseFut<
838        NetworkRegistryUpdateResult,
839        fidl::encoding::DefaultFuchsiaResourceDialect,
840    >;
841    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
842        fn _decode(
843            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
844        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
845            let _response = fidl::client::decode_transaction_body::<
846                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
847                fidl::encoding::DefaultFuchsiaResourceDialect,
848                0x3bc790ae5418ff0e,
849            >(_buf?)?;
850            Ok(_response.map(|x| x))
851        }
852        self.client
853            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
854                (network,),
855                0x3bc790ae5418ff0e,
856                fidl::encoding::DynamicFlags::empty(),
857                _decode,
858            )
859    }
860
861    type RemoveResponseFut = fidl::client::QueryResponseFut<
862        NetworkRegistryRemoveResult,
863        fidl::encoding::DefaultFuchsiaResourceDialect,
864    >;
865    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
866        fn _decode(
867            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
868        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
869            let _response = fidl::client::decode_transaction_body::<
870                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
871                fidl::encoding::DefaultFuchsiaResourceDialect,
872                0x1302df41dca6379e,
873            >(_buf?)?;
874            Ok(_response.map(|x| x))
875        }
876        self.client
877            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
878                (network_id,),
879                0x1302df41dca6379e,
880                fidl::encoding::DynamicFlags::empty(),
881                _decode,
882            )
883    }
884}
885
886pub struct FuchsiaNetworksEventStream {
887    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
888}
889
890impl std::marker::Unpin for FuchsiaNetworksEventStream {}
891
892impl futures::stream::FusedStream for FuchsiaNetworksEventStream {
893    fn is_terminated(&self) -> bool {
894        self.event_receiver.is_terminated()
895    }
896}
897
898impl futures::Stream for FuchsiaNetworksEventStream {
899    type Item = Result<FuchsiaNetworksEvent, fidl::Error>;
900
901    fn poll_next(
902        mut self: std::pin::Pin<&mut Self>,
903        cx: &mut std::task::Context<'_>,
904    ) -> std::task::Poll<Option<Self::Item>> {
905        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
906            &mut self.event_receiver,
907            cx
908        )?) {
909            Some(buf) => std::task::Poll::Ready(Some(FuchsiaNetworksEvent::decode(buf))),
910            None => std::task::Poll::Ready(None),
911        }
912    }
913}
914
915#[derive(Debug)]
916pub enum FuchsiaNetworksEvent {}
917
918impl FuchsiaNetworksEvent {
919    /// Decodes a message buffer as a [`FuchsiaNetworksEvent`].
920    fn decode(
921        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
922    ) -> Result<FuchsiaNetworksEvent, fidl::Error> {
923        let (bytes, _handles) = buf.split_mut();
924        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
925        debug_assert_eq!(tx_header.tx_id, 0);
926        match tx_header.ordinal {
927            _ => Err(fidl::Error::UnknownOrdinal {
928                ordinal: tx_header.ordinal,
929                protocol_name:
930                    <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
931            }),
932        }
933    }
934}
935
936/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/FuchsiaNetworks.
937pub struct FuchsiaNetworksRequestStream {
938    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
939    is_terminated: bool,
940}
941
942impl std::marker::Unpin for FuchsiaNetworksRequestStream {}
943
944impl futures::stream::FusedStream for FuchsiaNetworksRequestStream {
945    fn is_terminated(&self) -> bool {
946        self.is_terminated
947    }
948}
949
950impl fidl::endpoints::RequestStream for FuchsiaNetworksRequestStream {
951    type Protocol = FuchsiaNetworksMarker;
952    type ControlHandle = FuchsiaNetworksControlHandle;
953
954    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
955        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
956    }
957
958    fn control_handle(&self) -> Self::ControlHandle {
959        FuchsiaNetworksControlHandle { inner: self.inner.clone() }
960    }
961
962    fn into_inner(
963        self,
964    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
965    {
966        (self.inner, self.is_terminated)
967    }
968
969    fn from_inner(
970        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
971        is_terminated: bool,
972    ) -> Self {
973        Self { inner, is_terminated }
974    }
975}
976
977impl futures::Stream for FuchsiaNetworksRequestStream {
978    type Item = Result<FuchsiaNetworksRequest, fidl::Error>;
979
980    fn poll_next(
981        mut self: std::pin::Pin<&mut Self>,
982        cx: &mut std::task::Context<'_>,
983    ) -> std::task::Poll<Option<Self::Item>> {
984        let this = &mut *self;
985        if this.inner.check_shutdown(cx) {
986            this.is_terminated = true;
987            return std::task::Poll::Ready(None);
988        }
989        if this.is_terminated {
990            panic!("polled FuchsiaNetworksRequestStream after completion");
991        }
992        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
993            |bytes, handles| {
994                match this.inner.channel().read_etc(cx, bytes, handles) {
995                    std::task::Poll::Ready(Ok(())) => {}
996                    std::task::Poll::Pending => return std::task::Poll::Pending,
997                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
998                        this.is_terminated = true;
999                        return std::task::Poll::Ready(None);
1000                    }
1001                    std::task::Poll::Ready(Err(e)) => {
1002                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1003                            e.into(),
1004                        ))));
1005                    }
1006                }
1007
1008                // A message has been received from the channel
1009                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1010
1011                std::task::Poll::Ready(Some(match header.ordinal {
1012                    0x787930c67b8cf82c => {
1013                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1014                        let mut req = fidl::new_empty!(
1015                            NetworkRegistrySetDefaultRequest,
1016                            fidl::encoding::DefaultFuchsiaResourceDialect
1017                        );
1018                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
1019                        let control_handle =
1020                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1021                        Ok(FuchsiaNetworksRequest::SetDefault {
1022                            network_id: req.network_id,
1023
1024                            responder: FuchsiaNetworksSetDefaultResponder {
1025                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1026                                tx_id: header.tx_id,
1027                            },
1028                        })
1029                    }
1030                    0x197e70a1cbeab3ad => {
1031                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1032                        let mut req = fidl::new_empty!(
1033                            NetworkRegistryAddRequest,
1034                            fidl::encoding::DefaultFuchsiaResourceDialect
1035                        );
1036                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
1037                        let control_handle =
1038                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1039                        Ok(FuchsiaNetworksRequest::Add {
1040                            network: req.network,
1041
1042                            responder: FuchsiaNetworksAddResponder {
1043                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1044                                tx_id: header.tx_id,
1045                            },
1046                        })
1047                    }
1048                    0x3bc790ae5418ff0e => {
1049                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1050                        let mut req = fidl::new_empty!(
1051                            NetworkRegistryUpdateRequest,
1052                            fidl::encoding::DefaultFuchsiaResourceDialect
1053                        );
1054                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
1055                        let control_handle =
1056                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1057                        Ok(FuchsiaNetworksRequest::Update {
1058                            network: req.network,
1059
1060                            responder: FuchsiaNetworksUpdateResponder {
1061                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1062                                tx_id: header.tx_id,
1063                            },
1064                        })
1065                    }
1066                    0x1302df41dca6379e => {
1067                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1068                        let mut req = fidl::new_empty!(
1069                            NetworkRegistryRemoveRequest,
1070                            fidl::encoding::DefaultFuchsiaResourceDialect
1071                        );
1072                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
1073                        let control_handle =
1074                            FuchsiaNetworksControlHandle { inner: this.inner.clone() };
1075                        Ok(FuchsiaNetworksRequest::Remove {
1076                            network_id: req.network_id,
1077
1078                            responder: FuchsiaNetworksRemoveResponder {
1079                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1080                                tx_id: header.tx_id,
1081                            },
1082                        })
1083                    }
1084                    _ => Err(fidl::Error::UnknownOrdinal {
1085                        ordinal: header.ordinal,
1086                        protocol_name:
1087                            <FuchsiaNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1088                    }),
1089                }))
1090            },
1091        )
1092    }
1093}
1094
1095/// FuchsiaNetworks is used for Fuchsia to communicate changes to the network.
1096/// Only one connection to this service is considered valid at any one time.
1097/// If the connection is lost for any reason, all previously registered
1098/// networks are considered invalid and will be removed.
1099#[derive(Debug)]
1100pub enum FuchsiaNetworksRequest {
1101    /// Sets the default network.
1102    ///
1103    /// The network must have previously been registered by a call to `Add`.
1104    SetDefault {
1105        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
1106        responder: FuchsiaNetworksSetDefaultResponder,
1107    },
1108    /// Add a new network.
1109    ///
1110    /// This call will not return until the DNS servers have been successfully
1111    /// updated in netcfg.
1112    Add { network: Network, responder: FuchsiaNetworksAddResponder },
1113    /// Update a previously Added network.
1114    ///
1115    /// This call will not return until the DNS servers have been
1116    /// successfully updated in netcfg.
1117    Update { network: Network, responder: FuchsiaNetworksUpdateResponder },
1118    /// Remove a previously Added network.
1119    ///
1120    /// This call will not return until the DNS servers have been
1121    /// successfully updated in netcfg.
1122    Remove { network_id: u32, responder: FuchsiaNetworksRemoveResponder },
1123}
1124
1125impl FuchsiaNetworksRequest {
1126    #[allow(irrefutable_let_patterns)]
1127    pub fn into_set_default(
1128        self,
1129    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, FuchsiaNetworksSetDefaultResponder)>
1130    {
1131        if let FuchsiaNetworksRequest::SetDefault { network_id, responder } = self {
1132            Some((network_id, responder))
1133        } else {
1134            None
1135        }
1136    }
1137
1138    #[allow(irrefutable_let_patterns)]
1139    pub fn into_add(self) -> Option<(Network, FuchsiaNetworksAddResponder)> {
1140        if let FuchsiaNetworksRequest::Add { network, responder } = self {
1141            Some((network, responder))
1142        } else {
1143            None
1144        }
1145    }
1146
1147    #[allow(irrefutable_let_patterns)]
1148    pub fn into_update(self) -> Option<(Network, FuchsiaNetworksUpdateResponder)> {
1149        if let FuchsiaNetworksRequest::Update { network, responder } = self {
1150            Some((network, responder))
1151        } else {
1152            None
1153        }
1154    }
1155
1156    #[allow(irrefutable_let_patterns)]
1157    pub fn into_remove(self) -> Option<(u32, FuchsiaNetworksRemoveResponder)> {
1158        if let FuchsiaNetworksRequest::Remove { network_id, responder } = self {
1159            Some((network_id, responder))
1160        } else {
1161            None
1162        }
1163    }
1164
1165    /// Name of the method defined in FIDL
1166    pub fn method_name(&self) -> &'static str {
1167        match *self {
1168            FuchsiaNetworksRequest::SetDefault { .. } => "set_default",
1169            FuchsiaNetworksRequest::Add { .. } => "add",
1170            FuchsiaNetworksRequest::Update { .. } => "update",
1171            FuchsiaNetworksRequest::Remove { .. } => "remove",
1172        }
1173    }
1174}
1175
1176#[derive(Debug, Clone)]
1177pub struct FuchsiaNetworksControlHandle {
1178    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1179}
1180
1181impl fidl::endpoints::ControlHandle for FuchsiaNetworksControlHandle {
1182    fn shutdown(&self) {
1183        self.inner.shutdown()
1184    }
1185
1186    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1187        self.inner.shutdown_with_epitaph(status)
1188    }
1189
1190    fn is_closed(&self) -> bool {
1191        self.inner.channel().is_closed()
1192    }
1193    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1194        self.inner.channel().on_closed()
1195    }
1196
1197    #[cfg(target_os = "fuchsia")]
1198    fn signal_peer(
1199        &self,
1200        clear_mask: zx::Signals,
1201        set_mask: zx::Signals,
1202    ) -> Result<(), zx_status::Status> {
1203        use fidl::Peered;
1204        self.inner.channel().signal_peer(clear_mask, set_mask)
1205    }
1206}
1207
1208impl FuchsiaNetworksControlHandle {}
1209
1210#[must_use = "FIDL methods require a response to be sent"]
1211#[derive(Debug)]
1212pub struct FuchsiaNetworksSetDefaultResponder {
1213    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1214    tx_id: u32,
1215}
1216
1217/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1218/// if the responder is dropped without sending a response, so that the client
1219/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1220impl std::ops::Drop for FuchsiaNetworksSetDefaultResponder {
1221    fn drop(&mut self) {
1222        self.control_handle.shutdown();
1223        // Safety: drops once, never accessed again
1224        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1225    }
1226}
1227
1228impl fidl::endpoints::Responder for FuchsiaNetworksSetDefaultResponder {
1229    type ControlHandle = FuchsiaNetworksControlHandle;
1230
1231    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1232        &self.control_handle
1233    }
1234
1235    fn drop_without_shutdown(mut self) {
1236        // Safety: drops once, never accessed again due to mem::forget
1237        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1238        // Prevent Drop from running (which would shut down the channel)
1239        std::mem::forget(self);
1240    }
1241}
1242
1243impl FuchsiaNetworksSetDefaultResponder {
1244    /// Sends a response to the FIDL transaction.
1245    ///
1246    /// Sets the channel to shutdown if an error occurs.
1247    pub fn send(
1248        self,
1249        mut result: Result<(), NetworkRegistrySetDefaultError>,
1250    ) -> Result<(), fidl::Error> {
1251        let _result = self.send_raw(result);
1252        if _result.is_err() {
1253            self.control_handle.shutdown();
1254        }
1255        self.drop_without_shutdown();
1256        _result
1257    }
1258
1259    /// Similar to "send" but does not shutdown the channel if an error occurs.
1260    pub fn send_no_shutdown_on_err(
1261        self,
1262        mut result: Result<(), NetworkRegistrySetDefaultError>,
1263    ) -> Result<(), fidl::Error> {
1264        let _result = self.send_raw(result);
1265        self.drop_without_shutdown();
1266        _result
1267    }
1268
1269    fn send_raw(
1270        &self,
1271        mut result: Result<(), NetworkRegistrySetDefaultError>,
1272    ) -> Result<(), fidl::Error> {
1273        self.control_handle.inner.send::<fidl::encoding::ResultType<
1274            fidl::encoding::EmptyStruct,
1275            NetworkRegistrySetDefaultError,
1276        >>(
1277            result,
1278            self.tx_id,
1279            0x787930c67b8cf82c,
1280            fidl::encoding::DynamicFlags::empty(),
1281        )
1282    }
1283}
1284
1285#[must_use = "FIDL methods require a response to be sent"]
1286#[derive(Debug)]
1287pub struct FuchsiaNetworksAddResponder {
1288    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1289    tx_id: u32,
1290}
1291
1292/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1293/// if the responder is dropped without sending a response, so that the client
1294/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1295impl std::ops::Drop for FuchsiaNetworksAddResponder {
1296    fn drop(&mut self) {
1297        self.control_handle.shutdown();
1298        // Safety: drops once, never accessed again
1299        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1300    }
1301}
1302
1303impl fidl::endpoints::Responder for FuchsiaNetworksAddResponder {
1304    type ControlHandle = FuchsiaNetworksControlHandle;
1305
1306    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1307        &self.control_handle
1308    }
1309
1310    fn drop_without_shutdown(mut self) {
1311        // Safety: drops once, never accessed again due to mem::forget
1312        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1313        // Prevent Drop from running (which would shut down the channel)
1314        std::mem::forget(self);
1315    }
1316}
1317
1318impl FuchsiaNetworksAddResponder {
1319    /// Sends a response to the FIDL transaction.
1320    ///
1321    /// Sets the channel to shutdown if an error occurs.
1322    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
1323        let _result = self.send_raw(result);
1324        if _result.is_err() {
1325            self.control_handle.shutdown();
1326        }
1327        self.drop_without_shutdown();
1328        _result
1329    }
1330
1331    /// Similar to "send" but does not shutdown the channel if an error occurs.
1332    pub fn send_no_shutdown_on_err(
1333        self,
1334        mut result: Result<(), NetworkRegistryAddError>,
1335    ) -> Result<(), fidl::Error> {
1336        let _result = self.send_raw(result);
1337        self.drop_without_shutdown();
1338        _result
1339    }
1340
1341    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
1342        self.control_handle.inner.send::<fidl::encoding::ResultType<
1343            fidl::encoding::EmptyStruct,
1344            NetworkRegistryAddError,
1345        >>(
1346            result,
1347            self.tx_id,
1348            0x197e70a1cbeab3ad,
1349            fidl::encoding::DynamicFlags::empty(),
1350        )
1351    }
1352}
1353
1354#[must_use = "FIDL methods require a response to be sent"]
1355#[derive(Debug)]
1356pub struct FuchsiaNetworksUpdateResponder {
1357    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1358    tx_id: u32,
1359}
1360
1361/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1362/// if the responder is dropped without sending a response, so that the client
1363/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1364impl std::ops::Drop for FuchsiaNetworksUpdateResponder {
1365    fn drop(&mut self) {
1366        self.control_handle.shutdown();
1367        // Safety: drops once, never accessed again
1368        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1369    }
1370}
1371
1372impl fidl::endpoints::Responder for FuchsiaNetworksUpdateResponder {
1373    type ControlHandle = FuchsiaNetworksControlHandle;
1374
1375    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1376        &self.control_handle
1377    }
1378
1379    fn drop_without_shutdown(mut self) {
1380        // Safety: drops once, never accessed again due to mem::forget
1381        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1382        // Prevent Drop from running (which would shut down the channel)
1383        std::mem::forget(self);
1384    }
1385}
1386
1387impl FuchsiaNetworksUpdateResponder {
1388    /// Sends a response to the FIDL transaction.
1389    ///
1390    /// Sets the channel to shutdown if an error occurs.
1391    pub fn send(
1392        self,
1393        mut result: Result<(), NetworkRegistryUpdateError>,
1394    ) -> Result<(), fidl::Error> {
1395        let _result = self.send_raw(result);
1396        if _result.is_err() {
1397            self.control_handle.shutdown();
1398        }
1399        self.drop_without_shutdown();
1400        _result
1401    }
1402
1403    /// Similar to "send" but does not shutdown the channel if an error occurs.
1404    pub fn send_no_shutdown_on_err(
1405        self,
1406        mut result: Result<(), NetworkRegistryUpdateError>,
1407    ) -> Result<(), fidl::Error> {
1408        let _result = self.send_raw(result);
1409        self.drop_without_shutdown();
1410        _result
1411    }
1412
1413    fn send_raw(
1414        &self,
1415        mut result: Result<(), NetworkRegistryUpdateError>,
1416    ) -> Result<(), fidl::Error> {
1417        self.control_handle.inner.send::<fidl::encoding::ResultType<
1418            fidl::encoding::EmptyStruct,
1419            NetworkRegistryUpdateError,
1420        >>(
1421            result,
1422            self.tx_id,
1423            0x3bc790ae5418ff0e,
1424            fidl::encoding::DynamicFlags::empty(),
1425        )
1426    }
1427}
1428
1429#[must_use = "FIDL methods require a response to be sent"]
1430#[derive(Debug)]
1431pub struct FuchsiaNetworksRemoveResponder {
1432    control_handle: std::mem::ManuallyDrop<FuchsiaNetworksControlHandle>,
1433    tx_id: u32,
1434}
1435
1436/// Set the the channel to be shutdown (see [`FuchsiaNetworksControlHandle::shutdown`])
1437/// if the responder is dropped without sending a response, so that the client
1438/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1439impl std::ops::Drop for FuchsiaNetworksRemoveResponder {
1440    fn drop(&mut self) {
1441        self.control_handle.shutdown();
1442        // Safety: drops once, never accessed again
1443        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1444    }
1445}
1446
1447impl fidl::endpoints::Responder for FuchsiaNetworksRemoveResponder {
1448    type ControlHandle = FuchsiaNetworksControlHandle;
1449
1450    fn control_handle(&self) -> &FuchsiaNetworksControlHandle {
1451        &self.control_handle
1452    }
1453
1454    fn drop_without_shutdown(mut self) {
1455        // Safety: drops once, never accessed again due to mem::forget
1456        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1457        // Prevent Drop from running (which would shut down the channel)
1458        std::mem::forget(self);
1459    }
1460}
1461
1462impl FuchsiaNetworksRemoveResponder {
1463    /// Sends a response to the FIDL transaction.
1464    ///
1465    /// Sets the channel to shutdown if an error occurs.
1466    pub fn send(
1467        self,
1468        mut result: Result<(), NetworkRegistryRemoveError>,
1469    ) -> Result<(), fidl::Error> {
1470        let _result = self.send_raw(result);
1471        if _result.is_err() {
1472            self.control_handle.shutdown();
1473        }
1474        self.drop_without_shutdown();
1475        _result
1476    }
1477
1478    /// Similar to "send" but does not shutdown the channel if an error occurs.
1479    pub fn send_no_shutdown_on_err(
1480        self,
1481        mut result: Result<(), NetworkRegistryRemoveError>,
1482    ) -> Result<(), fidl::Error> {
1483        let _result = self.send_raw(result);
1484        self.drop_without_shutdown();
1485        _result
1486    }
1487
1488    fn send_raw(
1489        &self,
1490        mut result: Result<(), NetworkRegistryRemoveError>,
1491    ) -> Result<(), fidl::Error> {
1492        self.control_handle.inner.send::<fidl::encoding::ResultType<
1493            fidl::encoding::EmptyStruct,
1494            NetworkRegistryRemoveError,
1495        >>(
1496            result,
1497            self.tx_id,
1498            0x1302df41dca6379e,
1499            fidl::encoding::DynamicFlags::empty(),
1500        )
1501    }
1502}
1503
1504#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1505pub struct NetworkRegistryMarker;
1506
1507impl fidl::endpoints::ProtocolMarker for NetworkRegistryMarker {
1508    type Proxy = NetworkRegistryProxy;
1509    type RequestStream = NetworkRegistryRequestStream;
1510    #[cfg(target_os = "fuchsia")]
1511    type SynchronousProxy = NetworkRegistrySynchronousProxy;
1512
1513    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.NetworkRegistry";
1514}
1515impl fidl::endpoints::DiscoverableProtocolMarker for NetworkRegistryMarker {}
1516pub type NetworkRegistrySetDefaultResult = Result<(), NetworkRegistrySetDefaultError>;
1517pub type NetworkRegistryAddResult = Result<(), NetworkRegistryAddError>;
1518pub type NetworkRegistryUpdateResult = Result<(), NetworkRegistryUpdateError>;
1519pub type NetworkRegistryRemoveResult = Result<(), NetworkRegistryRemoveError>;
1520
1521pub trait NetworkRegistryProxyInterface: Send + Sync {
1522    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
1523        + Send;
1524    fn r#set_default(
1525        &self,
1526        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1527    ) -> Self::SetDefaultResponseFut;
1528    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
1529        + Send;
1530    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
1531    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
1532        + Send;
1533    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
1534    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
1535        + Send;
1536    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
1537}
1538#[derive(Debug)]
1539#[cfg(target_os = "fuchsia")]
1540pub struct NetworkRegistrySynchronousProxy {
1541    client: fidl::client::sync::Client,
1542}
1543
1544#[cfg(target_os = "fuchsia")]
1545impl fidl::endpoints::SynchronousProxy for NetworkRegistrySynchronousProxy {
1546    type Proxy = NetworkRegistryProxy;
1547    type Protocol = NetworkRegistryMarker;
1548
1549    fn from_channel(inner: fidl::Channel) -> Self {
1550        Self::new(inner)
1551    }
1552
1553    fn into_channel(self) -> fidl::Channel {
1554        self.client.into_channel()
1555    }
1556
1557    fn as_channel(&self) -> &fidl::Channel {
1558        self.client.as_channel()
1559    }
1560}
1561
1562#[cfg(target_os = "fuchsia")]
1563impl NetworkRegistrySynchronousProxy {
1564    pub fn new(channel: fidl::Channel) -> Self {
1565        Self { client: fidl::client::sync::Client::new(channel) }
1566    }
1567
1568    pub fn into_channel(self) -> fidl::Channel {
1569        self.client.into_channel()
1570    }
1571
1572    /// Waits until an event arrives and returns it. It is safe for other
1573    /// threads to make concurrent requests while waiting for an event.
1574    pub fn wait_for_event(
1575        &self,
1576        deadline: zx::MonotonicInstant,
1577    ) -> Result<NetworkRegistryEvent, fidl::Error> {
1578        NetworkRegistryEvent::decode(self.client.wait_for_event::<NetworkRegistryMarker>(deadline)?)
1579    }
1580
1581    /// Sets the default network.
1582    ///
1583    /// The network must have previously been registered by a call to `Add`.
1584    pub fn r#set_default(
1585        &self,
1586        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1587        ___deadline: zx::MonotonicInstant,
1588    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
1589        let _response =
1590            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
1591                fidl::encoding::EmptyStruct,
1592                NetworkRegistrySetDefaultError,
1593            >, NetworkRegistryMarker>(
1594                (network_id,),
1595                0x787930c67b8cf82c,
1596                fidl::encoding::DynamicFlags::empty(),
1597                ___deadline,
1598            )?;
1599        Ok(_response.map(|x| x))
1600    }
1601
1602    /// Add a new network.
1603    ///
1604    /// This call will not return until the DNS servers have been successfully
1605    /// updated in netcfg.
1606    pub fn r#add(
1607        &self,
1608        mut network: &Network,
1609        ___deadline: zx::MonotonicInstant,
1610    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
1611        let _response =
1612            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
1613                fidl::encoding::EmptyStruct,
1614                NetworkRegistryAddError,
1615            >, NetworkRegistryMarker>(
1616                (network,),
1617                0x197e70a1cbeab3ad,
1618                fidl::encoding::DynamicFlags::empty(),
1619                ___deadline,
1620            )?;
1621        Ok(_response.map(|x| x))
1622    }
1623
1624    /// Update a previously Added network.
1625    ///
1626    /// This call will not return until the DNS servers have been
1627    /// successfully updated in netcfg.
1628    pub fn r#update(
1629        &self,
1630        mut network: &Network,
1631        ___deadline: zx::MonotonicInstant,
1632    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
1633        let _response =
1634            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
1635                fidl::encoding::EmptyStruct,
1636                NetworkRegistryUpdateError,
1637            >, NetworkRegistryMarker>(
1638                (network,),
1639                0x3bc790ae5418ff0e,
1640                fidl::encoding::DynamicFlags::empty(),
1641                ___deadline,
1642            )?;
1643        Ok(_response.map(|x| x))
1644    }
1645
1646    /// Remove a previously Added network.
1647    ///
1648    /// This call will not return until the DNS servers have been
1649    /// successfully updated in netcfg.
1650    pub fn r#remove(
1651        &self,
1652        mut network_id: u32,
1653        ___deadline: zx::MonotonicInstant,
1654    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
1655        let _response =
1656            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
1657                fidl::encoding::EmptyStruct,
1658                NetworkRegistryRemoveError,
1659            >, NetworkRegistryMarker>(
1660                (network_id,),
1661                0x1302df41dca6379e,
1662                fidl::encoding::DynamicFlags::empty(),
1663                ___deadline,
1664            )?;
1665        Ok(_response.map(|x| x))
1666    }
1667}
1668
1669#[cfg(target_os = "fuchsia")]
1670impl From<NetworkRegistrySynchronousProxy> for zx::NullableHandle {
1671    fn from(value: NetworkRegistrySynchronousProxy) -> Self {
1672        value.into_channel().into()
1673    }
1674}
1675
1676#[cfg(target_os = "fuchsia")]
1677impl From<fidl::Channel> for NetworkRegistrySynchronousProxy {
1678    fn from(value: fidl::Channel) -> Self {
1679        Self::new(value)
1680    }
1681}
1682
1683#[cfg(target_os = "fuchsia")]
1684impl fidl::endpoints::FromClient for NetworkRegistrySynchronousProxy {
1685    type Protocol = NetworkRegistryMarker;
1686
1687    fn from_client(value: fidl::endpoints::ClientEnd<NetworkRegistryMarker>) -> Self {
1688        Self::new(value.into_channel())
1689    }
1690}
1691
1692#[derive(Debug, Clone)]
1693pub struct NetworkRegistryProxy {
1694    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1695}
1696
1697impl fidl::endpoints::Proxy for NetworkRegistryProxy {
1698    type Protocol = NetworkRegistryMarker;
1699
1700    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1701        Self::new(inner)
1702    }
1703
1704    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1705        self.client.into_channel().map_err(|client| Self { client })
1706    }
1707
1708    fn as_channel(&self) -> &::fidl::AsyncChannel {
1709        self.client.as_channel()
1710    }
1711}
1712
1713impl NetworkRegistryProxy {
1714    /// Create a new Proxy for fuchsia.net.policy.socketproxy/NetworkRegistry.
1715    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1716        let protocol_name = <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1717        Self { client: fidl::client::Client::new(channel, protocol_name) }
1718    }
1719
1720    /// Get a Stream of events from the remote end of the protocol.
1721    ///
1722    /// # Panics
1723    ///
1724    /// Panics if the event stream was already taken.
1725    pub fn take_event_stream(&self) -> NetworkRegistryEventStream {
1726        NetworkRegistryEventStream { event_receiver: self.client.take_event_receiver() }
1727    }
1728
1729    /// Sets the default network.
1730    ///
1731    /// The network must have previously been registered by a call to `Add`.
1732    pub fn r#set_default(
1733        &self,
1734        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1735    ) -> fidl::client::QueryResponseFut<
1736        NetworkRegistrySetDefaultResult,
1737        fidl::encoding::DefaultFuchsiaResourceDialect,
1738    > {
1739        NetworkRegistryProxyInterface::r#set_default(self, network_id)
1740    }
1741
1742    /// Add a new network.
1743    ///
1744    /// This call will not return until the DNS servers have been successfully
1745    /// updated in netcfg.
1746    pub fn r#add(
1747        &self,
1748        mut network: &Network,
1749    ) -> fidl::client::QueryResponseFut<
1750        NetworkRegistryAddResult,
1751        fidl::encoding::DefaultFuchsiaResourceDialect,
1752    > {
1753        NetworkRegistryProxyInterface::r#add(self, network)
1754    }
1755
1756    /// Update a previously Added network.
1757    ///
1758    /// This call will not return until the DNS servers have been
1759    /// successfully updated in netcfg.
1760    pub fn r#update(
1761        &self,
1762        mut network: &Network,
1763    ) -> fidl::client::QueryResponseFut<
1764        NetworkRegistryUpdateResult,
1765        fidl::encoding::DefaultFuchsiaResourceDialect,
1766    > {
1767        NetworkRegistryProxyInterface::r#update(self, network)
1768    }
1769
1770    /// Remove a previously Added network.
1771    ///
1772    /// This call will not return until the DNS servers have been
1773    /// successfully updated in netcfg.
1774    pub fn r#remove(
1775        &self,
1776        mut network_id: u32,
1777    ) -> fidl::client::QueryResponseFut<
1778        NetworkRegistryRemoveResult,
1779        fidl::encoding::DefaultFuchsiaResourceDialect,
1780    > {
1781        NetworkRegistryProxyInterface::r#remove(self, network_id)
1782    }
1783}
1784
1785impl NetworkRegistryProxyInterface for NetworkRegistryProxy {
1786    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
1787        NetworkRegistrySetDefaultResult,
1788        fidl::encoding::DefaultFuchsiaResourceDialect,
1789    >;
1790    fn r#set_default(
1791        &self,
1792        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1793    ) -> Self::SetDefaultResponseFut {
1794        fn _decode(
1795            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1796        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
1797            let _response = fidl::client::decode_transaction_body::<
1798                fidl::encoding::ResultType<
1799                    fidl::encoding::EmptyStruct,
1800                    NetworkRegistrySetDefaultError,
1801                >,
1802                fidl::encoding::DefaultFuchsiaResourceDialect,
1803                0x787930c67b8cf82c,
1804            >(_buf?)?;
1805            Ok(_response.map(|x| x))
1806        }
1807        self.client.send_query_and_decode::<
1808            NetworkRegistrySetDefaultRequest,
1809            NetworkRegistrySetDefaultResult,
1810        >(
1811            (network_id,),
1812            0x787930c67b8cf82c,
1813            fidl::encoding::DynamicFlags::empty(),
1814            _decode,
1815        )
1816    }
1817
1818    type AddResponseFut = fidl::client::QueryResponseFut<
1819        NetworkRegistryAddResult,
1820        fidl::encoding::DefaultFuchsiaResourceDialect,
1821    >;
1822    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
1823        fn _decode(
1824            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1825        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
1826            let _response = fidl::client::decode_transaction_body::<
1827                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
1828                fidl::encoding::DefaultFuchsiaResourceDialect,
1829                0x197e70a1cbeab3ad,
1830            >(_buf?)?;
1831            Ok(_response.map(|x| x))
1832        }
1833        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
1834            (network,),
1835            0x197e70a1cbeab3ad,
1836            fidl::encoding::DynamicFlags::empty(),
1837            _decode,
1838        )
1839    }
1840
1841    type UpdateResponseFut = fidl::client::QueryResponseFut<
1842        NetworkRegistryUpdateResult,
1843        fidl::encoding::DefaultFuchsiaResourceDialect,
1844    >;
1845    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
1846        fn _decode(
1847            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1848        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
1849            let _response = fidl::client::decode_transaction_body::<
1850                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
1851                fidl::encoding::DefaultFuchsiaResourceDialect,
1852                0x3bc790ae5418ff0e,
1853            >(_buf?)?;
1854            Ok(_response.map(|x| x))
1855        }
1856        self.client
1857            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
1858                (network,),
1859                0x3bc790ae5418ff0e,
1860                fidl::encoding::DynamicFlags::empty(),
1861                _decode,
1862            )
1863    }
1864
1865    type RemoveResponseFut = fidl::client::QueryResponseFut<
1866        NetworkRegistryRemoveResult,
1867        fidl::encoding::DefaultFuchsiaResourceDialect,
1868    >;
1869    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
1870        fn _decode(
1871            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1872        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
1873            let _response = fidl::client::decode_transaction_body::<
1874                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
1875                fidl::encoding::DefaultFuchsiaResourceDialect,
1876                0x1302df41dca6379e,
1877            >(_buf?)?;
1878            Ok(_response.map(|x| x))
1879        }
1880        self.client
1881            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
1882                (network_id,),
1883                0x1302df41dca6379e,
1884                fidl::encoding::DynamicFlags::empty(),
1885                _decode,
1886            )
1887    }
1888}
1889
1890pub struct NetworkRegistryEventStream {
1891    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1892}
1893
1894impl std::marker::Unpin for NetworkRegistryEventStream {}
1895
1896impl futures::stream::FusedStream for NetworkRegistryEventStream {
1897    fn is_terminated(&self) -> bool {
1898        self.event_receiver.is_terminated()
1899    }
1900}
1901
1902impl futures::Stream for NetworkRegistryEventStream {
1903    type Item = Result<NetworkRegistryEvent, fidl::Error>;
1904
1905    fn poll_next(
1906        mut self: std::pin::Pin<&mut Self>,
1907        cx: &mut std::task::Context<'_>,
1908    ) -> std::task::Poll<Option<Self::Item>> {
1909        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1910            &mut self.event_receiver,
1911            cx
1912        )?) {
1913            Some(buf) => std::task::Poll::Ready(Some(NetworkRegistryEvent::decode(buf))),
1914            None => std::task::Poll::Ready(None),
1915        }
1916    }
1917}
1918
1919#[derive(Debug)]
1920pub enum NetworkRegistryEvent {}
1921
1922impl NetworkRegistryEvent {
1923    /// Decodes a message buffer as a [`NetworkRegistryEvent`].
1924    fn decode(
1925        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1926    ) -> Result<NetworkRegistryEvent, fidl::Error> {
1927        let (bytes, _handles) = buf.split_mut();
1928        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1929        debug_assert_eq!(tx_header.tx_id, 0);
1930        match tx_header.ordinal {
1931            _ => Err(fidl::Error::UnknownOrdinal {
1932                ordinal: tx_header.ordinal,
1933                protocol_name:
1934                    <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1935            }),
1936        }
1937    }
1938}
1939
1940/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/NetworkRegistry.
1941pub struct NetworkRegistryRequestStream {
1942    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1943    is_terminated: bool,
1944}
1945
1946impl std::marker::Unpin for NetworkRegistryRequestStream {}
1947
1948impl futures::stream::FusedStream for NetworkRegistryRequestStream {
1949    fn is_terminated(&self) -> bool {
1950        self.is_terminated
1951    }
1952}
1953
1954impl fidl::endpoints::RequestStream for NetworkRegistryRequestStream {
1955    type Protocol = NetworkRegistryMarker;
1956    type ControlHandle = NetworkRegistryControlHandle;
1957
1958    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1959        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1960    }
1961
1962    fn control_handle(&self) -> Self::ControlHandle {
1963        NetworkRegistryControlHandle { inner: self.inner.clone() }
1964    }
1965
1966    fn into_inner(
1967        self,
1968    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1969    {
1970        (self.inner, self.is_terminated)
1971    }
1972
1973    fn from_inner(
1974        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1975        is_terminated: bool,
1976    ) -> Self {
1977        Self { inner, is_terminated }
1978    }
1979}
1980
1981impl futures::Stream for NetworkRegistryRequestStream {
1982    type Item = Result<NetworkRegistryRequest, fidl::Error>;
1983
1984    fn poll_next(
1985        mut self: std::pin::Pin<&mut Self>,
1986        cx: &mut std::task::Context<'_>,
1987    ) -> std::task::Poll<Option<Self::Item>> {
1988        let this = &mut *self;
1989        if this.inner.check_shutdown(cx) {
1990            this.is_terminated = true;
1991            return std::task::Poll::Ready(None);
1992        }
1993        if this.is_terminated {
1994            panic!("polled NetworkRegistryRequestStream after completion");
1995        }
1996        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1997            |bytes, handles| {
1998                match this.inner.channel().read_etc(cx, bytes, handles) {
1999                    std::task::Poll::Ready(Ok(())) => {}
2000                    std::task::Poll::Pending => return std::task::Poll::Pending,
2001                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2002                        this.is_terminated = true;
2003                        return std::task::Poll::Ready(None);
2004                    }
2005                    std::task::Poll::Ready(Err(e)) => {
2006                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2007                            e.into(),
2008                        ))));
2009                    }
2010                }
2011
2012                // A message has been received from the channel
2013                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2014
2015                std::task::Poll::Ready(Some(match header.ordinal {
2016                    0x787930c67b8cf82c => {
2017                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2018                        let mut req = fidl::new_empty!(
2019                            NetworkRegistrySetDefaultRequest,
2020                            fidl::encoding::DefaultFuchsiaResourceDialect
2021                        );
2022                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
2023                        let control_handle =
2024                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2025                        Ok(NetworkRegistryRequest::SetDefault {
2026                            network_id: req.network_id,
2027
2028                            responder: NetworkRegistrySetDefaultResponder {
2029                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2030                                tx_id: header.tx_id,
2031                            },
2032                        })
2033                    }
2034                    0x197e70a1cbeab3ad => {
2035                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2036                        let mut req = fidl::new_empty!(
2037                            NetworkRegistryAddRequest,
2038                            fidl::encoding::DefaultFuchsiaResourceDialect
2039                        );
2040                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
2041                        let control_handle =
2042                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2043                        Ok(NetworkRegistryRequest::Add {
2044                            network: req.network,
2045
2046                            responder: NetworkRegistryAddResponder {
2047                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2048                                tx_id: header.tx_id,
2049                            },
2050                        })
2051                    }
2052                    0x3bc790ae5418ff0e => {
2053                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2054                        let mut req = fidl::new_empty!(
2055                            NetworkRegistryUpdateRequest,
2056                            fidl::encoding::DefaultFuchsiaResourceDialect
2057                        );
2058                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
2059                        let control_handle =
2060                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2061                        Ok(NetworkRegistryRequest::Update {
2062                            network: req.network,
2063
2064                            responder: NetworkRegistryUpdateResponder {
2065                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2066                                tx_id: header.tx_id,
2067                            },
2068                        })
2069                    }
2070                    0x1302df41dca6379e => {
2071                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2072                        let mut req = fidl::new_empty!(
2073                            NetworkRegistryRemoveRequest,
2074                            fidl::encoding::DefaultFuchsiaResourceDialect
2075                        );
2076                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
2077                        let control_handle =
2078                            NetworkRegistryControlHandle { inner: this.inner.clone() };
2079                        Ok(NetworkRegistryRequest::Remove {
2080                            network_id: req.network_id,
2081
2082                            responder: NetworkRegistryRemoveResponder {
2083                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2084                                tx_id: header.tx_id,
2085                            },
2086                        })
2087                    }
2088                    _ => Err(fidl::Error::UnknownOrdinal {
2089                        ordinal: header.ordinal,
2090                        protocol_name:
2091                            <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2092                    }),
2093                }))
2094            },
2095        )
2096    }
2097}
2098
2099#[derive(Debug)]
2100pub enum NetworkRegistryRequest {
2101    /// Sets the default network.
2102    ///
2103    /// The network must have previously been registered by a call to `Add`.
2104    SetDefault {
2105        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
2106        responder: NetworkRegistrySetDefaultResponder,
2107    },
2108    /// Add a new network.
2109    ///
2110    /// This call will not return until the DNS servers have been successfully
2111    /// updated in netcfg.
2112    Add { network: Network, responder: NetworkRegistryAddResponder },
2113    /// Update a previously Added network.
2114    ///
2115    /// This call will not return until the DNS servers have been
2116    /// successfully updated in netcfg.
2117    Update { network: Network, responder: NetworkRegistryUpdateResponder },
2118    /// Remove a previously Added network.
2119    ///
2120    /// This call will not return until the DNS servers have been
2121    /// successfully updated in netcfg.
2122    Remove { network_id: u32, responder: NetworkRegistryRemoveResponder },
2123}
2124
2125impl NetworkRegistryRequest {
2126    #[allow(irrefutable_let_patterns)]
2127    pub fn into_set_default(
2128        self,
2129    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, NetworkRegistrySetDefaultResponder)>
2130    {
2131        if let NetworkRegistryRequest::SetDefault { network_id, responder } = self {
2132            Some((network_id, responder))
2133        } else {
2134            None
2135        }
2136    }
2137
2138    #[allow(irrefutable_let_patterns)]
2139    pub fn into_add(self) -> Option<(Network, NetworkRegistryAddResponder)> {
2140        if let NetworkRegistryRequest::Add { network, responder } = self {
2141            Some((network, responder))
2142        } else {
2143            None
2144        }
2145    }
2146
2147    #[allow(irrefutable_let_patterns)]
2148    pub fn into_update(self) -> Option<(Network, NetworkRegistryUpdateResponder)> {
2149        if let NetworkRegistryRequest::Update { network, responder } = self {
2150            Some((network, responder))
2151        } else {
2152            None
2153        }
2154    }
2155
2156    #[allow(irrefutable_let_patterns)]
2157    pub fn into_remove(self) -> Option<(u32, NetworkRegistryRemoveResponder)> {
2158        if let NetworkRegistryRequest::Remove { network_id, responder } = self {
2159            Some((network_id, responder))
2160        } else {
2161            None
2162        }
2163    }
2164
2165    /// Name of the method defined in FIDL
2166    pub fn method_name(&self) -> &'static str {
2167        match *self {
2168            NetworkRegistryRequest::SetDefault { .. } => "set_default",
2169            NetworkRegistryRequest::Add { .. } => "add",
2170            NetworkRegistryRequest::Update { .. } => "update",
2171            NetworkRegistryRequest::Remove { .. } => "remove",
2172        }
2173    }
2174}
2175
2176#[derive(Debug, Clone)]
2177pub struct NetworkRegistryControlHandle {
2178    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2179}
2180
2181impl fidl::endpoints::ControlHandle for NetworkRegistryControlHandle {
2182    fn shutdown(&self) {
2183        self.inner.shutdown()
2184    }
2185
2186    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2187        self.inner.shutdown_with_epitaph(status)
2188    }
2189
2190    fn is_closed(&self) -> bool {
2191        self.inner.channel().is_closed()
2192    }
2193    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2194        self.inner.channel().on_closed()
2195    }
2196
2197    #[cfg(target_os = "fuchsia")]
2198    fn signal_peer(
2199        &self,
2200        clear_mask: zx::Signals,
2201        set_mask: zx::Signals,
2202    ) -> Result<(), zx_status::Status> {
2203        use fidl::Peered;
2204        self.inner.channel().signal_peer(clear_mask, set_mask)
2205    }
2206}
2207
2208impl NetworkRegistryControlHandle {}
2209
2210#[must_use = "FIDL methods require a response to be sent"]
2211#[derive(Debug)]
2212pub struct NetworkRegistrySetDefaultResponder {
2213    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2214    tx_id: u32,
2215}
2216
2217/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2218/// if the responder is dropped without sending a response, so that the client
2219/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2220impl std::ops::Drop for NetworkRegistrySetDefaultResponder {
2221    fn drop(&mut self) {
2222        self.control_handle.shutdown();
2223        // Safety: drops once, never accessed again
2224        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2225    }
2226}
2227
2228impl fidl::endpoints::Responder for NetworkRegistrySetDefaultResponder {
2229    type ControlHandle = NetworkRegistryControlHandle;
2230
2231    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2232        &self.control_handle
2233    }
2234
2235    fn drop_without_shutdown(mut self) {
2236        // Safety: drops once, never accessed again due to mem::forget
2237        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2238        // Prevent Drop from running (which would shut down the channel)
2239        std::mem::forget(self);
2240    }
2241}
2242
2243impl NetworkRegistrySetDefaultResponder {
2244    /// Sends a response to the FIDL transaction.
2245    ///
2246    /// Sets the channel to shutdown if an error occurs.
2247    pub fn send(
2248        self,
2249        mut result: Result<(), NetworkRegistrySetDefaultError>,
2250    ) -> Result<(), fidl::Error> {
2251        let _result = self.send_raw(result);
2252        if _result.is_err() {
2253            self.control_handle.shutdown();
2254        }
2255        self.drop_without_shutdown();
2256        _result
2257    }
2258
2259    /// Similar to "send" but does not shutdown the channel if an error occurs.
2260    pub fn send_no_shutdown_on_err(
2261        self,
2262        mut result: Result<(), NetworkRegistrySetDefaultError>,
2263    ) -> Result<(), fidl::Error> {
2264        let _result = self.send_raw(result);
2265        self.drop_without_shutdown();
2266        _result
2267    }
2268
2269    fn send_raw(
2270        &self,
2271        mut result: Result<(), NetworkRegistrySetDefaultError>,
2272    ) -> Result<(), fidl::Error> {
2273        self.control_handle.inner.send::<fidl::encoding::ResultType<
2274            fidl::encoding::EmptyStruct,
2275            NetworkRegistrySetDefaultError,
2276        >>(
2277            result,
2278            self.tx_id,
2279            0x787930c67b8cf82c,
2280            fidl::encoding::DynamicFlags::empty(),
2281        )
2282    }
2283}
2284
2285#[must_use = "FIDL methods require a response to be sent"]
2286#[derive(Debug)]
2287pub struct NetworkRegistryAddResponder {
2288    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2289    tx_id: u32,
2290}
2291
2292/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2293/// if the responder is dropped without sending a response, so that the client
2294/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2295impl std::ops::Drop for NetworkRegistryAddResponder {
2296    fn drop(&mut self) {
2297        self.control_handle.shutdown();
2298        // Safety: drops once, never accessed again
2299        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2300    }
2301}
2302
2303impl fidl::endpoints::Responder for NetworkRegistryAddResponder {
2304    type ControlHandle = NetworkRegistryControlHandle;
2305
2306    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2307        &self.control_handle
2308    }
2309
2310    fn drop_without_shutdown(mut self) {
2311        // Safety: drops once, never accessed again due to mem::forget
2312        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2313        // Prevent Drop from running (which would shut down the channel)
2314        std::mem::forget(self);
2315    }
2316}
2317
2318impl NetworkRegistryAddResponder {
2319    /// Sends a response to the FIDL transaction.
2320    ///
2321    /// Sets the channel to shutdown if an error occurs.
2322    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
2323        let _result = self.send_raw(result);
2324        if _result.is_err() {
2325            self.control_handle.shutdown();
2326        }
2327        self.drop_without_shutdown();
2328        _result
2329    }
2330
2331    /// Similar to "send" but does not shutdown the channel if an error occurs.
2332    pub fn send_no_shutdown_on_err(
2333        self,
2334        mut result: Result<(), NetworkRegistryAddError>,
2335    ) -> Result<(), fidl::Error> {
2336        let _result = self.send_raw(result);
2337        self.drop_without_shutdown();
2338        _result
2339    }
2340
2341    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
2342        self.control_handle.inner.send::<fidl::encoding::ResultType<
2343            fidl::encoding::EmptyStruct,
2344            NetworkRegistryAddError,
2345        >>(
2346            result,
2347            self.tx_id,
2348            0x197e70a1cbeab3ad,
2349            fidl::encoding::DynamicFlags::empty(),
2350        )
2351    }
2352}
2353
2354#[must_use = "FIDL methods require a response to be sent"]
2355#[derive(Debug)]
2356pub struct NetworkRegistryUpdateResponder {
2357    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2358    tx_id: u32,
2359}
2360
2361/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2362/// if the responder is dropped without sending a response, so that the client
2363/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2364impl std::ops::Drop for NetworkRegistryUpdateResponder {
2365    fn drop(&mut self) {
2366        self.control_handle.shutdown();
2367        // Safety: drops once, never accessed again
2368        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2369    }
2370}
2371
2372impl fidl::endpoints::Responder for NetworkRegistryUpdateResponder {
2373    type ControlHandle = NetworkRegistryControlHandle;
2374
2375    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2376        &self.control_handle
2377    }
2378
2379    fn drop_without_shutdown(mut self) {
2380        // Safety: drops once, never accessed again due to mem::forget
2381        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2382        // Prevent Drop from running (which would shut down the channel)
2383        std::mem::forget(self);
2384    }
2385}
2386
2387impl NetworkRegistryUpdateResponder {
2388    /// Sends a response to the FIDL transaction.
2389    ///
2390    /// Sets the channel to shutdown if an error occurs.
2391    pub fn send(
2392        self,
2393        mut result: Result<(), NetworkRegistryUpdateError>,
2394    ) -> Result<(), fidl::Error> {
2395        let _result = self.send_raw(result);
2396        if _result.is_err() {
2397            self.control_handle.shutdown();
2398        }
2399        self.drop_without_shutdown();
2400        _result
2401    }
2402
2403    /// Similar to "send" but does not shutdown the channel if an error occurs.
2404    pub fn send_no_shutdown_on_err(
2405        self,
2406        mut result: Result<(), NetworkRegistryUpdateError>,
2407    ) -> Result<(), fidl::Error> {
2408        let _result = self.send_raw(result);
2409        self.drop_without_shutdown();
2410        _result
2411    }
2412
2413    fn send_raw(
2414        &self,
2415        mut result: Result<(), NetworkRegistryUpdateError>,
2416    ) -> Result<(), fidl::Error> {
2417        self.control_handle.inner.send::<fidl::encoding::ResultType<
2418            fidl::encoding::EmptyStruct,
2419            NetworkRegistryUpdateError,
2420        >>(
2421            result,
2422            self.tx_id,
2423            0x3bc790ae5418ff0e,
2424            fidl::encoding::DynamicFlags::empty(),
2425        )
2426    }
2427}
2428
2429#[must_use = "FIDL methods require a response to be sent"]
2430#[derive(Debug)]
2431pub struct NetworkRegistryRemoveResponder {
2432    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
2433    tx_id: u32,
2434}
2435
2436/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
2437/// if the responder is dropped without sending a response, so that the client
2438/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2439impl std::ops::Drop for NetworkRegistryRemoveResponder {
2440    fn drop(&mut self) {
2441        self.control_handle.shutdown();
2442        // Safety: drops once, never accessed again
2443        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2444    }
2445}
2446
2447impl fidl::endpoints::Responder for NetworkRegistryRemoveResponder {
2448    type ControlHandle = NetworkRegistryControlHandle;
2449
2450    fn control_handle(&self) -> &NetworkRegistryControlHandle {
2451        &self.control_handle
2452    }
2453
2454    fn drop_without_shutdown(mut self) {
2455        // Safety: drops once, never accessed again due to mem::forget
2456        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2457        // Prevent Drop from running (which would shut down the channel)
2458        std::mem::forget(self);
2459    }
2460}
2461
2462impl NetworkRegistryRemoveResponder {
2463    /// Sends a response to the FIDL transaction.
2464    ///
2465    /// Sets the channel to shutdown if an error occurs.
2466    pub fn send(
2467        self,
2468        mut result: Result<(), NetworkRegistryRemoveError>,
2469    ) -> Result<(), fidl::Error> {
2470        let _result = self.send_raw(result);
2471        if _result.is_err() {
2472            self.control_handle.shutdown();
2473        }
2474        self.drop_without_shutdown();
2475        _result
2476    }
2477
2478    /// Similar to "send" but does not shutdown the channel if an error occurs.
2479    pub fn send_no_shutdown_on_err(
2480        self,
2481        mut result: Result<(), NetworkRegistryRemoveError>,
2482    ) -> Result<(), fidl::Error> {
2483        let _result = self.send_raw(result);
2484        self.drop_without_shutdown();
2485        _result
2486    }
2487
2488    fn send_raw(
2489        &self,
2490        mut result: Result<(), NetworkRegistryRemoveError>,
2491    ) -> Result<(), fidl::Error> {
2492        self.control_handle.inner.send::<fidl::encoding::ResultType<
2493            fidl::encoding::EmptyStruct,
2494            NetworkRegistryRemoveError,
2495        >>(
2496            result,
2497            self.tx_id,
2498            0x1302df41dca6379e,
2499            fidl::encoding::DynamicFlags::empty(),
2500        )
2501    }
2502}
2503
2504#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2505pub struct StarnixNetworksMarker;
2506
2507impl fidl::endpoints::ProtocolMarker for StarnixNetworksMarker {
2508    type Proxy = StarnixNetworksProxy;
2509    type RequestStream = StarnixNetworksRequestStream;
2510    #[cfg(target_os = "fuchsia")]
2511    type SynchronousProxy = StarnixNetworksSynchronousProxy;
2512
2513    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.StarnixNetworks";
2514}
2515impl fidl::endpoints::DiscoverableProtocolMarker for StarnixNetworksMarker {}
2516
2517pub trait StarnixNetworksProxyInterface: Send + Sync {
2518    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
2519        + Send;
2520    fn r#set_default(
2521        &self,
2522        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
2523    ) -> Self::SetDefaultResponseFut;
2524    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
2525        + Send;
2526    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
2527    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
2528        + Send;
2529    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
2530    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
2531        + Send;
2532    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
2533}
2534#[derive(Debug)]
2535#[cfg(target_os = "fuchsia")]
2536pub struct StarnixNetworksSynchronousProxy {
2537    client: fidl::client::sync::Client,
2538}
2539
2540#[cfg(target_os = "fuchsia")]
2541impl fidl::endpoints::SynchronousProxy for StarnixNetworksSynchronousProxy {
2542    type Proxy = StarnixNetworksProxy;
2543    type Protocol = StarnixNetworksMarker;
2544
2545    fn from_channel(inner: fidl::Channel) -> Self {
2546        Self::new(inner)
2547    }
2548
2549    fn into_channel(self) -> fidl::Channel {
2550        self.client.into_channel()
2551    }
2552
2553    fn as_channel(&self) -> &fidl::Channel {
2554        self.client.as_channel()
2555    }
2556}
2557
2558#[cfg(target_os = "fuchsia")]
2559impl StarnixNetworksSynchronousProxy {
2560    pub fn new(channel: fidl::Channel) -> Self {
2561        Self { client: fidl::client::sync::Client::new(channel) }
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::<StarnixNetworksMarker>(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            >, StarnixNetworksMarker>(
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            >, StarnixNetworksMarker>(
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            >, StarnixNetworksMarker>(
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            >, StarnixNetworksMarker>(
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}