fidl_fuchsia_net_policy_socketproxy/
fidl_fuchsia_net_policy_socketproxy.rs

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