fidl_fuchsia_net_policy_socketproxy/
fidl_fuchsia_net_policy_socketproxy.rs

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