Skip to main content

fidl_fuchsia_net_policy_socketproxy/
fidl_fuchsia_net_policy_socketproxy.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_net_policy_socketproxy_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
15pub struct NetworkRegistryMarker;
16
17impl fidl::endpoints::ProtocolMarker for NetworkRegistryMarker {
18    type Proxy = NetworkRegistryProxy;
19    type RequestStream = NetworkRegistryRequestStream;
20    #[cfg(target_os = "fuchsia")]
21    type SynchronousProxy = NetworkRegistrySynchronousProxy;
22
23    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.NetworkRegistry";
24}
25impl fidl::endpoints::DiscoverableProtocolMarker for NetworkRegistryMarker {}
26pub type NetworkRegistrySetDefaultResult = Result<(), NetworkRegistrySetDefaultError>;
27pub type NetworkRegistryAddResult = Result<(), NetworkRegistryAddError>;
28pub type NetworkRegistryUpdateResult = Result<(), NetworkRegistryUpdateError>;
29pub type NetworkRegistryRemoveResult = Result<(), NetworkRegistryRemoveError>;
30
31pub trait NetworkRegistryProxyInterface: Send + Sync {
32    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
33        + Send;
34    fn r#set_default(
35        &self,
36        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
37    ) -> Self::SetDefaultResponseFut;
38    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
39        + Send;
40    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
41    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
42        + Send;
43    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
44    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
45        + Send;
46    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
47}
48#[derive(Debug)]
49#[cfg(target_os = "fuchsia")]
50pub struct NetworkRegistrySynchronousProxy {
51    client: fidl::client::sync::Client,
52}
53
54#[cfg(target_os = "fuchsia")]
55impl fidl::endpoints::SynchronousProxy for NetworkRegistrySynchronousProxy {
56    type Proxy = NetworkRegistryProxy;
57    type Protocol = NetworkRegistryMarker;
58
59    fn from_channel(inner: fidl::Channel) -> Self {
60        Self::new(inner)
61    }
62
63    fn into_channel(self) -> fidl::Channel {
64        self.client.into_channel()
65    }
66
67    fn as_channel(&self) -> &fidl::Channel {
68        self.client.as_channel()
69    }
70}
71
72#[cfg(target_os = "fuchsia")]
73impl NetworkRegistrySynchronousProxy {
74    pub fn new(channel: fidl::Channel) -> Self {
75        Self { client: fidl::client::sync::Client::new(channel) }
76    }
77
78    pub fn into_channel(self) -> fidl::Channel {
79        self.client.into_channel()
80    }
81
82    /// Waits until an event arrives and returns it. It is safe for other
83    /// threads to make concurrent requests while waiting for an event.
84    pub fn wait_for_event(
85        &self,
86        deadline: zx::MonotonicInstant,
87    ) -> Result<NetworkRegistryEvent, fidl::Error> {
88        NetworkRegistryEvent::decode(self.client.wait_for_event::<NetworkRegistryMarker>(deadline)?)
89    }
90
91    /// Sets the default network.
92    ///
93    /// The network must have previously been registered by a call to `Add`.
94    pub fn r#set_default(
95        &self,
96        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
97        ___deadline: zx::MonotonicInstant,
98    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
99        let _response =
100            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
101                fidl::encoding::EmptyStruct,
102                NetworkRegistrySetDefaultError,
103            >, NetworkRegistryMarker>(
104                (network_id,),
105                0x787930c67b8cf82c,
106                fidl::encoding::DynamicFlags::empty(),
107                ___deadline,
108            )?;
109        Ok(_response.map(|x| x))
110    }
111
112    /// Add a new network.
113    ///
114    /// This call will not return until the DNS servers have been successfully
115    /// updated in netcfg.
116    pub fn r#add(
117        &self,
118        mut network: &Network,
119        ___deadline: zx::MonotonicInstant,
120    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
121        let _response =
122            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
123                fidl::encoding::EmptyStruct,
124                NetworkRegistryAddError,
125            >, NetworkRegistryMarker>(
126                (network,),
127                0x197e70a1cbeab3ad,
128                fidl::encoding::DynamicFlags::empty(),
129                ___deadline,
130            )?;
131        Ok(_response.map(|x| x))
132    }
133
134    /// Update a previously Added network.
135    ///
136    /// This call will not return until the DNS servers have been
137    /// successfully updated in netcfg.
138    pub fn r#update(
139        &self,
140        mut network: &Network,
141        ___deadline: zx::MonotonicInstant,
142    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
143        let _response =
144            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
145                fidl::encoding::EmptyStruct,
146                NetworkRegistryUpdateError,
147            >, NetworkRegistryMarker>(
148                (network,),
149                0x3bc790ae5418ff0e,
150                fidl::encoding::DynamicFlags::empty(),
151                ___deadline,
152            )?;
153        Ok(_response.map(|x| x))
154    }
155
156    /// Remove a previously Added network.
157    ///
158    /// This call will not return until the DNS servers have been
159    /// successfully updated in netcfg.
160    pub fn r#remove(
161        &self,
162        mut network_id: u32,
163        ___deadline: zx::MonotonicInstant,
164    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
165        let _response =
166            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
167                fidl::encoding::EmptyStruct,
168                NetworkRegistryRemoveError,
169            >, NetworkRegistryMarker>(
170                (network_id,),
171                0x1302df41dca6379e,
172                fidl::encoding::DynamicFlags::empty(),
173                ___deadline,
174            )?;
175        Ok(_response.map(|x| x))
176    }
177}
178
179#[cfg(target_os = "fuchsia")]
180impl From<NetworkRegistrySynchronousProxy> for zx::NullableHandle {
181    fn from(value: NetworkRegistrySynchronousProxy) -> Self {
182        value.into_channel().into()
183    }
184}
185
186#[cfg(target_os = "fuchsia")]
187impl From<fidl::Channel> for NetworkRegistrySynchronousProxy {
188    fn from(value: fidl::Channel) -> Self {
189        Self::new(value)
190    }
191}
192
193#[cfg(target_os = "fuchsia")]
194impl fidl::endpoints::FromClient for NetworkRegistrySynchronousProxy {
195    type Protocol = NetworkRegistryMarker;
196
197    fn from_client(value: fidl::endpoints::ClientEnd<NetworkRegistryMarker>) -> Self {
198        Self::new(value.into_channel())
199    }
200}
201
202#[derive(Debug, Clone)]
203pub struct NetworkRegistryProxy {
204    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
205}
206
207impl fidl::endpoints::Proxy for NetworkRegistryProxy {
208    type Protocol = NetworkRegistryMarker;
209
210    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
211        Self::new(inner)
212    }
213
214    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
215        self.client.into_channel().map_err(|client| Self { client })
216    }
217
218    fn as_channel(&self) -> &::fidl::AsyncChannel {
219        self.client.as_channel()
220    }
221}
222
223impl NetworkRegistryProxy {
224    /// Create a new Proxy for fuchsia.net.policy.socketproxy/NetworkRegistry.
225    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
226        let protocol_name = <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
227        Self { client: fidl::client::Client::new(channel, protocol_name) }
228    }
229
230    /// Get a Stream of events from the remote end of the protocol.
231    ///
232    /// # Panics
233    ///
234    /// Panics if the event stream was already taken.
235    pub fn take_event_stream(&self) -> NetworkRegistryEventStream {
236        NetworkRegistryEventStream { event_receiver: self.client.take_event_receiver() }
237    }
238
239    /// Sets the default network.
240    ///
241    /// The network must have previously been registered by a call to `Add`.
242    pub fn r#set_default(
243        &self,
244        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
245    ) -> fidl::client::QueryResponseFut<
246        NetworkRegistrySetDefaultResult,
247        fidl::encoding::DefaultFuchsiaResourceDialect,
248    > {
249        NetworkRegistryProxyInterface::r#set_default(self, network_id)
250    }
251
252    /// Add a new network.
253    ///
254    /// This call will not return until the DNS servers have been successfully
255    /// updated in netcfg.
256    pub fn r#add(
257        &self,
258        mut network: &Network,
259    ) -> fidl::client::QueryResponseFut<
260        NetworkRegistryAddResult,
261        fidl::encoding::DefaultFuchsiaResourceDialect,
262    > {
263        NetworkRegistryProxyInterface::r#add(self, network)
264    }
265
266    /// Update a previously Added network.
267    ///
268    /// This call will not return until the DNS servers have been
269    /// successfully updated in netcfg.
270    pub fn r#update(
271        &self,
272        mut network: &Network,
273    ) -> fidl::client::QueryResponseFut<
274        NetworkRegistryUpdateResult,
275        fidl::encoding::DefaultFuchsiaResourceDialect,
276    > {
277        NetworkRegistryProxyInterface::r#update(self, network)
278    }
279
280    /// Remove a previously Added network.
281    ///
282    /// This call will not return until the DNS servers have been
283    /// successfully updated in netcfg.
284    pub fn r#remove(
285        &self,
286        mut network_id: u32,
287    ) -> fidl::client::QueryResponseFut<
288        NetworkRegistryRemoveResult,
289        fidl::encoding::DefaultFuchsiaResourceDialect,
290    > {
291        NetworkRegistryProxyInterface::r#remove(self, network_id)
292    }
293}
294
295impl NetworkRegistryProxyInterface for NetworkRegistryProxy {
296    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
297        NetworkRegistrySetDefaultResult,
298        fidl::encoding::DefaultFuchsiaResourceDialect,
299    >;
300    fn r#set_default(
301        &self,
302        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
303    ) -> Self::SetDefaultResponseFut {
304        fn _decode(
305            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
306        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
307            let _response = fidl::client::decode_transaction_body::<
308                fidl::encoding::ResultType<
309                    fidl::encoding::EmptyStruct,
310                    NetworkRegistrySetDefaultError,
311                >,
312                fidl::encoding::DefaultFuchsiaResourceDialect,
313                0x787930c67b8cf82c,
314            >(_buf?)?;
315            Ok(_response.map(|x| x))
316        }
317        self.client.send_query_and_decode::<
318            NetworkRegistrySetDefaultRequest,
319            NetworkRegistrySetDefaultResult,
320        >(
321            (network_id,),
322            0x787930c67b8cf82c,
323            fidl::encoding::DynamicFlags::empty(),
324            _decode,
325        )
326    }
327
328    type AddResponseFut = fidl::client::QueryResponseFut<
329        NetworkRegistryAddResult,
330        fidl::encoding::DefaultFuchsiaResourceDialect,
331    >;
332    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
333        fn _decode(
334            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
335        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
336            let _response = fidl::client::decode_transaction_body::<
337                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
338                fidl::encoding::DefaultFuchsiaResourceDialect,
339                0x197e70a1cbeab3ad,
340            >(_buf?)?;
341            Ok(_response.map(|x| x))
342        }
343        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
344            (network,),
345            0x197e70a1cbeab3ad,
346            fidl::encoding::DynamicFlags::empty(),
347            _decode,
348        )
349    }
350
351    type UpdateResponseFut = fidl::client::QueryResponseFut<
352        NetworkRegistryUpdateResult,
353        fidl::encoding::DefaultFuchsiaResourceDialect,
354    >;
355    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
356        fn _decode(
357            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
358        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
359            let _response = fidl::client::decode_transaction_body::<
360                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
361                fidl::encoding::DefaultFuchsiaResourceDialect,
362                0x3bc790ae5418ff0e,
363            >(_buf?)?;
364            Ok(_response.map(|x| x))
365        }
366        self.client
367            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
368                (network,),
369                0x3bc790ae5418ff0e,
370                fidl::encoding::DynamicFlags::empty(),
371                _decode,
372            )
373    }
374
375    type RemoveResponseFut = fidl::client::QueryResponseFut<
376        NetworkRegistryRemoveResult,
377        fidl::encoding::DefaultFuchsiaResourceDialect,
378    >;
379    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
380        fn _decode(
381            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
382        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
383            let _response = fidl::client::decode_transaction_body::<
384                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
385                fidl::encoding::DefaultFuchsiaResourceDialect,
386                0x1302df41dca6379e,
387            >(_buf?)?;
388            Ok(_response.map(|x| x))
389        }
390        self.client
391            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
392                (network_id,),
393                0x1302df41dca6379e,
394                fidl::encoding::DynamicFlags::empty(),
395                _decode,
396            )
397    }
398}
399
400pub struct NetworkRegistryEventStream {
401    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
402}
403
404impl std::marker::Unpin for NetworkRegistryEventStream {}
405
406impl futures::stream::FusedStream for NetworkRegistryEventStream {
407    fn is_terminated(&self) -> bool {
408        self.event_receiver.is_terminated()
409    }
410}
411
412impl futures::Stream for NetworkRegistryEventStream {
413    type Item = Result<NetworkRegistryEvent, fidl::Error>;
414
415    fn poll_next(
416        mut self: std::pin::Pin<&mut Self>,
417        cx: &mut std::task::Context<'_>,
418    ) -> std::task::Poll<Option<Self::Item>> {
419        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
420            &mut self.event_receiver,
421            cx
422        )?) {
423            Some(buf) => std::task::Poll::Ready(Some(NetworkRegistryEvent::decode(buf))),
424            None => std::task::Poll::Ready(None),
425        }
426    }
427}
428
429#[derive(Debug)]
430pub enum NetworkRegistryEvent {}
431
432impl NetworkRegistryEvent {
433    /// Decodes a message buffer as a [`NetworkRegistryEvent`].
434    fn decode(
435        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
436    ) -> Result<NetworkRegistryEvent, fidl::Error> {
437        let (bytes, _handles) = buf.split_mut();
438        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
439        debug_assert_eq!(tx_header.tx_id, 0);
440        match tx_header.ordinal {
441            _ => Err(fidl::Error::UnknownOrdinal {
442                ordinal: tx_header.ordinal,
443                protocol_name:
444                    <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
445            }),
446        }
447    }
448}
449
450/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/NetworkRegistry.
451pub struct NetworkRegistryRequestStream {
452    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
453    is_terminated: bool,
454}
455
456impl std::marker::Unpin for NetworkRegistryRequestStream {}
457
458impl futures::stream::FusedStream for NetworkRegistryRequestStream {
459    fn is_terminated(&self) -> bool {
460        self.is_terminated
461    }
462}
463
464impl fidl::endpoints::RequestStream for NetworkRegistryRequestStream {
465    type Protocol = NetworkRegistryMarker;
466    type ControlHandle = NetworkRegistryControlHandle;
467
468    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
469        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
470    }
471
472    fn control_handle(&self) -> Self::ControlHandle {
473        NetworkRegistryControlHandle { inner: self.inner.clone() }
474    }
475
476    fn into_inner(
477        self,
478    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
479    {
480        (self.inner, self.is_terminated)
481    }
482
483    fn from_inner(
484        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
485        is_terminated: bool,
486    ) -> Self {
487        Self { inner, is_terminated }
488    }
489}
490
491impl futures::Stream for NetworkRegistryRequestStream {
492    type Item = Result<NetworkRegistryRequest, fidl::Error>;
493
494    fn poll_next(
495        mut self: std::pin::Pin<&mut Self>,
496        cx: &mut std::task::Context<'_>,
497    ) -> std::task::Poll<Option<Self::Item>> {
498        let this = &mut *self;
499        if this.inner.check_shutdown(cx) {
500            this.is_terminated = true;
501            return std::task::Poll::Ready(None);
502        }
503        if this.is_terminated {
504            panic!("polled NetworkRegistryRequestStream after completion");
505        }
506        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
507            |bytes, handles| {
508                match this.inner.channel().read_etc(cx, bytes, handles) {
509                    std::task::Poll::Ready(Ok(())) => {}
510                    std::task::Poll::Pending => return std::task::Poll::Pending,
511                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
512                        this.is_terminated = true;
513                        return std::task::Poll::Ready(None);
514                    }
515                    std::task::Poll::Ready(Err(e)) => {
516                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
517                            e.into(),
518                        ))));
519                    }
520                }
521
522                // A message has been received from the channel
523                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
524
525                std::task::Poll::Ready(Some(match header.ordinal {
526                    0x787930c67b8cf82c => {
527                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
528                        let mut req = fidl::new_empty!(
529                            NetworkRegistrySetDefaultRequest,
530                            fidl::encoding::DefaultFuchsiaResourceDialect
531                        );
532                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
533                        let control_handle =
534                            NetworkRegistryControlHandle { inner: this.inner.clone() };
535                        Ok(NetworkRegistryRequest::SetDefault {
536                            network_id: req.network_id,
537
538                            responder: NetworkRegistrySetDefaultResponder {
539                                control_handle: std::mem::ManuallyDrop::new(control_handle),
540                                tx_id: header.tx_id,
541                            },
542                        })
543                    }
544                    0x197e70a1cbeab3ad => {
545                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
546                        let mut req = fidl::new_empty!(
547                            NetworkRegistryAddRequest,
548                            fidl::encoding::DefaultFuchsiaResourceDialect
549                        );
550                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
551                        let control_handle =
552                            NetworkRegistryControlHandle { inner: this.inner.clone() };
553                        Ok(NetworkRegistryRequest::Add {
554                            network: req.network,
555
556                            responder: NetworkRegistryAddResponder {
557                                control_handle: std::mem::ManuallyDrop::new(control_handle),
558                                tx_id: header.tx_id,
559                            },
560                        })
561                    }
562                    0x3bc790ae5418ff0e => {
563                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
564                        let mut req = fidl::new_empty!(
565                            NetworkRegistryUpdateRequest,
566                            fidl::encoding::DefaultFuchsiaResourceDialect
567                        );
568                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
569                        let control_handle =
570                            NetworkRegistryControlHandle { inner: this.inner.clone() };
571                        Ok(NetworkRegistryRequest::Update {
572                            network: req.network,
573
574                            responder: NetworkRegistryUpdateResponder {
575                                control_handle: std::mem::ManuallyDrop::new(control_handle),
576                                tx_id: header.tx_id,
577                            },
578                        })
579                    }
580                    0x1302df41dca6379e => {
581                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
582                        let mut req = fidl::new_empty!(
583                            NetworkRegistryRemoveRequest,
584                            fidl::encoding::DefaultFuchsiaResourceDialect
585                        );
586                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
587                        let control_handle =
588                            NetworkRegistryControlHandle { inner: this.inner.clone() };
589                        Ok(NetworkRegistryRequest::Remove {
590                            network_id: req.network_id,
591
592                            responder: NetworkRegistryRemoveResponder {
593                                control_handle: std::mem::ManuallyDrop::new(control_handle),
594                                tx_id: header.tx_id,
595                            },
596                        })
597                    }
598                    _ => Err(fidl::Error::UnknownOrdinal {
599                        ordinal: header.ordinal,
600                        protocol_name:
601                            <NetworkRegistryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
602                    }),
603                }))
604            },
605        )
606    }
607}
608
609#[derive(Debug)]
610pub enum NetworkRegistryRequest {
611    /// Sets the default network.
612    ///
613    /// The network must have previously been registered by a call to `Add`.
614    SetDefault {
615        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
616        responder: NetworkRegistrySetDefaultResponder,
617    },
618    /// Add a new network.
619    ///
620    /// This call will not return until the DNS servers have been successfully
621    /// updated in netcfg.
622    Add { network: Network, responder: NetworkRegistryAddResponder },
623    /// Update a previously Added network.
624    ///
625    /// This call will not return until the DNS servers have been
626    /// successfully updated in netcfg.
627    Update { network: Network, responder: NetworkRegistryUpdateResponder },
628    /// Remove a previously Added network.
629    ///
630    /// This call will not return until the DNS servers have been
631    /// successfully updated in netcfg.
632    Remove { network_id: u32, responder: NetworkRegistryRemoveResponder },
633}
634
635impl NetworkRegistryRequest {
636    #[allow(irrefutable_let_patterns)]
637    pub fn into_set_default(
638        self,
639    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, NetworkRegistrySetDefaultResponder)>
640    {
641        if let NetworkRegistryRequest::SetDefault { network_id, responder } = self {
642            Some((network_id, responder))
643        } else {
644            None
645        }
646    }
647
648    #[allow(irrefutable_let_patterns)]
649    pub fn into_add(self) -> Option<(Network, NetworkRegistryAddResponder)> {
650        if let NetworkRegistryRequest::Add { network, responder } = self {
651            Some((network, responder))
652        } else {
653            None
654        }
655    }
656
657    #[allow(irrefutable_let_patterns)]
658    pub fn into_update(self) -> Option<(Network, NetworkRegistryUpdateResponder)> {
659        if let NetworkRegistryRequest::Update { network, responder } = self {
660            Some((network, responder))
661        } else {
662            None
663        }
664    }
665
666    #[allow(irrefutable_let_patterns)]
667    pub fn into_remove(self) -> Option<(u32, NetworkRegistryRemoveResponder)> {
668        if let NetworkRegistryRequest::Remove { network_id, responder } = self {
669            Some((network_id, responder))
670        } else {
671            None
672        }
673    }
674
675    /// Name of the method defined in FIDL
676    pub fn method_name(&self) -> &'static str {
677        match *self {
678            NetworkRegistryRequest::SetDefault { .. } => "set_default",
679            NetworkRegistryRequest::Add { .. } => "add",
680            NetworkRegistryRequest::Update { .. } => "update",
681            NetworkRegistryRequest::Remove { .. } => "remove",
682        }
683    }
684}
685
686#[derive(Debug, Clone)]
687pub struct NetworkRegistryControlHandle {
688    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
689}
690
691impl NetworkRegistryControlHandle {
692    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
693        self.inner.shutdown_with_epitaph(status.into())
694    }
695}
696
697impl fidl::endpoints::ControlHandle for NetworkRegistryControlHandle {
698    fn shutdown(&self) {
699        self.inner.shutdown()
700    }
701
702    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
703        self.inner.shutdown_with_epitaph(status)
704    }
705
706    fn is_closed(&self) -> bool {
707        self.inner.channel().is_closed()
708    }
709    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
710        self.inner.channel().on_closed()
711    }
712
713    #[cfg(target_os = "fuchsia")]
714    fn signal_peer(
715        &self,
716        clear_mask: zx::Signals,
717        set_mask: zx::Signals,
718    ) -> Result<(), zx_status::Status> {
719        use fidl::Peered;
720        self.inner.channel().signal_peer(clear_mask, set_mask)
721    }
722}
723
724impl NetworkRegistryControlHandle {}
725
726#[must_use = "FIDL methods require a response to be sent"]
727#[derive(Debug)]
728pub struct NetworkRegistrySetDefaultResponder {
729    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
730    tx_id: u32,
731}
732
733/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
734/// if the responder is dropped without sending a response, so that the client
735/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
736impl std::ops::Drop for NetworkRegistrySetDefaultResponder {
737    fn drop(&mut self) {
738        self.control_handle.shutdown();
739        // Safety: drops once, never accessed again
740        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
741    }
742}
743
744impl fidl::endpoints::Responder for NetworkRegistrySetDefaultResponder {
745    type ControlHandle = NetworkRegistryControlHandle;
746
747    fn control_handle(&self) -> &NetworkRegistryControlHandle {
748        &self.control_handle
749    }
750
751    fn drop_without_shutdown(mut self) {
752        // Safety: drops once, never accessed again due to mem::forget
753        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
754        // Prevent Drop from running (which would shut down the channel)
755        std::mem::forget(self);
756    }
757}
758
759impl NetworkRegistrySetDefaultResponder {
760    /// Sends a response to the FIDL transaction.
761    ///
762    /// Sets the channel to shutdown if an error occurs.
763    pub fn send(
764        self,
765        mut result: Result<(), NetworkRegistrySetDefaultError>,
766    ) -> Result<(), fidl::Error> {
767        let _result = self.send_raw(result);
768        if _result.is_err() {
769            self.control_handle.shutdown();
770        }
771        self.drop_without_shutdown();
772        _result
773    }
774
775    /// Similar to "send" but does not shutdown the channel if an error occurs.
776    pub fn send_no_shutdown_on_err(
777        self,
778        mut result: Result<(), NetworkRegistrySetDefaultError>,
779    ) -> Result<(), fidl::Error> {
780        let _result = self.send_raw(result);
781        self.drop_without_shutdown();
782        _result
783    }
784
785    fn send_raw(
786        &self,
787        mut result: Result<(), NetworkRegistrySetDefaultError>,
788    ) -> Result<(), fidl::Error> {
789        self.control_handle.inner.send::<fidl::encoding::ResultType<
790            fidl::encoding::EmptyStruct,
791            NetworkRegistrySetDefaultError,
792        >>(
793            result,
794            self.tx_id,
795            0x787930c67b8cf82c,
796            fidl::encoding::DynamicFlags::empty(),
797        )
798    }
799}
800
801#[must_use = "FIDL methods require a response to be sent"]
802#[derive(Debug)]
803pub struct NetworkRegistryAddResponder {
804    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
805    tx_id: u32,
806}
807
808/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
809/// if the responder is dropped without sending a response, so that the client
810/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
811impl std::ops::Drop for NetworkRegistryAddResponder {
812    fn drop(&mut self) {
813        self.control_handle.shutdown();
814        // Safety: drops once, never accessed again
815        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
816    }
817}
818
819impl fidl::endpoints::Responder for NetworkRegistryAddResponder {
820    type ControlHandle = NetworkRegistryControlHandle;
821
822    fn control_handle(&self) -> &NetworkRegistryControlHandle {
823        &self.control_handle
824    }
825
826    fn drop_without_shutdown(mut self) {
827        // Safety: drops once, never accessed again due to mem::forget
828        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
829        // Prevent Drop from running (which would shut down the channel)
830        std::mem::forget(self);
831    }
832}
833
834impl NetworkRegistryAddResponder {
835    /// Sends a response to the FIDL transaction.
836    ///
837    /// Sets the channel to shutdown if an error occurs.
838    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
839        let _result = self.send_raw(result);
840        if _result.is_err() {
841            self.control_handle.shutdown();
842        }
843        self.drop_without_shutdown();
844        _result
845    }
846
847    /// Similar to "send" but does not shutdown the channel if an error occurs.
848    pub fn send_no_shutdown_on_err(
849        self,
850        mut result: Result<(), NetworkRegistryAddError>,
851    ) -> Result<(), fidl::Error> {
852        let _result = self.send_raw(result);
853        self.drop_without_shutdown();
854        _result
855    }
856
857    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
858        self.control_handle.inner.send::<fidl::encoding::ResultType<
859            fidl::encoding::EmptyStruct,
860            NetworkRegistryAddError,
861        >>(
862            result,
863            self.tx_id,
864            0x197e70a1cbeab3ad,
865            fidl::encoding::DynamicFlags::empty(),
866        )
867    }
868}
869
870#[must_use = "FIDL methods require a response to be sent"]
871#[derive(Debug)]
872pub struct NetworkRegistryUpdateResponder {
873    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
874    tx_id: u32,
875}
876
877/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
878/// if the responder is dropped without sending a response, so that the client
879/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
880impl std::ops::Drop for NetworkRegistryUpdateResponder {
881    fn drop(&mut self) {
882        self.control_handle.shutdown();
883        // Safety: drops once, never accessed again
884        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
885    }
886}
887
888impl fidl::endpoints::Responder for NetworkRegistryUpdateResponder {
889    type ControlHandle = NetworkRegistryControlHandle;
890
891    fn control_handle(&self) -> &NetworkRegistryControlHandle {
892        &self.control_handle
893    }
894
895    fn drop_without_shutdown(mut self) {
896        // Safety: drops once, never accessed again due to mem::forget
897        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
898        // Prevent Drop from running (which would shut down the channel)
899        std::mem::forget(self);
900    }
901}
902
903impl NetworkRegistryUpdateResponder {
904    /// Sends a response to the FIDL transaction.
905    ///
906    /// Sets the channel to shutdown if an error occurs.
907    pub fn send(
908        self,
909        mut result: Result<(), NetworkRegistryUpdateError>,
910    ) -> Result<(), fidl::Error> {
911        let _result = self.send_raw(result);
912        if _result.is_err() {
913            self.control_handle.shutdown();
914        }
915        self.drop_without_shutdown();
916        _result
917    }
918
919    /// Similar to "send" but does not shutdown the channel if an error occurs.
920    pub fn send_no_shutdown_on_err(
921        self,
922        mut result: Result<(), NetworkRegistryUpdateError>,
923    ) -> Result<(), fidl::Error> {
924        let _result = self.send_raw(result);
925        self.drop_without_shutdown();
926        _result
927    }
928
929    fn send_raw(
930        &self,
931        mut result: Result<(), NetworkRegistryUpdateError>,
932    ) -> Result<(), fidl::Error> {
933        self.control_handle.inner.send::<fidl::encoding::ResultType<
934            fidl::encoding::EmptyStruct,
935            NetworkRegistryUpdateError,
936        >>(
937            result,
938            self.tx_id,
939            0x3bc790ae5418ff0e,
940            fidl::encoding::DynamicFlags::empty(),
941        )
942    }
943}
944
945#[must_use = "FIDL methods require a response to be sent"]
946#[derive(Debug)]
947pub struct NetworkRegistryRemoveResponder {
948    control_handle: std::mem::ManuallyDrop<NetworkRegistryControlHandle>,
949    tx_id: u32,
950}
951
952/// Set the the channel to be shutdown (see [`NetworkRegistryControlHandle::shutdown`])
953/// if the responder is dropped without sending a response, so that the client
954/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
955impl std::ops::Drop for NetworkRegistryRemoveResponder {
956    fn drop(&mut self) {
957        self.control_handle.shutdown();
958        // Safety: drops once, never accessed again
959        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
960    }
961}
962
963impl fidl::endpoints::Responder for NetworkRegistryRemoveResponder {
964    type ControlHandle = NetworkRegistryControlHandle;
965
966    fn control_handle(&self) -> &NetworkRegistryControlHandle {
967        &self.control_handle
968    }
969
970    fn drop_without_shutdown(mut self) {
971        // Safety: drops once, never accessed again due to mem::forget
972        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
973        // Prevent Drop from running (which would shut down the channel)
974        std::mem::forget(self);
975    }
976}
977
978impl NetworkRegistryRemoveResponder {
979    /// Sends a response to the FIDL transaction.
980    ///
981    /// Sets the channel to shutdown if an error occurs.
982    pub fn send(
983        self,
984        mut result: Result<(), NetworkRegistryRemoveError>,
985    ) -> Result<(), fidl::Error> {
986        let _result = self.send_raw(result);
987        if _result.is_err() {
988            self.control_handle.shutdown();
989        }
990        self.drop_without_shutdown();
991        _result
992    }
993
994    /// Similar to "send" but does not shutdown the channel if an error occurs.
995    pub fn send_no_shutdown_on_err(
996        self,
997        mut result: Result<(), NetworkRegistryRemoveError>,
998    ) -> Result<(), fidl::Error> {
999        let _result = self.send_raw(result);
1000        self.drop_without_shutdown();
1001        _result
1002    }
1003
1004    fn send_raw(
1005        &self,
1006        mut result: Result<(), NetworkRegistryRemoveError>,
1007    ) -> Result<(), fidl::Error> {
1008        self.control_handle.inner.send::<fidl::encoding::ResultType<
1009            fidl::encoding::EmptyStruct,
1010            NetworkRegistryRemoveError,
1011        >>(
1012            result,
1013            self.tx_id,
1014            0x1302df41dca6379e,
1015            fidl::encoding::DynamicFlags::empty(),
1016        )
1017    }
1018}
1019
1020#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1021pub struct StarnixNetworksMarker;
1022
1023impl fidl::endpoints::ProtocolMarker for StarnixNetworksMarker {
1024    type Proxy = StarnixNetworksProxy;
1025    type RequestStream = StarnixNetworksRequestStream;
1026    #[cfg(target_os = "fuchsia")]
1027    type SynchronousProxy = StarnixNetworksSynchronousProxy;
1028
1029    const DEBUG_NAME: &'static str = "fuchsia.net.policy.socketproxy.StarnixNetworks";
1030}
1031impl fidl::endpoints::DiscoverableProtocolMarker for StarnixNetworksMarker {}
1032
1033pub trait StarnixNetworksProxyInterface: Send + Sync {
1034    type SetDefaultResponseFut: std::future::Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>
1035        + Send;
1036    fn r#set_default(
1037        &self,
1038        network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1039    ) -> Self::SetDefaultResponseFut;
1040    type AddResponseFut: std::future::Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>
1041        + Send;
1042    fn r#add(&self, network: &Network) -> Self::AddResponseFut;
1043    type UpdateResponseFut: std::future::Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>
1044        + Send;
1045    fn r#update(&self, network: &Network) -> Self::UpdateResponseFut;
1046    type RemoveResponseFut: std::future::Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>
1047        + Send;
1048    fn r#remove(&self, network_id: u32) -> Self::RemoveResponseFut;
1049}
1050#[derive(Debug)]
1051#[cfg(target_os = "fuchsia")]
1052pub struct StarnixNetworksSynchronousProxy {
1053    client: fidl::client::sync::Client,
1054}
1055
1056#[cfg(target_os = "fuchsia")]
1057impl fidl::endpoints::SynchronousProxy for StarnixNetworksSynchronousProxy {
1058    type Proxy = StarnixNetworksProxy;
1059    type Protocol = StarnixNetworksMarker;
1060
1061    fn from_channel(inner: fidl::Channel) -> Self {
1062        Self::new(inner)
1063    }
1064
1065    fn into_channel(self) -> fidl::Channel {
1066        self.client.into_channel()
1067    }
1068
1069    fn as_channel(&self) -> &fidl::Channel {
1070        self.client.as_channel()
1071    }
1072}
1073
1074#[cfg(target_os = "fuchsia")]
1075impl StarnixNetworksSynchronousProxy {
1076    pub fn new(channel: fidl::Channel) -> Self {
1077        Self { client: fidl::client::sync::Client::new(channel) }
1078    }
1079
1080    pub fn into_channel(self) -> fidl::Channel {
1081        self.client.into_channel()
1082    }
1083
1084    /// Waits until an event arrives and returns it. It is safe for other
1085    /// threads to make concurrent requests while waiting for an event.
1086    pub fn wait_for_event(
1087        &self,
1088        deadline: zx::MonotonicInstant,
1089    ) -> Result<StarnixNetworksEvent, fidl::Error> {
1090        StarnixNetworksEvent::decode(self.client.wait_for_event::<StarnixNetworksMarker>(deadline)?)
1091    }
1092
1093    /// Sets the default network.
1094    ///
1095    /// The network must have previously been registered by a call to `Add`.
1096    pub fn r#set_default(
1097        &self,
1098        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1099        ___deadline: zx::MonotonicInstant,
1100    ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
1101        let _response =
1102            self.client.send_query::<NetworkRegistrySetDefaultRequest, fidl::encoding::ResultType<
1103                fidl::encoding::EmptyStruct,
1104                NetworkRegistrySetDefaultError,
1105            >, StarnixNetworksMarker>(
1106                (network_id,),
1107                0x787930c67b8cf82c,
1108                fidl::encoding::DynamicFlags::empty(),
1109                ___deadline,
1110            )?;
1111        Ok(_response.map(|x| x))
1112    }
1113
1114    /// Add a new network.
1115    ///
1116    /// This call will not return until the DNS servers have been successfully
1117    /// updated in netcfg.
1118    pub fn r#add(
1119        &self,
1120        mut network: &Network,
1121        ___deadline: zx::MonotonicInstant,
1122    ) -> Result<NetworkRegistryAddResult, fidl::Error> {
1123        let _response =
1124            self.client.send_query::<NetworkRegistryAddRequest, fidl::encoding::ResultType<
1125                fidl::encoding::EmptyStruct,
1126                NetworkRegistryAddError,
1127            >, StarnixNetworksMarker>(
1128                (network,),
1129                0x197e70a1cbeab3ad,
1130                fidl::encoding::DynamicFlags::empty(),
1131                ___deadline,
1132            )?;
1133        Ok(_response.map(|x| x))
1134    }
1135
1136    /// Update a previously Added network.
1137    ///
1138    /// This call will not return until the DNS servers have been
1139    /// successfully updated in netcfg.
1140    pub fn r#update(
1141        &self,
1142        mut network: &Network,
1143        ___deadline: zx::MonotonicInstant,
1144    ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
1145        let _response =
1146            self.client.send_query::<NetworkRegistryUpdateRequest, fidl::encoding::ResultType<
1147                fidl::encoding::EmptyStruct,
1148                NetworkRegistryUpdateError,
1149            >, StarnixNetworksMarker>(
1150                (network,),
1151                0x3bc790ae5418ff0e,
1152                fidl::encoding::DynamicFlags::empty(),
1153                ___deadline,
1154            )?;
1155        Ok(_response.map(|x| x))
1156    }
1157
1158    /// Remove a previously Added network.
1159    ///
1160    /// This call will not return until the DNS servers have been
1161    /// successfully updated in netcfg.
1162    pub fn r#remove(
1163        &self,
1164        mut network_id: u32,
1165        ___deadline: zx::MonotonicInstant,
1166    ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
1167        let _response =
1168            self.client.send_query::<NetworkRegistryRemoveRequest, fidl::encoding::ResultType<
1169                fidl::encoding::EmptyStruct,
1170                NetworkRegistryRemoveError,
1171            >, StarnixNetworksMarker>(
1172                (network_id,),
1173                0x1302df41dca6379e,
1174                fidl::encoding::DynamicFlags::empty(),
1175                ___deadline,
1176            )?;
1177        Ok(_response.map(|x| x))
1178    }
1179}
1180
1181#[cfg(target_os = "fuchsia")]
1182impl From<StarnixNetworksSynchronousProxy> for zx::NullableHandle {
1183    fn from(value: StarnixNetworksSynchronousProxy) -> Self {
1184        value.into_channel().into()
1185    }
1186}
1187
1188#[cfg(target_os = "fuchsia")]
1189impl From<fidl::Channel> for StarnixNetworksSynchronousProxy {
1190    fn from(value: fidl::Channel) -> Self {
1191        Self::new(value)
1192    }
1193}
1194
1195#[cfg(target_os = "fuchsia")]
1196impl fidl::endpoints::FromClient for StarnixNetworksSynchronousProxy {
1197    type Protocol = StarnixNetworksMarker;
1198
1199    fn from_client(value: fidl::endpoints::ClientEnd<StarnixNetworksMarker>) -> Self {
1200        Self::new(value.into_channel())
1201    }
1202}
1203
1204#[derive(Debug, Clone)]
1205pub struct StarnixNetworksProxy {
1206    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1207}
1208
1209impl fidl::endpoints::Proxy for StarnixNetworksProxy {
1210    type Protocol = StarnixNetworksMarker;
1211
1212    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1213        Self::new(inner)
1214    }
1215
1216    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1217        self.client.into_channel().map_err(|client| Self { client })
1218    }
1219
1220    fn as_channel(&self) -> &::fidl::AsyncChannel {
1221        self.client.as_channel()
1222    }
1223}
1224
1225impl StarnixNetworksProxy {
1226    /// Create a new Proxy for fuchsia.net.policy.socketproxy/StarnixNetworks.
1227    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1228        let protocol_name = <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1229        Self { client: fidl::client::Client::new(channel, protocol_name) }
1230    }
1231
1232    /// Get a Stream of events from the remote end of the protocol.
1233    ///
1234    /// # Panics
1235    ///
1236    /// Panics if the event stream was already taken.
1237    pub fn take_event_stream(&self) -> StarnixNetworksEventStream {
1238        StarnixNetworksEventStream { event_receiver: self.client.take_event_receiver() }
1239    }
1240
1241    /// Sets the default network.
1242    ///
1243    /// The network must have previously been registered by a call to `Add`.
1244    pub fn r#set_default(
1245        &self,
1246        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1247    ) -> fidl::client::QueryResponseFut<
1248        NetworkRegistrySetDefaultResult,
1249        fidl::encoding::DefaultFuchsiaResourceDialect,
1250    > {
1251        StarnixNetworksProxyInterface::r#set_default(self, network_id)
1252    }
1253
1254    /// Add a new network.
1255    ///
1256    /// This call will not return until the DNS servers have been successfully
1257    /// updated in netcfg.
1258    pub fn r#add(
1259        &self,
1260        mut network: &Network,
1261    ) -> fidl::client::QueryResponseFut<
1262        NetworkRegistryAddResult,
1263        fidl::encoding::DefaultFuchsiaResourceDialect,
1264    > {
1265        StarnixNetworksProxyInterface::r#add(self, network)
1266    }
1267
1268    /// Update a previously Added network.
1269    ///
1270    /// This call will not return until the DNS servers have been
1271    /// successfully updated in netcfg.
1272    pub fn r#update(
1273        &self,
1274        mut network: &Network,
1275    ) -> fidl::client::QueryResponseFut<
1276        NetworkRegistryUpdateResult,
1277        fidl::encoding::DefaultFuchsiaResourceDialect,
1278    > {
1279        StarnixNetworksProxyInterface::r#update(self, network)
1280    }
1281
1282    /// Remove a previously Added network.
1283    ///
1284    /// This call will not return until the DNS servers have been
1285    /// successfully updated in netcfg.
1286    pub fn r#remove(
1287        &self,
1288        mut network_id: u32,
1289    ) -> fidl::client::QueryResponseFut<
1290        NetworkRegistryRemoveResult,
1291        fidl::encoding::DefaultFuchsiaResourceDialect,
1292    > {
1293        StarnixNetworksProxyInterface::r#remove(self, network_id)
1294    }
1295}
1296
1297impl StarnixNetworksProxyInterface for StarnixNetworksProxy {
1298    type SetDefaultResponseFut = fidl::client::QueryResponseFut<
1299        NetworkRegistrySetDefaultResult,
1300        fidl::encoding::DefaultFuchsiaResourceDialect,
1301    >;
1302    fn r#set_default(
1303        &self,
1304        mut network_id: &fidl_fuchsia_posix_socket::OptionalUint32,
1305    ) -> Self::SetDefaultResponseFut {
1306        fn _decode(
1307            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1308        ) -> Result<NetworkRegistrySetDefaultResult, fidl::Error> {
1309            let _response = fidl::client::decode_transaction_body::<
1310                fidl::encoding::ResultType<
1311                    fidl::encoding::EmptyStruct,
1312                    NetworkRegistrySetDefaultError,
1313                >,
1314                fidl::encoding::DefaultFuchsiaResourceDialect,
1315                0x787930c67b8cf82c,
1316            >(_buf?)?;
1317            Ok(_response.map(|x| x))
1318        }
1319        self.client.send_query_and_decode::<
1320            NetworkRegistrySetDefaultRequest,
1321            NetworkRegistrySetDefaultResult,
1322        >(
1323            (network_id,),
1324            0x787930c67b8cf82c,
1325            fidl::encoding::DynamicFlags::empty(),
1326            _decode,
1327        )
1328    }
1329
1330    type AddResponseFut = fidl::client::QueryResponseFut<
1331        NetworkRegistryAddResult,
1332        fidl::encoding::DefaultFuchsiaResourceDialect,
1333    >;
1334    fn r#add(&self, mut network: &Network) -> Self::AddResponseFut {
1335        fn _decode(
1336            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1337        ) -> Result<NetworkRegistryAddResult, fidl::Error> {
1338            let _response = fidl::client::decode_transaction_body::<
1339                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryAddError>,
1340                fidl::encoding::DefaultFuchsiaResourceDialect,
1341                0x197e70a1cbeab3ad,
1342            >(_buf?)?;
1343            Ok(_response.map(|x| x))
1344        }
1345        self.client.send_query_and_decode::<NetworkRegistryAddRequest, NetworkRegistryAddResult>(
1346            (network,),
1347            0x197e70a1cbeab3ad,
1348            fidl::encoding::DynamicFlags::empty(),
1349            _decode,
1350        )
1351    }
1352
1353    type UpdateResponseFut = fidl::client::QueryResponseFut<
1354        NetworkRegistryUpdateResult,
1355        fidl::encoding::DefaultFuchsiaResourceDialect,
1356    >;
1357    fn r#update(&self, mut network: &Network) -> Self::UpdateResponseFut {
1358        fn _decode(
1359            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1360        ) -> Result<NetworkRegistryUpdateResult, fidl::Error> {
1361            let _response = fidl::client::decode_transaction_body::<
1362                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryUpdateError>,
1363                fidl::encoding::DefaultFuchsiaResourceDialect,
1364                0x3bc790ae5418ff0e,
1365            >(_buf?)?;
1366            Ok(_response.map(|x| x))
1367        }
1368        self.client
1369            .send_query_and_decode::<NetworkRegistryUpdateRequest, NetworkRegistryUpdateResult>(
1370                (network,),
1371                0x3bc790ae5418ff0e,
1372                fidl::encoding::DynamicFlags::empty(),
1373                _decode,
1374            )
1375    }
1376
1377    type RemoveResponseFut = fidl::client::QueryResponseFut<
1378        NetworkRegistryRemoveResult,
1379        fidl::encoding::DefaultFuchsiaResourceDialect,
1380    >;
1381    fn r#remove(&self, mut network_id: u32) -> Self::RemoveResponseFut {
1382        fn _decode(
1383            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1384        ) -> Result<NetworkRegistryRemoveResult, fidl::Error> {
1385            let _response = fidl::client::decode_transaction_body::<
1386                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, NetworkRegistryRemoveError>,
1387                fidl::encoding::DefaultFuchsiaResourceDialect,
1388                0x1302df41dca6379e,
1389            >(_buf?)?;
1390            Ok(_response.map(|x| x))
1391        }
1392        self.client
1393            .send_query_and_decode::<NetworkRegistryRemoveRequest, NetworkRegistryRemoveResult>(
1394                (network_id,),
1395                0x1302df41dca6379e,
1396                fidl::encoding::DynamicFlags::empty(),
1397                _decode,
1398            )
1399    }
1400}
1401
1402pub struct StarnixNetworksEventStream {
1403    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1404}
1405
1406impl std::marker::Unpin for StarnixNetworksEventStream {}
1407
1408impl futures::stream::FusedStream for StarnixNetworksEventStream {
1409    fn is_terminated(&self) -> bool {
1410        self.event_receiver.is_terminated()
1411    }
1412}
1413
1414impl futures::Stream for StarnixNetworksEventStream {
1415    type Item = Result<StarnixNetworksEvent, fidl::Error>;
1416
1417    fn poll_next(
1418        mut self: std::pin::Pin<&mut Self>,
1419        cx: &mut std::task::Context<'_>,
1420    ) -> std::task::Poll<Option<Self::Item>> {
1421        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1422            &mut self.event_receiver,
1423            cx
1424        )?) {
1425            Some(buf) => std::task::Poll::Ready(Some(StarnixNetworksEvent::decode(buf))),
1426            None => std::task::Poll::Ready(None),
1427        }
1428    }
1429}
1430
1431#[derive(Debug)]
1432pub enum StarnixNetworksEvent {}
1433
1434impl StarnixNetworksEvent {
1435    /// Decodes a message buffer as a [`StarnixNetworksEvent`].
1436    fn decode(
1437        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1438    ) -> Result<StarnixNetworksEvent, fidl::Error> {
1439        let (bytes, _handles) = buf.split_mut();
1440        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1441        debug_assert_eq!(tx_header.tx_id, 0);
1442        match tx_header.ordinal {
1443            _ => Err(fidl::Error::UnknownOrdinal {
1444                ordinal: tx_header.ordinal,
1445                protocol_name:
1446                    <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1447            }),
1448        }
1449    }
1450}
1451
1452/// A Stream of incoming requests for fuchsia.net.policy.socketproxy/StarnixNetworks.
1453pub struct StarnixNetworksRequestStream {
1454    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1455    is_terminated: bool,
1456}
1457
1458impl std::marker::Unpin for StarnixNetworksRequestStream {}
1459
1460impl futures::stream::FusedStream for StarnixNetworksRequestStream {
1461    fn is_terminated(&self) -> bool {
1462        self.is_terminated
1463    }
1464}
1465
1466impl fidl::endpoints::RequestStream for StarnixNetworksRequestStream {
1467    type Protocol = StarnixNetworksMarker;
1468    type ControlHandle = StarnixNetworksControlHandle;
1469
1470    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1471        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1472    }
1473
1474    fn control_handle(&self) -> Self::ControlHandle {
1475        StarnixNetworksControlHandle { inner: self.inner.clone() }
1476    }
1477
1478    fn into_inner(
1479        self,
1480    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1481    {
1482        (self.inner, self.is_terminated)
1483    }
1484
1485    fn from_inner(
1486        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1487        is_terminated: bool,
1488    ) -> Self {
1489        Self { inner, is_terminated }
1490    }
1491}
1492
1493impl futures::Stream for StarnixNetworksRequestStream {
1494    type Item = Result<StarnixNetworksRequest, fidl::Error>;
1495
1496    fn poll_next(
1497        mut self: std::pin::Pin<&mut Self>,
1498        cx: &mut std::task::Context<'_>,
1499    ) -> std::task::Poll<Option<Self::Item>> {
1500        let this = &mut *self;
1501        if this.inner.check_shutdown(cx) {
1502            this.is_terminated = true;
1503            return std::task::Poll::Ready(None);
1504        }
1505        if this.is_terminated {
1506            panic!("polled StarnixNetworksRequestStream after completion");
1507        }
1508        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1509            |bytes, handles| {
1510                match this.inner.channel().read_etc(cx, bytes, handles) {
1511                    std::task::Poll::Ready(Ok(())) => {}
1512                    std::task::Poll::Pending => return std::task::Poll::Pending,
1513                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1514                        this.is_terminated = true;
1515                        return std::task::Poll::Ready(None);
1516                    }
1517                    std::task::Poll::Ready(Err(e)) => {
1518                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1519                            e.into(),
1520                        ))));
1521                    }
1522                }
1523
1524                // A message has been received from the channel
1525                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1526
1527                std::task::Poll::Ready(Some(match header.ordinal {
1528                    0x787930c67b8cf82c => {
1529                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1530                        let mut req = fidl::new_empty!(
1531                            NetworkRegistrySetDefaultRequest,
1532                            fidl::encoding::DefaultFuchsiaResourceDialect
1533                        );
1534                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistrySetDefaultRequest>(&header, _body_bytes, handles, &mut req)?;
1535                        let control_handle =
1536                            StarnixNetworksControlHandle { inner: this.inner.clone() };
1537                        Ok(StarnixNetworksRequest::SetDefault {
1538                            network_id: req.network_id,
1539
1540                            responder: StarnixNetworksSetDefaultResponder {
1541                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1542                                tx_id: header.tx_id,
1543                            },
1544                        })
1545                    }
1546                    0x197e70a1cbeab3ad => {
1547                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1548                        let mut req = fidl::new_empty!(
1549                            NetworkRegistryAddRequest,
1550                            fidl::encoding::DefaultFuchsiaResourceDialect
1551                        );
1552                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryAddRequest>(&header, _body_bytes, handles, &mut req)?;
1553                        let control_handle =
1554                            StarnixNetworksControlHandle { inner: this.inner.clone() };
1555                        Ok(StarnixNetworksRequest::Add {
1556                            network: req.network,
1557
1558                            responder: StarnixNetworksAddResponder {
1559                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1560                                tx_id: header.tx_id,
1561                            },
1562                        })
1563                    }
1564                    0x3bc790ae5418ff0e => {
1565                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1566                        let mut req = fidl::new_empty!(
1567                            NetworkRegistryUpdateRequest,
1568                            fidl::encoding::DefaultFuchsiaResourceDialect
1569                        );
1570                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryUpdateRequest>(&header, _body_bytes, handles, &mut req)?;
1571                        let control_handle =
1572                            StarnixNetworksControlHandle { inner: this.inner.clone() };
1573                        Ok(StarnixNetworksRequest::Update {
1574                            network: req.network,
1575
1576                            responder: StarnixNetworksUpdateResponder {
1577                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1578                                tx_id: header.tx_id,
1579                            },
1580                        })
1581                    }
1582                    0x1302df41dca6379e => {
1583                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1584                        let mut req = fidl::new_empty!(
1585                            NetworkRegistryRemoveRequest,
1586                            fidl::encoding::DefaultFuchsiaResourceDialect
1587                        );
1588                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRegistryRemoveRequest>(&header, _body_bytes, handles, &mut req)?;
1589                        let control_handle =
1590                            StarnixNetworksControlHandle { inner: this.inner.clone() };
1591                        Ok(StarnixNetworksRequest::Remove {
1592                            network_id: req.network_id,
1593
1594                            responder: StarnixNetworksRemoveResponder {
1595                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1596                                tx_id: header.tx_id,
1597                            },
1598                        })
1599                    }
1600                    _ => Err(fidl::Error::UnknownOrdinal {
1601                        ordinal: header.ordinal,
1602                        protocol_name:
1603                            <StarnixNetworksMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1604                    }),
1605                }))
1606            },
1607        )
1608    }
1609}
1610
1611/// StarnixNetworks is used for the starnix nmfs service to communicate changes
1612/// to the network. Only one connection to this service is considered valid at
1613/// any one time. If the connection is lost for any reason, all previously
1614/// registered networks are considered invalid and will be removed.
1615#[derive(Debug)]
1616pub enum StarnixNetworksRequest {
1617    /// Sets the default network.
1618    ///
1619    /// The network must have previously been registered by a call to `Add`.
1620    SetDefault {
1621        network_id: fidl_fuchsia_posix_socket::OptionalUint32,
1622        responder: StarnixNetworksSetDefaultResponder,
1623    },
1624    /// Add a new network.
1625    ///
1626    /// This call will not return until the DNS servers have been successfully
1627    /// updated in netcfg.
1628    Add { network: Network, responder: StarnixNetworksAddResponder },
1629    /// Update a previously Added network.
1630    ///
1631    /// This call will not return until the DNS servers have been
1632    /// successfully updated in netcfg.
1633    Update { network: Network, responder: StarnixNetworksUpdateResponder },
1634    /// Remove a previously Added network.
1635    ///
1636    /// This call will not return until the DNS servers have been
1637    /// successfully updated in netcfg.
1638    Remove { network_id: u32, responder: StarnixNetworksRemoveResponder },
1639}
1640
1641impl StarnixNetworksRequest {
1642    #[allow(irrefutable_let_patterns)]
1643    pub fn into_set_default(
1644        self,
1645    ) -> Option<(fidl_fuchsia_posix_socket::OptionalUint32, StarnixNetworksSetDefaultResponder)>
1646    {
1647        if let StarnixNetworksRequest::SetDefault { network_id, responder } = self {
1648            Some((network_id, responder))
1649        } else {
1650            None
1651        }
1652    }
1653
1654    #[allow(irrefutable_let_patterns)]
1655    pub fn into_add(self) -> Option<(Network, StarnixNetworksAddResponder)> {
1656        if let StarnixNetworksRequest::Add { network, responder } = self {
1657            Some((network, responder))
1658        } else {
1659            None
1660        }
1661    }
1662
1663    #[allow(irrefutable_let_patterns)]
1664    pub fn into_update(self) -> Option<(Network, StarnixNetworksUpdateResponder)> {
1665        if let StarnixNetworksRequest::Update { network, responder } = self {
1666            Some((network, responder))
1667        } else {
1668            None
1669        }
1670    }
1671
1672    #[allow(irrefutable_let_patterns)]
1673    pub fn into_remove(self) -> Option<(u32, StarnixNetworksRemoveResponder)> {
1674        if let StarnixNetworksRequest::Remove { network_id, responder } = self {
1675            Some((network_id, responder))
1676        } else {
1677            None
1678        }
1679    }
1680
1681    /// Name of the method defined in FIDL
1682    pub fn method_name(&self) -> &'static str {
1683        match *self {
1684            StarnixNetworksRequest::SetDefault { .. } => "set_default",
1685            StarnixNetworksRequest::Add { .. } => "add",
1686            StarnixNetworksRequest::Update { .. } => "update",
1687            StarnixNetworksRequest::Remove { .. } => "remove",
1688        }
1689    }
1690}
1691
1692#[derive(Debug, Clone)]
1693pub struct StarnixNetworksControlHandle {
1694    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1695}
1696
1697impl StarnixNetworksControlHandle {
1698    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1699        self.inner.shutdown_with_epitaph(status.into())
1700    }
1701}
1702
1703impl fidl::endpoints::ControlHandle for StarnixNetworksControlHandle {
1704    fn shutdown(&self) {
1705        self.inner.shutdown()
1706    }
1707
1708    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1709        self.inner.shutdown_with_epitaph(status)
1710    }
1711
1712    fn is_closed(&self) -> bool {
1713        self.inner.channel().is_closed()
1714    }
1715    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1716        self.inner.channel().on_closed()
1717    }
1718
1719    #[cfg(target_os = "fuchsia")]
1720    fn signal_peer(
1721        &self,
1722        clear_mask: zx::Signals,
1723        set_mask: zx::Signals,
1724    ) -> Result<(), zx_status::Status> {
1725        use fidl::Peered;
1726        self.inner.channel().signal_peer(clear_mask, set_mask)
1727    }
1728}
1729
1730impl StarnixNetworksControlHandle {}
1731
1732#[must_use = "FIDL methods require a response to be sent"]
1733#[derive(Debug)]
1734pub struct StarnixNetworksSetDefaultResponder {
1735    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
1736    tx_id: u32,
1737}
1738
1739/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
1740/// if the responder is dropped without sending a response, so that the client
1741/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1742impl std::ops::Drop for StarnixNetworksSetDefaultResponder {
1743    fn drop(&mut self) {
1744        self.control_handle.shutdown();
1745        // Safety: drops once, never accessed again
1746        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1747    }
1748}
1749
1750impl fidl::endpoints::Responder for StarnixNetworksSetDefaultResponder {
1751    type ControlHandle = StarnixNetworksControlHandle;
1752
1753    fn control_handle(&self) -> &StarnixNetworksControlHandle {
1754        &self.control_handle
1755    }
1756
1757    fn drop_without_shutdown(mut self) {
1758        // Safety: drops once, never accessed again due to mem::forget
1759        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1760        // Prevent Drop from running (which would shut down the channel)
1761        std::mem::forget(self);
1762    }
1763}
1764
1765impl StarnixNetworksSetDefaultResponder {
1766    /// Sends a response to the FIDL transaction.
1767    ///
1768    /// Sets the channel to shutdown if an error occurs.
1769    pub fn send(
1770        self,
1771        mut result: Result<(), NetworkRegistrySetDefaultError>,
1772    ) -> Result<(), fidl::Error> {
1773        let _result = self.send_raw(result);
1774        if _result.is_err() {
1775            self.control_handle.shutdown();
1776        }
1777        self.drop_without_shutdown();
1778        _result
1779    }
1780
1781    /// Similar to "send" but does not shutdown the channel if an error occurs.
1782    pub fn send_no_shutdown_on_err(
1783        self,
1784        mut result: Result<(), NetworkRegistrySetDefaultError>,
1785    ) -> Result<(), fidl::Error> {
1786        let _result = self.send_raw(result);
1787        self.drop_without_shutdown();
1788        _result
1789    }
1790
1791    fn send_raw(
1792        &self,
1793        mut result: Result<(), NetworkRegistrySetDefaultError>,
1794    ) -> Result<(), fidl::Error> {
1795        self.control_handle.inner.send::<fidl::encoding::ResultType<
1796            fidl::encoding::EmptyStruct,
1797            NetworkRegistrySetDefaultError,
1798        >>(
1799            result,
1800            self.tx_id,
1801            0x787930c67b8cf82c,
1802            fidl::encoding::DynamicFlags::empty(),
1803        )
1804    }
1805}
1806
1807#[must_use = "FIDL methods require a response to be sent"]
1808#[derive(Debug)]
1809pub struct StarnixNetworksAddResponder {
1810    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
1811    tx_id: u32,
1812}
1813
1814/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
1815/// if the responder is dropped without sending a response, so that the client
1816/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1817impl std::ops::Drop for StarnixNetworksAddResponder {
1818    fn drop(&mut self) {
1819        self.control_handle.shutdown();
1820        // Safety: drops once, never accessed again
1821        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1822    }
1823}
1824
1825impl fidl::endpoints::Responder for StarnixNetworksAddResponder {
1826    type ControlHandle = StarnixNetworksControlHandle;
1827
1828    fn control_handle(&self) -> &StarnixNetworksControlHandle {
1829        &self.control_handle
1830    }
1831
1832    fn drop_without_shutdown(mut self) {
1833        // Safety: drops once, never accessed again due to mem::forget
1834        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1835        // Prevent Drop from running (which would shut down the channel)
1836        std::mem::forget(self);
1837    }
1838}
1839
1840impl StarnixNetworksAddResponder {
1841    /// Sends a response to the FIDL transaction.
1842    ///
1843    /// Sets the channel to shutdown if an error occurs.
1844    pub fn send(self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
1845        let _result = self.send_raw(result);
1846        if _result.is_err() {
1847            self.control_handle.shutdown();
1848        }
1849        self.drop_without_shutdown();
1850        _result
1851    }
1852
1853    /// Similar to "send" but does not shutdown the channel if an error occurs.
1854    pub fn send_no_shutdown_on_err(
1855        self,
1856        mut result: Result<(), NetworkRegistryAddError>,
1857    ) -> Result<(), fidl::Error> {
1858        let _result = self.send_raw(result);
1859        self.drop_without_shutdown();
1860        _result
1861    }
1862
1863    fn send_raw(&self, mut result: Result<(), NetworkRegistryAddError>) -> Result<(), fidl::Error> {
1864        self.control_handle.inner.send::<fidl::encoding::ResultType<
1865            fidl::encoding::EmptyStruct,
1866            NetworkRegistryAddError,
1867        >>(
1868            result,
1869            self.tx_id,
1870            0x197e70a1cbeab3ad,
1871            fidl::encoding::DynamicFlags::empty(),
1872        )
1873    }
1874}
1875
1876#[must_use = "FIDL methods require a response to be sent"]
1877#[derive(Debug)]
1878pub struct StarnixNetworksUpdateResponder {
1879    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
1880    tx_id: u32,
1881}
1882
1883/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
1884/// if the responder is dropped without sending a response, so that the client
1885/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1886impl std::ops::Drop for StarnixNetworksUpdateResponder {
1887    fn drop(&mut self) {
1888        self.control_handle.shutdown();
1889        // Safety: drops once, never accessed again
1890        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1891    }
1892}
1893
1894impl fidl::endpoints::Responder for StarnixNetworksUpdateResponder {
1895    type ControlHandle = StarnixNetworksControlHandle;
1896
1897    fn control_handle(&self) -> &StarnixNetworksControlHandle {
1898        &self.control_handle
1899    }
1900
1901    fn drop_without_shutdown(mut self) {
1902        // Safety: drops once, never accessed again due to mem::forget
1903        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1904        // Prevent Drop from running (which would shut down the channel)
1905        std::mem::forget(self);
1906    }
1907}
1908
1909impl StarnixNetworksUpdateResponder {
1910    /// Sends a response to the FIDL transaction.
1911    ///
1912    /// Sets the channel to shutdown if an error occurs.
1913    pub fn send(
1914        self,
1915        mut result: Result<(), NetworkRegistryUpdateError>,
1916    ) -> Result<(), fidl::Error> {
1917        let _result = self.send_raw(result);
1918        if _result.is_err() {
1919            self.control_handle.shutdown();
1920        }
1921        self.drop_without_shutdown();
1922        _result
1923    }
1924
1925    /// Similar to "send" but does not shutdown the channel if an error occurs.
1926    pub fn send_no_shutdown_on_err(
1927        self,
1928        mut result: Result<(), NetworkRegistryUpdateError>,
1929    ) -> Result<(), fidl::Error> {
1930        let _result = self.send_raw(result);
1931        self.drop_without_shutdown();
1932        _result
1933    }
1934
1935    fn send_raw(
1936        &self,
1937        mut result: Result<(), NetworkRegistryUpdateError>,
1938    ) -> Result<(), fidl::Error> {
1939        self.control_handle.inner.send::<fidl::encoding::ResultType<
1940            fidl::encoding::EmptyStruct,
1941            NetworkRegistryUpdateError,
1942        >>(
1943            result,
1944            self.tx_id,
1945            0x3bc790ae5418ff0e,
1946            fidl::encoding::DynamicFlags::empty(),
1947        )
1948    }
1949}
1950
1951#[must_use = "FIDL methods require a response to be sent"]
1952#[derive(Debug)]
1953pub struct StarnixNetworksRemoveResponder {
1954    control_handle: std::mem::ManuallyDrop<StarnixNetworksControlHandle>,
1955    tx_id: u32,
1956}
1957
1958/// Set the the channel to be shutdown (see [`StarnixNetworksControlHandle::shutdown`])
1959/// if the responder is dropped without sending a response, so that the client
1960/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1961impl std::ops::Drop for StarnixNetworksRemoveResponder {
1962    fn drop(&mut self) {
1963        self.control_handle.shutdown();
1964        // Safety: drops once, never accessed again
1965        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1966    }
1967}
1968
1969impl fidl::endpoints::Responder for StarnixNetworksRemoveResponder {
1970    type ControlHandle = StarnixNetworksControlHandle;
1971
1972    fn control_handle(&self) -> &StarnixNetworksControlHandle {
1973        &self.control_handle
1974    }
1975
1976    fn drop_without_shutdown(mut self) {
1977        // Safety: drops once, never accessed again due to mem::forget
1978        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1979        // Prevent Drop from running (which would shut down the channel)
1980        std::mem::forget(self);
1981    }
1982}
1983
1984impl StarnixNetworksRemoveResponder {
1985    /// Sends a response to the FIDL transaction.
1986    ///
1987    /// Sets the channel to shutdown if an error occurs.
1988    pub fn send(
1989        self,
1990        mut result: Result<(), NetworkRegistryRemoveError>,
1991    ) -> Result<(), fidl::Error> {
1992        let _result = self.send_raw(result);
1993        if _result.is_err() {
1994            self.control_handle.shutdown();
1995        }
1996        self.drop_without_shutdown();
1997        _result
1998    }
1999
2000    /// Similar to "send" but does not shutdown the channel if an error occurs.
2001    pub fn send_no_shutdown_on_err(
2002        self,
2003        mut result: Result<(), NetworkRegistryRemoveError>,
2004    ) -> Result<(), fidl::Error> {
2005        let _result = self.send_raw(result);
2006        self.drop_without_shutdown();
2007        _result
2008    }
2009
2010    fn send_raw(
2011        &self,
2012        mut result: Result<(), NetworkRegistryRemoveError>,
2013    ) -> Result<(), fidl::Error> {
2014        self.control_handle.inner.send::<fidl::encoding::ResultType<
2015            fidl::encoding::EmptyStruct,
2016            NetworkRegistryRemoveError,
2017        >>(
2018            result,
2019            self.tx_id,
2020            0x1302df41dca6379e,
2021            fidl::encoding::DynamicFlags::empty(),
2022        )
2023    }
2024}
2025
2026mod internal {
2027    use super::*;
2028}