Skip to main content

fidl_fuchsia_netemul_network/
fidl_fuchsia_netemul_network.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_netemul_network__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct DeviceProxyServeControllerRequest {
16    pub req: fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
20    for DeviceProxyServeControllerRequest
21{
22}
23
24#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
25pub struct DeviceProxyServeDeviceRequest {
26    pub req: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
27}
28
29impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
30    for DeviceProxyServeDeviceRequest
31{
32}
33
34#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
35pub struct EndpointGetPortRequest {
36    pub port: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
37}
38
39impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for EndpointGetPortRequest {}
40
41#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
42pub struct EndpointGetProxyRequest {
43    pub proxy: fidl::endpoints::ServerEnd<DeviceProxy_Marker>,
44}
45
46impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for EndpointGetProxyRequest {}
47
48#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
49pub struct EndpointManagerCreateEndpointResponse {
50    pub status: i32,
51    pub endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
52}
53
54impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
55    for EndpointManagerCreateEndpointResponse
56{
57}
58
59#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
60pub struct EndpointManagerGetEndpointResponse {
61    pub endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
62}
63
64impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
65    for EndpointManagerGetEndpointResponse
66{
67}
68
69#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
70pub struct NetworkContextCloneRequest {
71    pub network_context: fidl::endpoints::ServerEnd<NetworkContextMarker>,
72}
73
74impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
75    for NetworkContextCloneRequest
76{
77}
78
79#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
80pub struct NetworkContextGetEndpointManagerRequest {
81    pub endp_manager: fidl::endpoints::ServerEnd<EndpointManagerMarker>,
82}
83
84impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
85    for NetworkContextGetEndpointManagerRequest
86{
87}
88
89#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
90pub struct NetworkContextGetNetworkManagerRequest {
91    pub net_manager: fidl::endpoints::ServerEnd<NetworkManagerMarker>,
92}
93
94impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
95    for NetworkContextGetNetworkManagerRequest
96{
97}
98
99#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
100pub struct NetworkContextSetupResponse {
101    pub status: i32,
102    pub setup_handle: Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
103}
104
105impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
106    for NetworkContextSetupResponse
107{
108}
109
110#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
111pub struct NetworkCreateFakeEndpointRequest {
112    pub ep: fidl::endpoints::ServerEnd<FakeEndpointMarker>,
113}
114
115impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
116    for NetworkCreateFakeEndpointRequest
117{
118}
119
120#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
121pub struct NetworkManagerCreateNetworkResponse {
122    pub status: i32,
123    pub net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
124}
125
126impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
127    for NetworkManagerCreateNetworkResponse
128{
129}
130
131#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
132pub struct NetworkManagerGetNetworkResponse {
133    pub net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
134}
135
136impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
137    for NetworkManagerGetNetworkResponse
138{
139}
140
141#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
142pub struct DeviceProxy_Marker;
143
144impl fidl::endpoints::ProtocolMarker for DeviceProxy_Marker {
145    type Proxy = DeviceProxy_Proxy;
146    type RequestStream = DeviceProxy_RequestStream;
147    #[cfg(target_os = "fuchsia")]
148    type SynchronousProxy = DeviceProxy_SynchronousProxy;
149
150    const DEBUG_NAME: &'static str = "(anonymous) DeviceProxy_";
151}
152
153pub trait DeviceProxy_ProxyInterface: Send + Sync {
154    fn r#serve_controller(
155        &self,
156        req: fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
157    ) -> Result<(), fidl::Error>;
158    fn r#serve_device(
159        &self,
160        req: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
161    ) -> Result<(), fidl::Error>;
162}
163#[derive(Debug)]
164#[cfg(target_os = "fuchsia")]
165pub struct DeviceProxy_SynchronousProxy {
166    client: fidl::client::sync::Client,
167}
168
169#[cfg(target_os = "fuchsia")]
170impl fidl::endpoints::SynchronousProxy for DeviceProxy_SynchronousProxy {
171    type Proxy = DeviceProxy_Proxy;
172    type Protocol = DeviceProxy_Marker;
173
174    fn from_channel(inner: fidl::Channel) -> Self {
175        Self::new(inner)
176    }
177
178    fn into_channel(self) -> fidl::Channel {
179        self.client.into_channel()
180    }
181
182    fn as_channel(&self) -> &fidl::Channel {
183        self.client.as_channel()
184    }
185}
186
187#[cfg(target_os = "fuchsia")]
188impl DeviceProxy_SynchronousProxy {
189    pub fn new(channel: fidl::Channel) -> Self {
190        Self { client: fidl::client::sync::Client::new(channel) }
191    }
192
193    pub fn into_channel(self) -> fidl::Channel {
194        self.client.into_channel()
195    }
196
197    /// Waits until an event arrives and returns it. It is safe for other
198    /// threads to make concurrent requests while waiting for an event.
199    pub fn wait_for_event(
200        &self,
201        deadline: zx::MonotonicInstant,
202    ) -> Result<DeviceProxy_Event, fidl::Error> {
203        DeviceProxy_Event::decode(self.client.wait_for_event::<DeviceProxy_Marker>(deadline)?)
204    }
205
206    /// Serve the Controller protocol for this device.
207    pub fn r#serve_controller(
208        &self,
209        mut req: fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
210    ) -> Result<(), fidl::Error> {
211        self.client.send::<DeviceProxyServeControllerRequest>(
212            (req,),
213            0x326c17ad2d3879ee,
214            fidl::encoding::DynamicFlags::empty(),
215        )
216    }
217
218    /// Serve the device's FIDL protocol.
219    pub fn r#serve_device(
220        &self,
221        mut req: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
222    ) -> Result<(), fidl::Error> {
223        self.client.send::<DeviceProxyServeDeviceRequest>(
224            (req,),
225            0x645dae2573613288,
226            fidl::encoding::DynamicFlags::empty(),
227        )
228    }
229}
230
231#[cfg(target_os = "fuchsia")]
232impl From<DeviceProxy_SynchronousProxy> for zx::NullableHandle {
233    fn from(value: DeviceProxy_SynchronousProxy) -> Self {
234        value.into_channel().into()
235    }
236}
237
238#[cfg(target_os = "fuchsia")]
239impl From<fidl::Channel> for DeviceProxy_SynchronousProxy {
240    fn from(value: fidl::Channel) -> Self {
241        Self::new(value)
242    }
243}
244
245#[cfg(target_os = "fuchsia")]
246impl fidl::endpoints::FromClient for DeviceProxy_SynchronousProxy {
247    type Protocol = DeviceProxy_Marker;
248
249    fn from_client(value: fidl::endpoints::ClientEnd<DeviceProxy_Marker>) -> Self {
250        Self::new(value.into_channel())
251    }
252}
253
254#[derive(Debug, Clone)]
255pub struct DeviceProxy_Proxy {
256    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
257}
258
259impl fidl::endpoints::Proxy for DeviceProxy_Proxy {
260    type Protocol = DeviceProxy_Marker;
261
262    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
263        Self::new(inner)
264    }
265
266    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
267        self.client.into_channel().map_err(|client| Self { client })
268    }
269
270    fn as_channel(&self) -> &::fidl::AsyncChannel {
271        self.client.as_channel()
272    }
273}
274
275impl DeviceProxy_Proxy {
276    /// Create a new Proxy for fuchsia.netemul.network/DeviceProxy.
277    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
278        let protocol_name = <DeviceProxy_Marker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
279        Self { client: fidl::client::Client::new(channel, protocol_name) }
280    }
281
282    /// Get a Stream of events from the remote end of the protocol.
283    ///
284    /// # Panics
285    ///
286    /// Panics if the event stream was already taken.
287    pub fn take_event_stream(&self) -> DeviceProxy_EventStream {
288        DeviceProxy_EventStream { event_receiver: self.client.take_event_receiver() }
289    }
290
291    /// Serve the Controller protocol for this device.
292    pub fn r#serve_controller(
293        &self,
294        mut req: fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
295    ) -> Result<(), fidl::Error> {
296        DeviceProxy_ProxyInterface::r#serve_controller(self, req)
297    }
298
299    /// Serve the device's FIDL protocol.
300    pub fn r#serve_device(
301        &self,
302        mut req: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
303    ) -> Result<(), fidl::Error> {
304        DeviceProxy_ProxyInterface::r#serve_device(self, req)
305    }
306}
307
308impl DeviceProxy_ProxyInterface for DeviceProxy_Proxy {
309    fn r#serve_controller(
310        &self,
311        mut req: fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
312    ) -> Result<(), fidl::Error> {
313        self.client.send::<DeviceProxyServeControllerRequest>(
314            (req,),
315            0x326c17ad2d3879ee,
316            fidl::encoding::DynamicFlags::empty(),
317        )
318    }
319
320    fn r#serve_device(
321        &self,
322        mut req: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
323    ) -> Result<(), fidl::Error> {
324        self.client.send::<DeviceProxyServeDeviceRequest>(
325            (req,),
326            0x645dae2573613288,
327            fidl::encoding::DynamicFlags::empty(),
328        )
329    }
330}
331
332pub struct DeviceProxy_EventStream {
333    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
334}
335
336impl std::marker::Unpin for DeviceProxy_EventStream {}
337
338impl futures::stream::FusedStream for DeviceProxy_EventStream {
339    fn is_terminated(&self) -> bool {
340        self.event_receiver.is_terminated()
341    }
342}
343
344impl futures::Stream for DeviceProxy_EventStream {
345    type Item = Result<DeviceProxy_Event, fidl::Error>;
346
347    fn poll_next(
348        mut self: std::pin::Pin<&mut Self>,
349        cx: &mut std::task::Context<'_>,
350    ) -> std::task::Poll<Option<Self::Item>> {
351        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
352            &mut self.event_receiver,
353            cx
354        )?) {
355            Some(buf) => std::task::Poll::Ready(Some(DeviceProxy_Event::decode(buf))),
356            None => std::task::Poll::Ready(None),
357        }
358    }
359}
360
361#[derive(Debug)]
362pub enum DeviceProxy_Event {}
363
364impl DeviceProxy_Event {
365    /// Decodes a message buffer as a [`DeviceProxy_Event`].
366    fn decode(
367        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
368    ) -> Result<DeviceProxy_Event, fidl::Error> {
369        let (bytes, _handles) = buf.split_mut();
370        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
371        debug_assert_eq!(tx_header.tx_id, 0);
372        match tx_header.ordinal {
373            _ => Err(fidl::Error::UnknownOrdinal {
374                ordinal: tx_header.ordinal,
375                protocol_name: <DeviceProxy_Marker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
376            }),
377        }
378    }
379}
380
381/// A Stream of incoming requests for fuchsia.netemul.network/DeviceProxy.
382pub struct DeviceProxy_RequestStream {
383    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
384    is_terminated: bool,
385}
386
387impl std::marker::Unpin for DeviceProxy_RequestStream {}
388
389impl futures::stream::FusedStream for DeviceProxy_RequestStream {
390    fn is_terminated(&self) -> bool {
391        self.is_terminated
392    }
393}
394
395impl fidl::endpoints::RequestStream for DeviceProxy_RequestStream {
396    type Protocol = DeviceProxy_Marker;
397    type ControlHandle = DeviceProxy_ControlHandle;
398
399    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
400        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
401    }
402
403    fn control_handle(&self) -> Self::ControlHandle {
404        DeviceProxy_ControlHandle { inner: self.inner.clone() }
405    }
406
407    fn into_inner(
408        self,
409    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
410    {
411        (self.inner, self.is_terminated)
412    }
413
414    fn from_inner(
415        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
416        is_terminated: bool,
417    ) -> Self {
418        Self { inner, is_terminated }
419    }
420}
421
422impl futures::Stream for DeviceProxy_RequestStream {
423    type Item = Result<DeviceProxy_Request, fidl::Error>;
424
425    fn poll_next(
426        mut self: std::pin::Pin<&mut Self>,
427        cx: &mut std::task::Context<'_>,
428    ) -> std::task::Poll<Option<Self::Item>> {
429        let this = &mut *self;
430        if this.inner.check_shutdown(cx) {
431            this.is_terminated = true;
432            return std::task::Poll::Ready(None);
433        }
434        if this.is_terminated {
435            panic!("polled DeviceProxy_RequestStream after completion");
436        }
437        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
438            |bytes, handles| {
439                match this.inner.channel().read_etc(cx, bytes, handles) {
440                    std::task::Poll::Ready(Ok(())) => {}
441                    std::task::Poll::Pending => return std::task::Poll::Pending,
442                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
443                        this.is_terminated = true;
444                        return std::task::Poll::Ready(None);
445                    }
446                    std::task::Poll::Ready(Err(e)) => {
447                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
448                            e.into(),
449                        ))));
450                    }
451                }
452
453                // A message has been received from the channel
454                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
455
456                std::task::Poll::Ready(Some(match header.ordinal {
457                    0x326c17ad2d3879ee => {
458                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
459                        let mut req = fidl::new_empty!(
460                            DeviceProxyServeControllerRequest,
461                            fidl::encoding::DefaultFuchsiaResourceDialect
462                        );
463                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceProxyServeControllerRequest>(&header, _body_bytes, handles, &mut req)?;
464                        let control_handle =
465                            DeviceProxy_ControlHandle { inner: this.inner.clone() };
466                        Ok(DeviceProxy_Request::ServeController { req: req.req, control_handle })
467                    }
468                    0x645dae2573613288 => {
469                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
470                        let mut req = fidl::new_empty!(
471                            DeviceProxyServeDeviceRequest,
472                            fidl::encoding::DefaultFuchsiaResourceDialect
473                        );
474                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceProxyServeDeviceRequest>(&header, _body_bytes, handles, &mut req)?;
475                        let control_handle =
476                            DeviceProxy_ControlHandle { inner: this.inner.clone() };
477                        Ok(DeviceProxy_Request::ServeDevice { req: req.req, control_handle })
478                    }
479                    _ => Err(fidl::Error::UnknownOrdinal {
480                        ordinal: header.ordinal,
481                        protocol_name:
482                            <DeviceProxy_Marker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
483                    }),
484                }))
485            },
486        )
487    }
488}
489
490/// Simple interface to serve devices over fidl.
491#[derive(Debug)]
492pub enum DeviceProxy_Request {
493    /// Serve the Controller protocol for this device.
494    ServeController {
495        req: fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
496        control_handle: DeviceProxy_ControlHandle,
497    },
498    /// Serve the device's FIDL protocol.
499    ServeDevice {
500        req: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
501        control_handle: DeviceProxy_ControlHandle,
502    },
503}
504
505impl DeviceProxy_Request {
506    #[allow(irrefutable_let_patterns)]
507    pub fn into_serve_controller(
508        self,
509    ) -> Option<(
510        fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
511        DeviceProxy_ControlHandle,
512    )> {
513        if let DeviceProxy_Request::ServeController { req, control_handle } = self {
514            Some((req, control_handle))
515        } else {
516            None
517        }
518    }
519
520    #[allow(irrefutable_let_patterns)]
521    pub fn into_serve_device(
522        self,
523    ) -> Option<(
524        fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
525        DeviceProxy_ControlHandle,
526    )> {
527        if let DeviceProxy_Request::ServeDevice { req, control_handle } = self {
528            Some((req, control_handle))
529        } else {
530            None
531        }
532    }
533
534    /// Name of the method defined in FIDL
535    pub fn method_name(&self) -> &'static str {
536        match *self {
537            DeviceProxy_Request::ServeController { .. } => "serve_controller",
538            DeviceProxy_Request::ServeDevice { .. } => "serve_device",
539        }
540    }
541}
542
543#[derive(Debug, Clone)]
544pub struct DeviceProxy_ControlHandle {
545    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
546}
547
548impl fidl::endpoints::ControlHandle for DeviceProxy_ControlHandle {
549    fn shutdown(&self) {
550        self.inner.shutdown()
551    }
552
553    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
554        self.inner.shutdown_with_epitaph(status)
555    }
556
557    fn is_closed(&self) -> bool {
558        self.inner.channel().is_closed()
559    }
560    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
561        self.inner.channel().on_closed()
562    }
563
564    #[cfg(target_os = "fuchsia")]
565    fn signal_peer(
566        &self,
567        clear_mask: zx::Signals,
568        set_mask: zx::Signals,
569    ) -> Result<(), zx_status::Status> {
570        use fidl::Peered;
571        self.inner.channel().signal_peer(clear_mask, set_mask)
572    }
573}
574
575impl DeviceProxy_ControlHandle {}
576
577#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
578pub struct EndpointMarker;
579
580impl fidl::endpoints::ProtocolMarker for EndpointMarker {
581    type Proxy = EndpointProxy;
582    type RequestStream = EndpointRequestStream;
583    #[cfg(target_os = "fuchsia")]
584    type SynchronousProxy = EndpointSynchronousProxy;
585
586    const DEBUG_NAME: &'static str = "(anonymous) Endpoint";
587}
588
589pub trait EndpointProxyInterface: Send + Sync {
590    type GetConfigResponseFut: std::future::Future<Output = Result<EndpointConfig, fidl::Error>>
591        + Send;
592    fn r#get_config(&self) -> Self::GetConfigResponseFut;
593    type GetNameResponseFut: std::future::Future<Output = Result<String, fidl::Error>> + Send;
594    fn r#get_name(&self) -> Self::GetNameResponseFut;
595    type SetLinkUpResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
596    fn r#set_link_up(&self, up: bool) -> Self::SetLinkUpResponseFut;
597    fn r#get_port(
598        &self,
599        port: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
600    ) -> Result<(), fidl::Error>;
601    fn r#get_proxy_(
602        &self,
603        proxy: fidl::endpoints::ServerEnd<DeviceProxy_Marker>,
604    ) -> Result<(), fidl::Error>;
605}
606#[derive(Debug)]
607#[cfg(target_os = "fuchsia")]
608pub struct EndpointSynchronousProxy {
609    client: fidl::client::sync::Client,
610}
611
612#[cfg(target_os = "fuchsia")]
613impl fidl::endpoints::SynchronousProxy for EndpointSynchronousProxy {
614    type Proxy = EndpointProxy;
615    type Protocol = EndpointMarker;
616
617    fn from_channel(inner: fidl::Channel) -> Self {
618        Self::new(inner)
619    }
620
621    fn into_channel(self) -> fidl::Channel {
622        self.client.into_channel()
623    }
624
625    fn as_channel(&self) -> &fidl::Channel {
626        self.client.as_channel()
627    }
628}
629
630#[cfg(target_os = "fuchsia")]
631impl EndpointSynchronousProxy {
632    pub fn new(channel: fidl::Channel) -> Self {
633        Self { client: fidl::client::sync::Client::new(channel) }
634    }
635
636    pub fn into_channel(self) -> fidl::Channel {
637        self.client.into_channel()
638    }
639
640    /// Waits until an event arrives and returns it. It is safe for other
641    /// threads to make concurrent requests while waiting for an event.
642    pub fn wait_for_event(
643        &self,
644        deadline: zx::MonotonicInstant,
645    ) -> Result<EndpointEvent, fidl::Error> {
646        EndpointEvent::decode(self.client.wait_for_event::<EndpointMarker>(deadline)?)
647    }
648
649    pub fn r#get_config(
650        &self,
651        ___deadline: zx::MonotonicInstant,
652    ) -> Result<EndpointConfig, fidl::Error> {
653        let _response = self
654            .client
655            .send_query::<fidl::encoding::EmptyPayload, EndpointGetConfigResponse, EndpointMarker>(
656                (),
657                0x3589f54aa3748539,
658                fidl::encoding::DynamicFlags::empty(),
659                ___deadline,
660            )?;
661        Ok(_response.config)
662    }
663
664    /// Gets endpoint name.
665    pub fn r#get_name(&self, ___deadline: zx::MonotonicInstant) -> Result<String, fidl::Error> {
666        let _response = self
667            .client
668            .send_query::<fidl::encoding::EmptyPayload, EndpointGetNameResponse, EndpointMarker>(
669                (),
670                0x7d69650823557aab,
671                fidl::encoding::DynamicFlags::empty(),
672                ___deadline,
673            )?;
674        Ok(_response.name)
675    }
676
677    /// Sends link up or down signal
678    pub fn r#set_link_up(
679        &self,
680        mut up: bool,
681        ___deadline: zx::MonotonicInstant,
682    ) -> Result<(), fidl::Error> {
683        let _response = self
684            .client
685            .send_query::<EndpointSetLinkUpRequest, fidl::encoding::EmptyPayload, EndpointMarker>(
686                (up,),
687                0x4dde77de68d02e11,
688                fidl::encoding::DynamicFlags::empty(),
689                ___deadline,
690            )?;
691        Ok(_response)
692    }
693
694    /// Connects to the underlying device port.
695    pub fn r#get_port(
696        &self,
697        mut port: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
698    ) -> Result<(), fidl::Error> {
699        self.client.send::<EndpointGetPortRequest>(
700            (port,),
701            0x68151e034eccc958,
702            fidl::encoding::DynamicFlags::empty(),
703        )
704    }
705
706    /// Gets a proxy to open requests with zircon ethernet device.
707    pub fn r#get_proxy_(
708        &self,
709        mut proxy: fidl::endpoints::ServerEnd<DeviceProxy_Marker>,
710    ) -> Result<(), fidl::Error> {
711        self.client.send::<EndpointGetProxyRequest>(
712            (proxy,),
713            0x476e5a57c4288ee9,
714            fidl::encoding::DynamicFlags::empty(),
715        )
716    }
717}
718
719#[cfg(target_os = "fuchsia")]
720impl From<EndpointSynchronousProxy> for zx::NullableHandle {
721    fn from(value: EndpointSynchronousProxy) -> Self {
722        value.into_channel().into()
723    }
724}
725
726#[cfg(target_os = "fuchsia")]
727impl From<fidl::Channel> for EndpointSynchronousProxy {
728    fn from(value: fidl::Channel) -> Self {
729        Self::new(value)
730    }
731}
732
733#[cfg(target_os = "fuchsia")]
734impl fidl::endpoints::FromClient for EndpointSynchronousProxy {
735    type Protocol = EndpointMarker;
736
737    fn from_client(value: fidl::endpoints::ClientEnd<EndpointMarker>) -> Self {
738        Self::new(value.into_channel())
739    }
740}
741
742#[derive(Debug, Clone)]
743pub struct EndpointProxy {
744    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
745}
746
747impl fidl::endpoints::Proxy for EndpointProxy {
748    type Protocol = EndpointMarker;
749
750    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
751        Self::new(inner)
752    }
753
754    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
755        self.client.into_channel().map_err(|client| Self { client })
756    }
757
758    fn as_channel(&self) -> &::fidl::AsyncChannel {
759        self.client.as_channel()
760    }
761}
762
763impl EndpointProxy {
764    /// Create a new Proxy for fuchsia.netemul.network/Endpoint.
765    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
766        let protocol_name = <EndpointMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
767        Self { client: fidl::client::Client::new(channel, protocol_name) }
768    }
769
770    /// Get a Stream of events from the remote end of the protocol.
771    ///
772    /// # Panics
773    ///
774    /// Panics if the event stream was already taken.
775    pub fn take_event_stream(&self) -> EndpointEventStream {
776        EndpointEventStream { event_receiver: self.client.take_event_receiver() }
777    }
778
779    pub fn r#get_config(
780        &self,
781    ) -> fidl::client::QueryResponseFut<EndpointConfig, fidl::encoding::DefaultFuchsiaResourceDialect>
782    {
783        EndpointProxyInterface::r#get_config(self)
784    }
785
786    /// Gets endpoint name.
787    pub fn r#get_name(
788        &self,
789    ) -> fidl::client::QueryResponseFut<String, fidl::encoding::DefaultFuchsiaResourceDialect> {
790        EndpointProxyInterface::r#get_name(self)
791    }
792
793    /// Sends link up or down signal
794    pub fn r#set_link_up(
795        &self,
796        mut up: bool,
797    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
798        EndpointProxyInterface::r#set_link_up(self, up)
799    }
800
801    /// Connects to the underlying device port.
802    pub fn r#get_port(
803        &self,
804        mut port: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
805    ) -> Result<(), fidl::Error> {
806        EndpointProxyInterface::r#get_port(self, port)
807    }
808
809    /// Gets a proxy to open requests with zircon ethernet device.
810    pub fn r#get_proxy_(
811        &self,
812        mut proxy: fidl::endpoints::ServerEnd<DeviceProxy_Marker>,
813    ) -> Result<(), fidl::Error> {
814        EndpointProxyInterface::r#get_proxy_(self, proxy)
815    }
816}
817
818impl EndpointProxyInterface for EndpointProxy {
819    type GetConfigResponseFut = fidl::client::QueryResponseFut<
820        EndpointConfig,
821        fidl::encoding::DefaultFuchsiaResourceDialect,
822    >;
823    fn r#get_config(&self) -> Self::GetConfigResponseFut {
824        fn _decode(
825            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
826        ) -> Result<EndpointConfig, fidl::Error> {
827            let _response = fidl::client::decode_transaction_body::<
828                EndpointGetConfigResponse,
829                fidl::encoding::DefaultFuchsiaResourceDialect,
830                0x3589f54aa3748539,
831            >(_buf?)?;
832            Ok(_response.config)
833        }
834        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, EndpointConfig>(
835            (),
836            0x3589f54aa3748539,
837            fidl::encoding::DynamicFlags::empty(),
838            _decode,
839        )
840    }
841
842    type GetNameResponseFut =
843        fidl::client::QueryResponseFut<String, fidl::encoding::DefaultFuchsiaResourceDialect>;
844    fn r#get_name(&self) -> Self::GetNameResponseFut {
845        fn _decode(
846            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
847        ) -> Result<String, fidl::Error> {
848            let _response = fidl::client::decode_transaction_body::<
849                EndpointGetNameResponse,
850                fidl::encoding::DefaultFuchsiaResourceDialect,
851                0x7d69650823557aab,
852            >(_buf?)?;
853            Ok(_response.name)
854        }
855        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, String>(
856            (),
857            0x7d69650823557aab,
858            fidl::encoding::DynamicFlags::empty(),
859            _decode,
860        )
861    }
862
863    type SetLinkUpResponseFut =
864        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
865    fn r#set_link_up(&self, mut up: bool) -> Self::SetLinkUpResponseFut {
866        fn _decode(
867            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
868        ) -> Result<(), fidl::Error> {
869            let _response = fidl::client::decode_transaction_body::<
870                fidl::encoding::EmptyPayload,
871                fidl::encoding::DefaultFuchsiaResourceDialect,
872                0x4dde77de68d02e11,
873            >(_buf?)?;
874            Ok(_response)
875        }
876        self.client.send_query_and_decode::<EndpointSetLinkUpRequest, ()>(
877            (up,),
878            0x4dde77de68d02e11,
879            fidl::encoding::DynamicFlags::empty(),
880            _decode,
881        )
882    }
883
884    fn r#get_port(
885        &self,
886        mut port: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
887    ) -> Result<(), fidl::Error> {
888        self.client.send::<EndpointGetPortRequest>(
889            (port,),
890            0x68151e034eccc958,
891            fidl::encoding::DynamicFlags::empty(),
892        )
893    }
894
895    fn r#get_proxy_(
896        &self,
897        mut proxy: fidl::endpoints::ServerEnd<DeviceProxy_Marker>,
898    ) -> Result<(), fidl::Error> {
899        self.client.send::<EndpointGetProxyRequest>(
900            (proxy,),
901            0x476e5a57c4288ee9,
902            fidl::encoding::DynamicFlags::empty(),
903        )
904    }
905}
906
907pub struct EndpointEventStream {
908    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
909}
910
911impl std::marker::Unpin for EndpointEventStream {}
912
913impl futures::stream::FusedStream for EndpointEventStream {
914    fn is_terminated(&self) -> bool {
915        self.event_receiver.is_terminated()
916    }
917}
918
919impl futures::Stream for EndpointEventStream {
920    type Item = Result<EndpointEvent, fidl::Error>;
921
922    fn poll_next(
923        mut self: std::pin::Pin<&mut Self>,
924        cx: &mut std::task::Context<'_>,
925    ) -> std::task::Poll<Option<Self::Item>> {
926        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
927            &mut self.event_receiver,
928            cx
929        )?) {
930            Some(buf) => std::task::Poll::Ready(Some(EndpointEvent::decode(buf))),
931            None => std::task::Poll::Ready(None),
932        }
933    }
934}
935
936#[derive(Debug)]
937pub enum EndpointEvent {}
938
939impl EndpointEvent {
940    /// Decodes a message buffer as a [`EndpointEvent`].
941    fn decode(
942        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
943    ) -> Result<EndpointEvent, fidl::Error> {
944        let (bytes, _handles) = buf.split_mut();
945        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
946        debug_assert_eq!(tx_header.tx_id, 0);
947        match tx_header.ordinal {
948            _ => Err(fidl::Error::UnknownOrdinal {
949                ordinal: tx_header.ordinal,
950                protocol_name: <EndpointMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
951            }),
952        }
953    }
954}
955
956/// A Stream of incoming requests for fuchsia.netemul.network/Endpoint.
957pub struct EndpointRequestStream {
958    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
959    is_terminated: bool,
960}
961
962impl std::marker::Unpin for EndpointRequestStream {}
963
964impl futures::stream::FusedStream for EndpointRequestStream {
965    fn is_terminated(&self) -> bool {
966        self.is_terminated
967    }
968}
969
970impl fidl::endpoints::RequestStream for EndpointRequestStream {
971    type Protocol = EndpointMarker;
972    type ControlHandle = EndpointControlHandle;
973
974    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
975        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
976    }
977
978    fn control_handle(&self) -> Self::ControlHandle {
979        EndpointControlHandle { inner: self.inner.clone() }
980    }
981
982    fn into_inner(
983        self,
984    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
985    {
986        (self.inner, self.is_terminated)
987    }
988
989    fn from_inner(
990        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
991        is_terminated: bool,
992    ) -> Self {
993        Self { inner, is_terminated }
994    }
995}
996
997impl futures::Stream for EndpointRequestStream {
998    type Item = Result<EndpointRequest, fidl::Error>;
999
1000    fn poll_next(
1001        mut self: std::pin::Pin<&mut Self>,
1002        cx: &mut std::task::Context<'_>,
1003    ) -> std::task::Poll<Option<Self::Item>> {
1004        let this = &mut *self;
1005        if this.inner.check_shutdown(cx) {
1006            this.is_terminated = true;
1007            return std::task::Poll::Ready(None);
1008        }
1009        if this.is_terminated {
1010            panic!("polled EndpointRequestStream after completion");
1011        }
1012        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1013            |bytes, handles| {
1014                match this.inner.channel().read_etc(cx, bytes, handles) {
1015                    std::task::Poll::Ready(Ok(())) => {}
1016                    std::task::Poll::Pending => return std::task::Poll::Pending,
1017                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1018                        this.is_terminated = true;
1019                        return std::task::Poll::Ready(None);
1020                    }
1021                    std::task::Poll::Ready(Err(e)) => {
1022                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1023                            e.into(),
1024                        ))));
1025                    }
1026                }
1027
1028                // A message has been received from the channel
1029                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1030
1031                std::task::Poll::Ready(Some(match header.ordinal {
1032                    0x3589f54aa3748539 => {
1033                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1034                        let mut req = fidl::new_empty!(
1035                            fidl::encoding::EmptyPayload,
1036                            fidl::encoding::DefaultFuchsiaResourceDialect
1037                        );
1038                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1039                        let control_handle = EndpointControlHandle { inner: this.inner.clone() };
1040                        Ok(EndpointRequest::GetConfig {
1041                            responder: EndpointGetConfigResponder {
1042                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1043                                tx_id: header.tx_id,
1044                            },
1045                        })
1046                    }
1047                    0x7d69650823557aab => {
1048                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1049                        let mut req = fidl::new_empty!(
1050                            fidl::encoding::EmptyPayload,
1051                            fidl::encoding::DefaultFuchsiaResourceDialect
1052                        );
1053                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1054                        let control_handle = EndpointControlHandle { inner: this.inner.clone() };
1055                        Ok(EndpointRequest::GetName {
1056                            responder: EndpointGetNameResponder {
1057                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1058                                tx_id: header.tx_id,
1059                            },
1060                        })
1061                    }
1062                    0x4dde77de68d02e11 => {
1063                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1064                        let mut req = fidl::new_empty!(
1065                            EndpointSetLinkUpRequest,
1066                            fidl::encoding::DefaultFuchsiaResourceDialect
1067                        );
1068                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<EndpointSetLinkUpRequest>(&header, _body_bytes, handles, &mut req)?;
1069                        let control_handle = EndpointControlHandle { inner: this.inner.clone() };
1070                        Ok(EndpointRequest::SetLinkUp {
1071                            up: req.up,
1072
1073                            responder: EndpointSetLinkUpResponder {
1074                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1075                                tx_id: header.tx_id,
1076                            },
1077                        })
1078                    }
1079                    0x68151e034eccc958 => {
1080                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
1081                        let mut req = fidl::new_empty!(
1082                            EndpointGetPortRequest,
1083                            fidl::encoding::DefaultFuchsiaResourceDialect
1084                        );
1085                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<EndpointGetPortRequest>(&header, _body_bytes, handles, &mut req)?;
1086                        let control_handle = EndpointControlHandle { inner: this.inner.clone() };
1087                        Ok(EndpointRequest::GetPort { port: req.port, control_handle })
1088                    }
1089                    0x476e5a57c4288ee9 => {
1090                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
1091                        let mut req = fidl::new_empty!(
1092                            EndpointGetProxyRequest,
1093                            fidl::encoding::DefaultFuchsiaResourceDialect
1094                        );
1095                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<EndpointGetProxyRequest>(&header, _body_bytes, handles, &mut req)?;
1096                        let control_handle = EndpointControlHandle { inner: this.inner.clone() };
1097                        Ok(EndpointRequest::GetProxy_ { proxy: req.proxy, control_handle })
1098                    }
1099                    _ => Err(fidl::Error::UnknownOrdinal {
1100                        ordinal: header.ordinal,
1101                        protocol_name:
1102                            <EndpointMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1103                    }),
1104                }))
1105            },
1106        )
1107    }
1108}
1109
1110/// Virtual ethernet endpoint.
1111#[derive(Debug)]
1112pub enum EndpointRequest {
1113    GetConfig {
1114        responder: EndpointGetConfigResponder,
1115    },
1116    /// Gets endpoint name.
1117    GetName {
1118        responder: EndpointGetNameResponder,
1119    },
1120    /// Sends link up or down signal
1121    SetLinkUp {
1122        up: bool,
1123        responder: EndpointSetLinkUpResponder,
1124    },
1125    /// Connects to the underlying device port.
1126    GetPort {
1127        port: fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
1128        control_handle: EndpointControlHandle,
1129    },
1130    /// Gets a proxy to open requests with zircon ethernet device.
1131    GetProxy_ {
1132        proxy: fidl::endpoints::ServerEnd<DeviceProxy_Marker>,
1133        control_handle: EndpointControlHandle,
1134    },
1135}
1136
1137impl EndpointRequest {
1138    #[allow(irrefutable_let_patterns)]
1139    pub fn into_get_config(self) -> Option<(EndpointGetConfigResponder)> {
1140        if let EndpointRequest::GetConfig { responder } = self { Some((responder)) } else { None }
1141    }
1142
1143    #[allow(irrefutable_let_patterns)]
1144    pub fn into_get_name(self) -> Option<(EndpointGetNameResponder)> {
1145        if let EndpointRequest::GetName { responder } = self { Some((responder)) } else { None }
1146    }
1147
1148    #[allow(irrefutable_let_patterns)]
1149    pub fn into_set_link_up(self) -> Option<(bool, EndpointSetLinkUpResponder)> {
1150        if let EndpointRequest::SetLinkUp { up, responder } = self {
1151            Some((up, responder))
1152        } else {
1153            None
1154        }
1155    }
1156
1157    #[allow(irrefutable_let_patterns)]
1158    pub fn into_get_port(
1159        self,
1160    ) -> Option<(
1161        fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
1162        EndpointControlHandle,
1163    )> {
1164        if let EndpointRequest::GetPort { port, control_handle } = self {
1165            Some((port, control_handle))
1166        } else {
1167            None
1168        }
1169    }
1170
1171    #[allow(irrefutable_let_patterns)]
1172    pub fn into_get_proxy_(
1173        self,
1174    ) -> Option<(fidl::endpoints::ServerEnd<DeviceProxy_Marker>, EndpointControlHandle)> {
1175        if let EndpointRequest::GetProxy_ { proxy, control_handle } = self {
1176            Some((proxy, control_handle))
1177        } else {
1178            None
1179        }
1180    }
1181
1182    /// Name of the method defined in FIDL
1183    pub fn method_name(&self) -> &'static str {
1184        match *self {
1185            EndpointRequest::GetConfig { .. } => "get_config",
1186            EndpointRequest::GetName { .. } => "get_name",
1187            EndpointRequest::SetLinkUp { .. } => "set_link_up",
1188            EndpointRequest::GetPort { .. } => "get_port",
1189            EndpointRequest::GetProxy_ { .. } => "get_proxy_",
1190        }
1191    }
1192}
1193
1194#[derive(Debug, Clone)]
1195pub struct EndpointControlHandle {
1196    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1197}
1198
1199impl fidl::endpoints::ControlHandle for EndpointControlHandle {
1200    fn shutdown(&self) {
1201        self.inner.shutdown()
1202    }
1203
1204    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1205        self.inner.shutdown_with_epitaph(status)
1206    }
1207
1208    fn is_closed(&self) -> bool {
1209        self.inner.channel().is_closed()
1210    }
1211    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1212        self.inner.channel().on_closed()
1213    }
1214
1215    #[cfg(target_os = "fuchsia")]
1216    fn signal_peer(
1217        &self,
1218        clear_mask: zx::Signals,
1219        set_mask: zx::Signals,
1220    ) -> Result<(), zx_status::Status> {
1221        use fidl::Peered;
1222        self.inner.channel().signal_peer(clear_mask, set_mask)
1223    }
1224}
1225
1226impl EndpointControlHandle {}
1227
1228#[must_use = "FIDL methods require a response to be sent"]
1229#[derive(Debug)]
1230pub struct EndpointGetConfigResponder {
1231    control_handle: std::mem::ManuallyDrop<EndpointControlHandle>,
1232    tx_id: u32,
1233}
1234
1235/// Set the the channel to be shutdown (see [`EndpointControlHandle::shutdown`])
1236/// if the responder is dropped without sending a response, so that the client
1237/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1238impl std::ops::Drop for EndpointGetConfigResponder {
1239    fn drop(&mut self) {
1240        self.control_handle.shutdown();
1241        // Safety: drops once, never accessed again
1242        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1243    }
1244}
1245
1246impl fidl::endpoints::Responder for EndpointGetConfigResponder {
1247    type ControlHandle = EndpointControlHandle;
1248
1249    fn control_handle(&self) -> &EndpointControlHandle {
1250        &self.control_handle
1251    }
1252
1253    fn drop_without_shutdown(mut self) {
1254        // Safety: drops once, never accessed again due to mem::forget
1255        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1256        // Prevent Drop from running (which would shut down the channel)
1257        std::mem::forget(self);
1258    }
1259}
1260
1261impl EndpointGetConfigResponder {
1262    /// Sends a response to the FIDL transaction.
1263    ///
1264    /// Sets the channel to shutdown if an error occurs.
1265    pub fn send(self, mut config: &EndpointConfig) -> Result<(), fidl::Error> {
1266        let _result = self.send_raw(config);
1267        if _result.is_err() {
1268            self.control_handle.shutdown();
1269        }
1270        self.drop_without_shutdown();
1271        _result
1272    }
1273
1274    /// Similar to "send" but does not shutdown the channel if an error occurs.
1275    pub fn send_no_shutdown_on_err(self, mut config: &EndpointConfig) -> Result<(), fidl::Error> {
1276        let _result = self.send_raw(config);
1277        self.drop_without_shutdown();
1278        _result
1279    }
1280
1281    fn send_raw(&self, mut config: &EndpointConfig) -> Result<(), fidl::Error> {
1282        self.control_handle.inner.send::<EndpointGetConfigResponse>(
1283            (config,),
1284            self.tx_id,
1285            0x3589f54aa3748539,
1286            fidl::encoding::DynamicFlags::empty(),
1287        )
1288    }
1289}
1290
1291#[must_use = "FIDL methods require a response to be sent"]
1292#[derive(Debug)]
1293pub struct EndpointGetNameResponder {
1294    control_handle: std::mem::ManuallyDrop<EndpointControlHandle>,
1295    tx_id: u32,
1296}
1297
1298/// Set the the channel to be shutdown (see [`EndpointControlHandle::shutdown`])
1299/// if the responder is dropped without sending a response, so that the client
1300/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1301impl std::ops::Drop for EndpointGetNameResponder {
1302    fn drop(&mut self) {
1303        self.control_handle.shutdown();
1304        // Safety: drops once, never accessed again
1305        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1306    }
1307}
1308
1309impl fidl::endpoints::Responder for EndpointGetNameResponder {
1310    type ControlHandle = EndpointControlHandle;
1311
1312    fn control_handle(&self) -> &EndpointControlHandle {
1313        &self.control_handle
1314    }
1315
1316    fn drop_without_shutdown(mut self) {
1317        // Safety: drops once, never accessed again due to mem::forget
1318        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1319        // Prevent Drop from running (which would shut down the channel)
1320        std::mem::forget(self);
1321    }
1322}
1323
1324impl EndpointGetNameResponder {
1325    /// Sends a response to the FIDL transaction.
1326    ///
1327    /// Sets the channel to shutdown if an error occurs.
1328    pub fn send(self, mut name: &str) -> Result<(), fidl::Error> {
1329        let _result = self.send_raw(name);
1330        if _result.is_err() {
1331            self.control_handle.shutdown();
1332        }
1333        self.drop_without_shutdown();
1334        _result
1335    }
1336
1337    /// Similar to "send" but does not shutdown the channel if an error occurs.
1338    pub fn send_no_shutdown_on_err(self, mut name: &str) -> Result<(), fidl::Error> {
1339        let _result = self.send_raw(name);
1340        self.drop_without_shutdown();
1341        _result
1342    }
1343
1344    fn send_raw(&self, mut name: &str) -> Result<(), fidl::Error> {
1345        self.control_handle.inner.send::<EndpointGetNameResponse>(
1346            (name,),
1347            self.tx_id,
1348            0x7d69650823557aab,
1349            fidl::encoding::DynamicFlags::empty(),
1350        )
1351    }
1352}
1353
1354#[must_use = "FIDL methods require a response to be sent"]
1355#[derive(Debug)]
1356pub struct EndpointSetLinkUpResponder {
1357    control_handle: std::mem::ManuallyDrop<EndpointControlHandle>,
1358    tx_id: u32,
1359}
1360
1361/// Set the the channel to be shutdown (see [`EndpointControlHandle::shutdown`])
1362/// if the responder is dropped without sending a response, so that the client
1363/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1364impl std::ops::Drop for EndpointSetLinkUpResponder {
1365    fn drop(&mut self) {
1366        self.control_handle.shutdown();
1367        // Safety: drops once, never accessed again
1368        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1369    }
1370}
1371
1372impl fidl::endpoints::Responder for EndpointSetLinkUpResponder {
1373    type ControlHandle = EndpointControlHandle;
1374
1375    fn control_handle(&self) -> &EndpointControlHandle {
1376        &self.control_handle
1377    }
1378
1379    fn drop_without_shutdown(mut self) {
1380        // Safety: drops once, never accessed again due to mem::forget
1381        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1382        // Prevent Drop from running (which would shut down the channel)
1383        std::mem::forget(self);
1384    }
1385}
1386
1387impl EndpointSetLinkUpResponder {
1388    /// Sends a response to the FIDL transaction.
1389    ///
1390    /// Sets the channel to shutdown if an error occurs.
1391    pub fn send(self) -> Result<(), fidl::Error> {
1392        let _result = self.send_raw();
1393        if _result.is_err() {
1394            self.control_handle.shutdown();
1395        }
1396        self.drop_without_shutdown();
1397        _result
1398    }
1399
1400    /// Similar to "send" but does not shutdown the channel if an error occurs.
1401    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
1402        let _result = self.send_raw();
1403        self.drop_without_shutdown();
1404        _result
1405    }
1406
1407    fn send_raw(&self) -> Result<(), fidl::Error> {
1408        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
1409            (),
1410            self.tx_id,
1411            0x4dde77de68d02e11,
1412            fidl::encoding::DynamicFlags::empty(),
1413        )
1414    }
1415}
1416
1417#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1418pub struct EndpointManagerMarker;
1419
1420impl fidl::endpoints::ProtocolMarker for EndpointManagerMarker {
1421    type Proxy = EndpointManagerProxy;
1422    type RequestStream = EndpointManagerRequestStream;
1423    #[cfg(target_os = "fuchsia")]
1424    type SynchronousProxy = EndpointManagerSynchronousProxy;
1425
1426    const DEBUG_NAME: &'static str = "(anonymous) EndpointManager";
1427}
1428
1429pub trait EndpointManagerProxyInterface: Send + Sync {
1430    type ListEndpointsResponseFut: std::future::Future<Output = Result<Vec<String>, fidl::Error>>
1431        + Send;
1432    fn r#list_endpoints(&self) -> Self::ListEndpointsResponseFut;
1433    type CreateEndpointResponseFut: std::future::Future<
1434            Output = Result<(i32, Option<fidl::endpoints::ClientEnd<EndpointMarker>>), fidl::Error>,
1435        > + Send;
1436    fn r#create_endpoint(
1437        &self,
1438        name: &str,
1439        config: &EndpointConfig,
1440    ) -> Self::CreateEndpointResponseFut;
1441    type GetEndpointResponseFut: std::future::Future<
1442            Output = Result<Option<fidl::endpoints::ClientEnd<EndpointMarker>>, fidl::Error>,
1443        > + Send;
1444    fn r#get_endpoint(&self, name: &str) -> Self::GetEndpointResponseFut;
1445}
1446#[derive(Debug)]
1447#[cfg(target_os = "fuchsia")]
1448pub struct EndpointManagerSynchronousProxy {
1449    client: fidl::client::sync::Client,
1450}
1451
1452#[cfg(target_os = "fuchsia")]
1453impl fidl::endpoints::SynchronousProxy for EndpointManagerSynchronousProxy {
1454    type Proxy = EndpointManagerProxy;
1455    type Protocol = EndpointManagerMarker;
1456
1457    fn from_channel(inner: fidl::Channel) -> Self {
1458        Self::new(inner)
1459    }
1460
1461    fn into_channel(self) -> fidl::Channel {
1462        self.client.into_channel()
1463    }
1464
1465    fn as_channel(&self) -> &fidl::Channel {
1466        self.client.as_channel()
1467    }
1468}
1469
1470#[cfg(target_os = "fuchsia")]
1471impl EndpointManagerSynchronousProxy {
1472    pub fn new(channel: fidl::Channel) -> Self {
1473        Self { client: fidl::client::sync::Client::new(channel) }
1474    }
1475
1476    pub fn into_channel(self) -> fidl::Channel {
1477        self.client.into_channel()
1478    }
1479
1480    /// Waits until an event arrives and returns it. It is safe for other
1481    /// threads to make concurrent requests while waiting for an event.
1482    pub fn wait_for_event(
1483        &self,
1484        deadline: zx::MonotonicInstant,
1485    ) -> Result<EndpointManagerEvent, fidl::Error> {
1486        EndpointManagerEvent::decode(self.client.wait_for_event::<EndpointManagerMarker>(deadline)?)
1487    }
1488
1489    /// Lists endpoints by name.
1490    pub fn r#list_endpoints(
1491        &self,
1492        ___deadline: zx::MonotonicInstant,
1493    ) -> Result<Vec<String>, fidl::Error> {
1494        let _response = self.client.send_query::<
1495            fidl::encoding::EmptyPayload,
1496            EndpointManagerListEndpointsResponse,
1497            EndpointManagerMarker,
1498        >(
1499            (),
1500            0x78c83d9454e3d228,
1501            fidl::encoding::DynamicFlags::empty(),
1502            ___deadline,
1503        )?;
1504        Ok(_response.endp)
1505    }
1506
1507    /// Creates endpoint with given name and config.
1508    pub fn r#create_endpoint(
1509        &self,
1510        mut name: &str,
1511        mut config: &EndpointConfig,
1512        ___deadline: zx::MonotonicInstant,
1513    ) -> Result<(i32, Option<fidl::endpoints::ClientEnd<EndpointMarker>>), fidl::Error> {
1514        let _response = self.client.send_query::<
1515            EndpointManagerCreateEndpointRequest,
1516            EndpointManagerCreateEndpointResponse,
1517            EndpointManagerMarker,
1518        >(
1519            (name, config,),
1520            0x7defe4cd5e4e7d7c,
1521            fidl::encoding::DynamicFlags::empty(),
1522            ___deadline,
1523        )?;
1524        Ok((_response.status, _response.endpoint))
1525    }
1526
1527    /// Gets a handle to an endpoint.
1528    pub fn r#get_endpoint(
1529        &self,
1530        mut name: &str,
1531        ___deadline: zx::MonotonicInstant,
1532    ) -> Result<Option<fidl::endpoints::ClientEnd<EndpointMarker>>, fidl::Error> {
1533        let _response = self.client.send_query::<
1534            EndpointManagerGetEndpointRequest,
1535            EndpointManagerGetEndpointResponse,
1536            EndpointManagerMarker,
1537        >(
1538            (name,),
1539            0x437e956b7b860751,
1540            fidl::encoding::DynamicFlags::empty(),
1541            ___deadline,
1542        )?;
1543        Ok(_response.endpoint)
1544    }
1545}
1546
1547#[cfg(target_os = "fuchsia")]
1548impl From<EndpointManagerSynchronousProxy> for zx::NullableHandle {
1549    fn from(value: EndpointManagerSynchronousProxy) -> Self {
1550        value.into_channel().into()
1551    }
1552}
1553
1554#[cfg(target_os = "fuchsia")]
1555impl From<fidl::Channel> for EndpointManagerSynchronousProxy {
1556    fn from(value: fidl::Channel) -> Self {
1557        Self::new(value)
1558    }
1559}
1560
1561#[cfg(target_os = "fuchsia")]
1562impl fidl::endpoints::FromClient for EndpointManagerSynchronousProxy {
1563    type Protocol = EndpointManagerMarker;
1564
1565    fn from_client(value: fidl::endpoints::ClientEnd<EndpointManagerMarker>) -> Self {
1566        Self::new(value.into_channel())
1567    }
1568}
1569
1570#[derive(Debug, Clone)]
1571pub struct EndpointManagerProxy {
1572    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1573}
1574
1575impl fidl::endpoints::Proxy for EndpointManagerProxy {
1576    type Protocol = EndpointManagerMarker;
1577
1578    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1579        Self::new(inner)
1580    }
1581
1582    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1583        self.client.into_channel().map_err(|client| Self { client })
1584    }
1585
1586    fn as_channel(&self) -> &::fidl::AsyncChannel {
1587        self.client.as_channel()
1588    }
1589}
1590
1591impl EndpointManagerProxy {
1592    /// Create a new Proxy for fuchsia.netemul.network/EndpointManager.
1593    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1594        let protocol_name = <EndpointManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1595        Self { client: fidl::client::Client::new(channel, protocol_name) }
1596    }
1597
1598    /// Get a Stream of events from the remote end of the protocol.
1599    ///
1600    /// # Panics
1601    ///
1602    /// Panics if the event stream was already taken.
1603    pub fn take_event_stream(&self) -> EndpointManagerEventStream {
1604        EndpointManagerEventStream { event_receiver: self.client.take_event_receiver() }
1605    }
1606
1607    /// Lists endpoints by name.
1608    pub fn r#list_endpoints(
1609        &self,
1610    ) -> fidl::client::QueryResponseFut<Vec<String>, fidl::encoding::DefaultFuchsiaResourceDialect>
1611    {
1612        EndpointManagerProxyInterface::r#list_endpoints(self)
1613    }
1614
1615    /// Creates endpoint with given name and config.
1616    pub fn r#create_endpoint(
1617        &self,
1618        mut name: &str,
1619        mut config: &EndpointConfig,
1620    ) -> fidl::client::QueryResponseFut<
1621        (i32, Option<fidl::endpoints::ClientEnd<EndpointMarker>>),
1622        fidl::encoding::DefaultFuchsiaResourceDialect,
1623    > {
1624        EndpointManagerProxyInterface::r#create_endpoint(self, name, config)
1625    }
1626
1627    /// Gets a handle to an endpoint.
1628    pub fn r#get_endpoint(
1629        &self,
1630        mut name: &str,
1631    ) -> fidl::client::QueryResponseFut<
1632        Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
1633        fidl::encoding::DefaultFuchsiaResourceDialect,
1634    > {
1635        EndpointManagerProxyInterface::r#get_endpoint(self, name)
1636    }
1637}
1638
1639impl EndpointManagerProxyInterface for EndpointManagerProxy {
1640    type ListEndpointsResponseFut =
1641        fidl::client::QueryResponseFut<Vec<String>, fidl::encoding::DefaultFuchsiaResourceDialect>;
1642    fn r#list_endpoints(&self) -> Self::ListEndpointsResponseFut {
1643        fn _decode(
1644            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1645        ) -> Result<Vec<String>, fidl::Error> {
1646            let _response = fidl::client::decode_transaction_body::<
1647                EndpointManagerListEndpointsResponse,
1648                fidl::encoding::DefaultFuchsiaResourceDialect,
1649                0x78c83d9454e3d228,
1650            >(_buf?)?;
1651            Ok(_response.endp)
1652        }
1653        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, Vec<String>>(
1654            (),
1655            0x78c83d9454e3d228,
1656            fidl::encoding::DynamicFlags::empty(),
1657            _decode,
1658        )
1659    }
1660
1661    type CreateEndpointResponseFut = fidl::client::QueryResponseFut<
1662        (i32, Option<fidl::endpoints::ClientEnd<EndpointMarker>>),
1663        fidl::encoding::DefaultFuchsiaResourceDialect,
1664    >;
1665    fn r#create_endpoint(
1666        &self,
1667        mut name: &str,
1668        mut config: &EndpointConfig,
1669    ) -> Self::CreateEndpointResponseFut {
1670        fn _decode(
1671            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1672        ) -> Result<(i32, Option<fidl::endpoints::ClientEnd<EndpointMarker>>), fidl::Error>
1673        {
1674            let _response = fidl::client::decode_transaction_body::<
1675                EndpointManagerCreateEndpointResponse,
1676                fidl::encoding::DefaultFuchsiaResourceDialect,
1677                0x7defe4cd5e4e7d7c,
1678            >(_buf?)?;
1679            Ok((_response.status, _response.endpoint))
1680        }
1681        self.client.send_query_and_decode::<
1682            EndpointManagerCreateEndpointRequest,
1683            (i32, Option<fidl::endpoints::ClientEnd<EndpointMarker>>),
1684        >(
1685            (name, config,),
1686            0x7defe4cd5e4e7d7c,
1687            fidl::encoding::DynamicFlags::empty(),
1688            _decode,
1689        )
1690    }
1691
1692    type GetEndpointResponseFut = fidl::client::QueryResponseFut<
1693        Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
1694        fidl::encoding::DefaultFuchsiaResourceDialect,
1695    >;
1696    fn r#get_endpoint(&self, mut name: &str) -> Self::GetEndpointResponseFut {
1697        fn _decode(
1698            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1699        ) -> Result<Option<fidl::endpoints::ClientEnd<EndpointMarker>>, fidl::Error> {
1700            let _response = fidl::client::decode_transaction_body::<
1701                EndpointManagerGetEndpointResponse,
1702                fidl::encoding::DefaultFuchsiaResourceDialect,
1703                0x437e956b7b860751,
1704            >(_buf?)?;
1705            Ok(_response.endpoint)
1706        }
1707        self.client.send_query_and_decode::<
1708            EndpointManagerGetEndpointRequest,
1709            Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
1710        >(
1711            (name,),
1712            0x437e956b7b860751,
1713            fidl::encoding::DynamicFlags::empty(),
1714            _decode,
1715        )
1716    }
1717}
1718
1719pub struct EndpointManagerEventStream {
1720    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1721}
1722
1723impl std::marker::Unpin for EndpointManagerEventStream {}
1724
1725impl futures::stream::FusedStream for EndpointManagerEventStream {
1726    fn is_terminated(&self) -> bool {
1727        self.event_receiver.is_terminated()
1728    }
1729}
1730
1731impl futures::Stream for EndpointManagerEventStream {
1732    type Item = Result<EndpointManagerEvent, fidl::Error>;
1733
1734    fn poll_next(
1735        mut self: std::pin::Pin<&mut Self>,
1736        cx: &mut std::task::Context<'_>,
1737    ) -> std::task::Poll<Option<Self::Item>> {
1738        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1739            &mut self.event_receiver,
1740            cx
1741        )?) {
1742            Some(buf) => std::task::Poll::Ready(Some(EndpointManagerEvent::decode(buf))),
1743            None => std::task::Poll::Ready(None),
1744        }
1745    }
1746}
1747
1748#[derive(Debug)]
1749pub enum EndpointManagerEvent {}
1750
1751impl EndpointManagerEvent {
1752    /// Decodes a message buffer as a [`EndpointManagerEvent`].
1753    fn decode(
1754        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1755    ) -> Result<EndpointManagerEvent, fidl::Error> {
1756        let (bytes, _handles) = buf.split_mut();
1757        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1758        debug_assert_eq!(tx_header.tx_id, 0);
1759        match tx_header.ordinal {
1760            _ => Err(fidl::Error::UnknownOrdinal {
1761                ordinal: tx_header.ordinal,
1762                protocol_name:
1763                    <EndpointManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1764            }),
1765        }
1766    }
1767}
1768
1769/// A Stream of incoming requests for fuchsia.netemul.network/EndpointManager.
1770pub struct EndpointManagerRequestStream {
1771    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1772    is_terminated: bool,
1773}
1774
1775impl std::marker::Unpin for EndpointManagerRequestStream {}
1776
1777impl futures::stream::FusedStream for EndpointManagerRequestStream {
1778    fn is_terminated(&self) -> bool {
1779        self.is_terminated
1780    }
1781}
1782
1783impl fidl::endpoints::RequestStream for EndpointManagerRequestStream {
1784    type Protocol = EndpointManagerMarker;
1785    type ControlHandle = EndpointManagerControlHandle;
1786
1787    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1788        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1789    }
1790
1791    fn control_handle(&self) -> Self::ControlHandle {
1792        EndpointManagerControlHandle { inner: self.inner.clone() }
1793    }
1794
1795    fn into_inner(
1796        self,
1797    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1798    {
1799        (self.inner, self.is_terminated)
1800    }
1801
1802    fn from_inner(
1803        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1804        is_terminated: bool,
1805    ) -> Self {
1806        Self { inner, is_terminated }
1807    }
1808}
1809
1810impl futures::Stream for EndpointManagerRequestStream {
1811    type Item = Result<EndpointManagerRequest, fidl::Error>;
1812
1813    fn poll_next(
1814        mut self: std::pin::Pin<&mut Self>,
1815        cx: &mut std::task::Context<'_>,
1816    ) -> std::task::Poll<Option<Self::Item>> {
1817        let this = &mut *self;
1818        if this.inner.check_shutdown(cx) {
1819            this.is_terminated = true;
1820            return std::task::Poll::Ready(None);
1821        }
1822        if this.is_terminated {
1823            panic!("polled EndpointManagerRequestStream after completion");
1824        }
1825        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1826            |bytes, handles| {
1827                match this.inner.channel().read_etc(cx, bytes, handles) {
1828                    std::task::Poll::Ready(Ok(())) => {}
1829                    std::task::Poll::Pending => return std::task::Poll::Pending,
1830                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1831                        this.is_terminated = true;
1832                        return std::task::Poll::Ready(None);
1833                    }
1834                    std::task::Poll::Ready(Err(e)) => {
1835                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1836                            e.into(),
1837                        ))));
1838                    }
1839                }
1840
1841                // A message has been received from the channel
1842                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1843
1844                std::task::Poll::Ready(Some(match header.ordinal {
1845                    0x78c83d9454e3d228 => {
1846                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1847                        let mut req = fidl::new_empty!(
1848                            fidl::encoding::EmptyPayload,
1849                            fidl::encoding::DefaultFuchsiaResourceDialect
1850                        );
1851                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1852                        let control_handle =
1853                            EndpointManagerControlHandle { inner: this.inner.clone() };
1854                        Ok(EndpointManagerRequest::ListEndpoints {
1855                            responder: EndpointManagerListEndpointsResponder {
1856                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1857                                tx_id: header.tx_id,
1858                            },
1859                        })
1860                    }
1861                    0x7defe4cd5e4e7d7c => {
1862                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1863                        let mut req = fidl::new_empty!(
1864                            EndpointManagerCreateEndpointRequest,
1865                            fidl::encoding::DefaultFuchsiaResourceDialect
1866                        );
1867                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<EndpointManagerCreateEndpointRequest>(&header, _body_bytes, handles, &mut req)?;
1868                        let control_handle =
1869                            EndpointManagerControlHandle { inner: this.inner.clone() };
1870                        Ok(EndpointManagerRequest::CreateEndpoint {
1871                            name: req.name,
1872                            config: req.config,
1873
1874                            responder: EndpointManagerCreateEndpointResponder {
1875                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1876                                tx_id: header.tx_id,
1877                            },
1878                        })
1879                    }
1880                    0x437e956b7b860751 => {
1881                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1882                        let mut req = fidl::new_empty!(
1883                            EndpointManagerGetEndpointRequest,
1884                            fidl::encoding::DefaultFuchsiaResourceDialect
1885                        );
1886                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<EndpointManagerGetEndpointRequest>(&header, _body_bytes, handles, &mut req)?;
1887                        let control_handle =
1888                            EndpointManagerControlHandle { inner: this.inner.clone() };
1889                        Ok(EndpointManagerRequest::GetEndpoint {
1890                            name: req.name,
1891
1892                            responder: EndpointManagerGetEndpointResponder {
1893                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1894                                tx_id: header.tx_id,
1895                            },
1896                        })
1897                    }
1898                    _ => Err(fidl::Error::UnknownOrdinal {
1899                        ordinal: header.ordinal,
1900                        protocol_name:
1901                            <EndpointManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1902                    }),
1903                }))
1904            },
1905        )
1906    }
1907}
1908
1909/// Manages virtual endpoints.
1910#[derive(Debug)]
1911pub enum EndpointManagerRequest {
1912    /// Lists endpoints by name.
1913    ListEndpoints { responder: EndpointManagerListEndpointsResponder },
1914    /// Creates endpoint with given name and config.
1915    CreateEndpoint {
1916        name: String,
1917        config: EndpointConfig,
1918        responder: EndpointManagerCreateEndpointResponder,
1919    },
1920    /// Gets a handle to an endpoint.
1921    GetEndpoint { name: String, responder: EndpointManagerGetEndpointResponder },
1922}
1923
1924impl EndpointManagerRequest {
1925    #[allow(irrefutable_let_patterns)]
1926    pub fn into_list_endpoints(self) -> Option<(EndpointManagerListEndpointsResponder)> {
1927        if let EndpointManagerRequest::ListEndpoints { responder } = self {
1928            Some((responder))
1929        } else {
1930            None
1931        }
1932    }
1933
1934    #[allow(irrefutable_let_patterns)]
1935    pub fn into_create_endpoint(
1936        self,
1937    ) -> Option<(String, EndpointConfig, EndpointManagerCreateEndpointResponder)> {
1938        if let EndpointManagerRequest::CreateEndpoint { name, config, responder } = self {
1939            Some((name, config, responder))
1940        } else {
1941            None
1942        }
1943    }
1944
1945    #[allow(irrefutable_let_patterns)]
1946    pub fn into_get_endpoint(self) -> Option<(String, EndpointManagerGetEndpointResponder)> {
1947        if let EndpointManagerRequest::GetEndpoint { name, responder } = self {
1948            Some((name, responder))
1949        } else {
1950            None
1951        }
1952    }
1953
1954    /// Name of the method defined in FIDL
1955    pub fn method_name(&self) -> &'static str {
1956        match *self {
1957            EndpointManagerRequest::ListEndpoints { .. } => "list_endpoints",
1958            EndpointManagerRequest::CreateEndpoint { .. } => "create_endpoint",
1959            EndpointManagerRequest::GetEndpoint { .. } => "get_endpoint",
1960        }
1961    }
1962}
1963
1964#[derive(Debug, Clone)]
1965pub struct EndpointManagerControlHandle {
1966    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1967}
1968
1969impl fidl::endpoints::ControlHandle for EndpointManagerControlHandle {
1970    fn shutdown(&self) {
1971        self.inner.shutdown()
1972    }
1973
1974    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1975        self.inner.shutdown_with_epitaph(status)
1976    }
1977
1978    fn is_closed(&self) -> bool {
1979        self.inner.channel().is_closed()
1980    }
1981    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1982        self.inner.channel().on_closed()
1983    }
1984
1985    #[cfg(target_os = "fuchsia")]
1986    fn signal_peer(
1987        &self,
1988        clear_mask: zx::Signals,
1989        set_mask: zx::Signals,
1990    ) -> Result<(), zx_status::Status> {
1991        use fidl::Peered;
1992        self.inner.channel().signal_peer(clear_mask, set_mask)
1993    }
1994}
1995
1996impl EndpointManagerControlHandle {}
1997
1998#[must_use = "FIDL methods require a response to be sent"]
1999#[derive(Debug)]
2000pub struct EndpointManagerListEndpointsResponder {
2001    control_handle: std::mem::ManuallyDrop<EndpointManagerControlHandle>,
2002    tx_id: u32,
2003}
2004
2005/// Set the the channel to be shutdown (see [`EndpointManagerControlHandle::shutdown`])
2006/// if the responder is dropped without sending a response, so that the client
2007/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2008impl std::ops::Drop for EndpointManagerListEndpointsResponder {
2009    fn drop(&mut self) {
2010        self.control_handle.shutdown();
2011        // Safety: drops once, never accessed again
2012        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2013    }
2014}
2015
2016impl fidl::endpoints::Responder for EndpointManagerListEndpointsResponder {
2017    type ControlHandle = EndpointManagerControlHandle;
2018
2019    fn control_handle(&self) -> &EndpointManagerControlHandle {
2020        &self.control_handle
2021    }
2022
2023    fn drop_without_shutdown(mut self) {
2024        // Safety: drops once, never accessed again due to mem::forget
2025        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2026        // Prevent Drop from running (which would shut down the channel)
2027        std::mem::forget(self);
2028    }
2029}
2030
2031impl EndpointManagerListEndpointsResponder {
2032    /// Sends a response to the FIDL transaction.
2033    ///
2034    /// Sets the channel to shutdown if an error occurs.
2035    pub fn send(self, mut endp: &[String]) -> Result<(), fidl::Error> {
2036        let _result = self.send_raw(endp);
2037        if _result.is_err() {
2038            self.control_handle.shutdown();
2039        }
2040        self.drop_without_shutdown();
2041        _result
2042    }
2043
2044    /// Similar to "send" but does not shutdown the channel if an error occurs.
2045    pub fn send_no_shutdown_on_err(self, mut endp: &[String]) -> Result<(), fidl::Error> {
2046        let _result = self.send_raw(endp);
2047        self.drop_without_shutdown();
2048        _result
2049    }
2050
2051    fn send_raw(&self, mut endp: &[String]) -> Result<(), fidl::Error> {
2052        self.control_handle.inner.send::<EndpointManagerListEndpointsResponse>(
2053            (endp,),
2054            self.tx_id,
2055            0x78c83d9454e3d228,
2056            fidl::encoding::DynamicFlags::empty(),
2057        )
2058    }
2059}
2060
2061#[must_use = "FIDL methods require a response to be sent"]
2062#[derive(Debug)]
2063pub struct EndpointManagerCreateEndpointResponder {
2064    control_handle: std::mem::ManuallyDrop<EndpointManagerControlHandle>,
2065    tx_id: u32,
2066}
2067
2068/// Set the the channel to be shutdown (see [`EndpointManagerControlHandle::shutdown`])
2069/// if the responder is dropped without sending a response, so that the client
2070/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2071impl std::ops::Drop for EndpointManagerCreateEndpointResponder {
2072    fn drop(&mut self) {
2073        self.control_handle.shutdown();
2074        // Safety: drops once, never accessed again
2075        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2076    }
2077}
2078
2079impl fidl::endpoints::Responder for EndpointManagerCreateEndpointResponder {
2080    type ControlHandle = EndpointManagerControlHandle;
2081
2082    fn control_handle(&self) -> &EndpointManagerControlHandle {
2083        &self.control_handle
2084    }
2085
2086    fn drop_without_shutdown(mut self) {
2087        // Safety: drops once, never accessed again due to mem::forget
2088        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2089        // Prevent Drop from running (which would shut down the channel)
2090        std::mem::forget(self);
2091    }
2092}
2093
2094impl EndpointManagerCreateEndpointResponder {
2095    /// Sends a response to the FIDL transaction.
2096    ///
2097    /// Sets the channel to shutdown if an error occurs.
2098    pub fn send(
2099        self,
2100        mut status: i32,
2101        mut endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
2102    ) -> Result<(), fidl::Error> {
2103        let _result = self.send_raw(status, endpoint);
2104        if _result.is_err() {
2105            self.control_handle.shutdown();
2106        }
2107        self.drop_without_shutdown();
2108        _result
2109    }
2110
2111    /// Similar to "send" but does not shutdown the channel if an error occurs.
2112    pub fn send_no_shutdown_on_err(
2113        self,
2114        mut status: i32,
2115        mut endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
2116    ) -> Result<(), fidl::Error> {
2117        let _result = self.send_raw(status, endpoint);
2118        self.drop_without_shutdown();
2119        _result
2120    }
2121
2122    fn send_raw(
2123        &self,
2124        mut status: i32,
2125        mut endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
2126    ) -> Result<(), fidl::Error> {
2127        self.control_handle.inner.send::<EndpointManagerCreateEndpointResponse>(
2128            (status, endpoint),
2129            self.tx_id,
2130            0x7defe4cd5e4e7d7c,
2131            fidl::encoding::DynamicFlags::empty(),
2132        )
2133    }
2134}
2135
2136#[must_use = "FIDL methods require a response to be sent"]
2137#[derive(Debug)]
2138pub struct EndpointManagerGetEndpointResponder {
2139    control_handle: std::mem::ManuallyDrop<EndpointManagerControlHandle>,
2140    tx_id: u32,
2141}
2142
2143/// Set the the channel to be shutdown (see [`EndpointManagerControlHandle::shutdown`])
2144/// if the responder is dropped without sending a response, so that the client
2145/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2146impl std::ops::Drop for EndpointManagerGetEndpointResponder {
2147    fn drop(&mut self) {
2148        self.control_handle.shutdown();
2149        // Safety: drops once, never accessed again
2150        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2151    }
2152}
2153
2154impl fidl::endpoints::Responder for EndpointManagerGetEndpointResponder {
2155    type ControlHandle = EndpointManagerControlHandle;
2156
2157    fn control_handle(&self) -> &EndpointManagerControlHandle {
2158        &self.control_handle
2159    }
2160
2161    fn drop_without_shutdown(mut self) {
2162        // Safety: drops once, never accessed again due to mem::forget
2163        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2164        // Prevent Drop from running (which would shut down the channel)
2165        std::mem::forget(self);
2166    }
2167}
2168
2169impl EndpointManagerGetEndpointResponder {
2170    /// Sends a response to the FIDL transaction.
2171    ///
2172    /// Sets the channel to shutdown if an error occurs.
2173    pub fn send(
2174        self,
2175        mut endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
2176    ) -> Result<(), fidl::Error> {
2177        let _result = self.send_raw(endpoint);
2178        if _result.is_err() {
2179            self.control_handle.shutdown();
2180        }
2181        self.drop_without_shutdown();
2182        _result
2183    }
2184
2185    /// Similar to "send" but does not shutdown the channel if an error occurs.
2186    pub fn send_no_shutdown_on_err(
2187        self,
2188        mut endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
2189    ) -> Result<(), fidl::Error> {
2190        let _result = self.send_raw(endpoint);
2191        self.drop_without_shutdown();
2192        _result
2193    }
2194
2195    fn send_raw(
2196        &self,
2197        mut endpoint: Option<fidl::endpoints::ClientEnd<EndpointMarker>>,
2198    ) -> Result<(), fidl::Error> {
2199        self.control_handle.inner.send::<EndpointManagerGetEndpointResponse>(
2200            (endpoint,),
2201            self.tx_id,
2202            0x437e956b7b860751,
2203            fidl::encoding::DynamicFlags::empty(),
2204        )
2205    }
2206}
2207
2208#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2209pub struct FakeEndpointMarker;
2210
2211impl fidl::endpoints::ProtocolMarker for FakeEndpointMarker {
2212    type Proxy = FakeEndpointProxy;
2213    type RequestStream = FakeEndpointRequestStream;
2214    #[cfg(target_os = "fuchsia")]
2215    type SynchronousProxy = FakeEndpointSynchronousProxy;
2216
2217    const DEBUG_NAME: &'static str = "(anonymous) FakeEndpoint";
2218}
2219
2220pub trait FakeEndpointProxyInterface: Send + Sync {
2221    type WriteResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
2222    fn r#write(&self, data: &[u8]) -> Self::WriteResponseFut;
2223    type ReadResponseFut: std::future::Future<Output = Result<(Vec<u8>, u64), fidl::Error>> + Send;
2224    fn r#read(&self) -> Self::ReadResponseFut;
2225}
2226#[derive(Debug)]
2227#[cfg(target_os = "fuchsia")]
2228pub struct FakeEndpointSynchronousProxy {
2229    client: fidl::client::sync::Client,
2230}
2231
2232#[cfg(target_os = "fuchsia")]
2233impl fidl::endpoints::SynchronousProxy for FakeEndpointSynchronousProxy {
2234    type Proxy = FakeEndpointProxy;
2235    type Protocol = FakeEndpointMarker;
2236
2237    fn from_channel(inner: fidl::Channel) -> Self {
2238        Self::new(inner)
2239    }
2240
2241    fn into_channel(self) -> fidl::Channel {
2242        self.client.into_channel()
2243    }
2244
2245    fn as_channel(&self) -> &fidl::Channel {
2246        self.client.as_channel()
2247    }
2248}
2249
2250#[cfg(target_os = "fuchsia")]
2251impl FakeEndpointSynchronousProxy {
2252    pub fn new(channel: fidl::Channel) -> Self {
2253        Self { client: fidl::client::sync::Client::new(channel) }
2254    }
2255
2256    pub fn into_channel(self) -> fidl::Channel {
2257        self.client.into_channel()
2258    }
2259
2260    /// Waits until an event arrives and returns it. It is safe for other
2261    /// threads to make concurrent requests while waiting for an event.
2262    pub fn wait_for_event(
2263        &self,
2264        deadline: zx::MonotonicInstant,
2265    ) -> Result<FakeEndpointEvent, fidl::Error> {
2266        FakeEndpointEvent::decode(self.client.wait_for_event::<FakeEndpointMarker>(deadline)?)
2267    }
2268
2269    /// Writes a frame to the network.
2270    pub fn r#write(
2271        &self,
2272        mut data: &[u8],
2273        ___deadline: zx::MonotonicInstant,
2274    ) -> Result<(), fidl::Error> {
2275        let _response = self.client.send_query::<
2276            FakeEndpointWriteRequest,
2277            fidl::encoding::EmptyPayload,
2278            FakeEndpointMarker,
2279        >(
2280            (data,),
2281            0x2c54af94338c523b,
2282            fidl::encoding::DynamicFlags::empty(),
2283            ___deadline,
2284        )?;
2285        Ok(_response)
2286    }
2287
2288    /// Reads a single frame from the network.
2289    ///
2290    /// Blocks until new data is available to be read. FakeEndpoint will keep a limited amount of
2291    /// frames to be read, dropping the oldest ones if the data is not fetched fast enough. The
2292    /// number of dropped frames since the last call to `Read` is returned in `dropped_frames`.
2293    ///
2294    /// Issuing a second `Read` request when the first one is still pending will cause the channel
2295    /// to be closed with `ZX_ERR_BAD_STATE`.
2296    pub fn r#read(&self, ___deadline: zx::MonotonicInstant) -> Result<(Vec<u8>, u64), fidl::Error> {
2297        let _response = self.client.send_query::<
2298            fidl::encoding::EmptyPayload,
2299            FakeEndpointReadResponse,
2300            FakeEndpointMarker,
2301        >(
2302            (),
2303            0x58e2d032a8f36234,
2304            fidl::encoding::DynamicFlags::empty(),
2305            ___deadline,
2306        )?;
2307        Ok((_response.data, _response.dropped_frames))
2308    }
2309}
2310
2311#[cfg(target_os = "fuchsia")]
2312impl From<FakeEndpointSynchronousProxy> for zx::NullableHandle {
2313    fn from(value: FakeEndpointSynchronousProxy) -> Self {
2314        value.into_channel().into()
2315    }
2316}
2317
2318#[cfg(target_os = "fuchsia")]
2319impl From<fidl::Channel> for FakeEndpointSynchronousProxy {
2320    fn from(value: fidl::Channel) -> Self {
2321        Self::new(value)
2322    }
2323}
2324
2325#[cfg(target_os = "fuchsia")]
2326impl fidl::endpoints::FromClient for FakeEndpointSynchronousProxy {
2327    type Protocol = FakeEndpointMarker;
2328
2329    fn from_client(value: fidl::endpoints::ClientEnd<FakeEndpointMarker>) -> Self {
2330        Self::new(value.into_channel())
2331    }
2332}
2333
2334#[derive(Debug, Clone)]
2335pub struct FakeEndpointProxy {
2336    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2337}
2338
2339impl fidl::endpoints::Proxy for FakeEndpointProxy {
2340    type Protocol = FakeEndpointMarker;
2341
2342    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2343        Self::new(inner)
2344    }
2345
2346    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2347        self.client.into_channel().map_err(|client| Self { client })
2348    }
2349
2350    fn as_channel(&self) -> &::fidl::AsyncChannel {
2351        self.client.as_channel()
2352    }
2353}
2354
2355impl FakeEndpointProxy {
2356    /// Create a new Proxy for fuchsia.netemul.network/FakeEndpoint.
2357    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2358        let protocol_name = <FakeEndpointMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2359        Self { client: fidl::client::Client::new(channel, protocol_name) }
2360    }
2361
2362    /// Get a Stream of events from the remote end of the protocol.
2363    ///
2364    /// # Panics
2365    ///
2366    /// Panics if the event stream was already taken.
2367    pub fn take_event_stream(&self) -> FakeEndpointEventStream {
2368        FakeEndpointEventStream { event_receiver: self.client.take_event_receiver() }
2369    }
2370
2371    /// Writes a frame to the network.
2372    pub fn r#write(
2373        &self,
2374        mut data: &[u8],
2375    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
2376        FakeEndpointProxyInterface::r#write(self, data)
2377    }
2378
2379    /// Reads a single frame from the network.
2380    ///
2381    /// Blocks until new data is available to be read. FakeEndpoint will keep a limited amount of
2382    /// frames to be read, dropping the oldest ones if the data is not fetched fast enough. The
2383    /// number of dropped frames since the last call to `Read` is returned in `dropped_frames`.
2384    ///
2385    /// Issuing a second `Read` request when the first one is still pending will cause the channel
2386    /// to be closed with `ZX_ERR_BAD_STATE`.
2387    pub fn r#read(
2388        &self,
2389    ) -> fidl::client::QueryResponseFut<(Vec<u8>, u64), fidl::encoding::DefaultFuchsiaResourceDialect>
2390    {
2391        FakeEndpointProxyInterface::r#read(self)
2392    }
2393}
2394
2395impl FakeEndpointProxyInterface for FakeEndpointProxy {
2396    type WriteResponseFut =
2397        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
2398    fn r#write(&self, mut data: &[u8]) -> Self::WriteResponseFut {
2399        fn _decode(
2400            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2401        ) -> Result<(), fidl::Error> {
2402            let _response = fidl::client::decode_transaction_body::<
2403                fidl::encoding::EmptyPayload,
2404                fidl::encoding::DefaultFuchsiaResourceDialect,
2405                0x2c54af94338c523b,
2406            >(_buf?)?;
2407            Ok(_response)
2408        }
2409        self.client.send_query_and_decode::<FakeEndpointWriteRequest, ()>(
2410            (data,),
2411            0x2c54af94338c523b,
2412            fidl::encoding::DynamicFlags::empty(),
2413            _decode,
2414        )
2415    }
2416
2417    type ReadResponseFut = fidl::client::QueryResponseFut<
2418        (Vec<u8>, u64),
2419        fidl::encoding::DefaultFuchsiaResourceDialect,
2420    >;
2421    fn r#read(&self) -> Self::ReadResponseFut {
2422        fn _decode(
2423            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2424        ) -> Result<(Vec<u8>, u64), fidl::Error> {
2425            let _response = fidl::client::decode_transaction_body::<
2426                FakeEndpointReadResponse,
2427                fidl::encoding::DefaultFuchsiaResourceDialect,
2428                0x58e2d032a8f36234,
2429            >(_buf?)?;
2430            Ok((_response.data, _response.dropped_frames))
2431        }
2432        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, (Vec<u8>, u64)>(
2433            (),
2434            0x58e2d032a8f36234,
2435            fidl::encoding::DynamicFlags::empty(),
2436            _decode,
2437        )
2438    }
2439}
2440
2441pub struct FakeEndpointEventStream {
2442    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2443}
2444
2445impl std::marker::Unpin for FakeEndpointEventStream {}
2446
2447impl futures::stream::FusedStream for FakeEndpointEventStream {
2448    fn is_terminated(&self) -> bool {
2449        self.event_receiver.is_terminated()
2450    }
2451}
2452
2453impl futures::Stream for FakeEndpointEventStream {
2454    type Item = Result<FakeEndpointEvent, fidl::Error>;
2455
2456    fn poll_next(
2457        mut self: std::pin::Pin<&mut Self>,
2458        cx: &mut std::task::Context<'_>,
2459    ) -> std::task::Poll<Option<Self::Item>> {
2460        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2461            &mut self.event_receiver,
2462            cx
2463        )?) {
2464            Some(buf) => std::task::Poll::Ready(Some(FakeEndpointEvent::decode(buf))),
2465            None => std::task::Poll::Ready(None),
2466        }
2467    }
2468}
2469
2470#[derive(Debug)]
2471pub enum FakeEndpointEvent {}
2472
2473impl FakeEndpointEvent {
2474    /// Decodes a message buffer as a [`FakeEndpointEvent`].
2475    fn decode(
2476        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2477    ) -> Result<FakeEndpointEvent, fidl::Error> {
2478        let (bytes, _handles) = buf.split_mut();
2479        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2480        debug_assert_eq!(tx_header.tx_id, 0);
2481        match tx_header.ordinal {
2482            _ => Err(fidl::Error::UnknownOrdinal {
2483                ordinal: tx_header.ordinal,
2484                protocol_name: <FakeEndpointMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2485            }),
2486        }
2487    }
2488}
2489
2490/// A Stream of incoming requests for fuchsia.netemul.network/FakeEndpoint.
2491pub struct FakeEndpointRequestStream {
2492    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2493    is_terminated: bool,
2494}
2495
2496impl std::marker::Unpin for FakeEndpointRequestStream {}
2497
2498impl futures::stream::FusedStream for FakeEndpointRequestStream {
2499    fn is_terminated(&self) -> bool {
2500        self.is_terminated
2501    }
2502}
2503
2504impl fidl::endpoints::RequestStream for FakeEndpointRequestStream {
2505    type Protocol = FakeEndpointMarker;
2506    type ControlHandle = FakeEndpointControlHandle;
2507
2508    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2509        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2510    }
2511
2512    fn control_handle(&self) -> Self::ControlHandle {
2513        FakeEndpointControlHandle { inner: self.inner.clone() }
2514    }
2515
2516    fn into_inner(
2517        self,
2518    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2519    {
2520        (self.inner, self.is_terminated)
2521    }
2522
2523    fn from_inner(
2524        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2525        is_terminated: bool,
2526    ) -> Self {
2527        Self { inner, is_terminated }
2528    }
2529}
2530
2531impl futures::Stream for FakeEndpointRequestStream {
2532    type Item = Result<FakeEndpointRequest, fidl::Error>;
2533
2534    fn poll_next(
2535        mut self: std::pin::Pin<&mut Self>,
2536        cx: &mut std::task::Context<'_>,
2537    ) -> std::task::Poll<Option<Self::Item>> {
2538        let this = &mut *self;
2539        if this.inner.check_shutdown(cx) {
2540            this.is_terminated = true;
2541            return std::task::Poll::Ready(None);
2542        }
2543        if this.is_terminated {
2544            panic!("polled FakeEndpointRequestStream after completion");
2545        }
2546        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2547            |bytes, handles| {
2548                match this.inner.channel().read_etc(cx, bytes, handles) {
2549                    std::task::Poll::Ready(Ok(())) => {}
2550                    std::task::Poll::Pending => return std::task::Poll::Pending,
2551                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2552                        this.is_terminated = true;
2553                        return std::task::Poll::Ready(None);
2554                    }
2555                    std::task::Poll::Ready(Err(e)) => {
2556                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2557                            e.into(),
2558                        ))));
2559                    }
2560                }
2561
2562                // A message has been received from the channel
2563                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2564
2565                std::task::Poll::Ready(Some(match header.ordinal {
2566                    0x2c54af94338c523b => {
2567                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2568                        let mut req = fidl::new_empty!(
2569                            FakeEndpointWriteRequest,
2570                            fidl::encoding::DefaultFuchsiaResourceDialect
2571                        );
2572                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<FakeEndpointWriteRequest>(&header, _body_bytes, handles, &mut req)?;
2573                        let control_handle =
2574                            FakeEndpointControlHandle { inner: this.inner.clone() };
2575                        Ok(FakeEndpointRequest::Write {
2576                            data: req.data,
2577
2578                            responder: FakeEndpointWriteResponder {
2579                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2580                                tx_id: header.tx_id,
2581                            },
2582                        })
2583                    }
2584                    0x58e2d032a8f36234 => {
2585                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2586                        let mut req = fidl::new_empty!(
2587                            fidl::encoding::EmptyPayload,
2588                            fidl::encoding::DefaultFuchsiaResourceDialect
2589                        );
2590                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
2591                        let control_handle =
2592                            FakeEndpointControlHandle { inner: this.inner.clone() };
2593                        Ok(FakeEndpointRequest::Read {
2594                            responder: FakeEndpointReadResponder {
2595                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2596                                tx_id: header.tx_id,
2597                            },
2598                        })
2599                    }
2600                    _ => Err(fidl::Error::UnknownOrdinal {
2601                        ordinal: header.ordinal,
2602                        protocol_name:
2603                            <FakeEndpointMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2604                    }),
2605                }))
2606            },
2607        )
2608    }
2609}
2610
2611/// Fake endpoint can be added to a network to snoop or inject packets.
2612#[derive(Debug)]
2613pub enum FakeEndpointRequest {
2614    /// Writes a frame to the network.
2615    Write { data: Vec<u8>, responder: FakeEndpointWriteResponder },
2616    /// Reads a single frame from the network.
2617    ///
2618    /// Blocks until new data is available to be read. FakeEndpoint will keep a limited amount of
2619    /// frames to be read, dropping the oldest ones if the data is not fetched fast enough. The
2620    /// number of dropped frames since the last call to `Read` is returned in `dropped_frames`.
2621    ///
2622    /// Issuing a second `Read` request when the first one is still pending will cause the channel
2623    /// to be closed with `ZX_ERR_BAD_STATE`.
2624    Read { responder: FakeEndpointReadResponder },
2625}
2626
2627impl FakeEndpointRequest {
2628    #[allow(irrefutable_let_patterns)]
2629    pub fn into_write(self) -> Option<(Vec<u8>, FakeEndpointWriteResponder)> {
2630        if let FakeEndpointRequest::Write { data, responder } = self {
2631            Some((data, responder))
2632        } else {
2633            None
2634        }
2635    }
2636
2637    #[allow(irrefutable_let_patterns)]
2638    pub fn into_read(self) -> Option<(FakeEndpointReadResponder)> {
2639        if let FakeEndpointRequest::Read { responder } = self { Some((responder)) } else { None }
2640    }
2641
2642    /// Name of the method defined in FIDL
2643    pub fn method_name(&self) -> &'static str {
2644        match *self {
2645            FakeEndpointRequest::Write { .. } => "write",
2646            FakeEndpointRequest::Read { .. } => "read",
2647        }
2648    }
2649}
2650
2651#[derive(Debug, Clone)]
2652pub struct FakeEndpointControlHandle {
2653    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2654}
2655
2656impl fidl::endpoints::ControlHandle for FakeEndpointControlHandle {
2657    fn shutdown(&self) {
2658        self.inner.shutdown()
2659    }
2660
2661    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2662        self.inner.shutdown_with_epitaph(status)
2663    }
2664
2665    fn is_closed(&self) -> bool {
2666        self.inner.channel().is_closed()
2667    }
2668    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2669        self.inner.channel().on_closed()
2670    }
2671
2672    #[cfg(target_os = "fuchsia")]
2673    fn signal_peer(
2674        &self,
2675        clear_mask: zx::Signals,
2676        set_mask: zx::Signals,
2677    ) -> Result<(), zx_status::Status> {
2678        use fidl::Peered;
2679        self.inner.channel().signal_peer(clear_mask, set_mask)
2680    }
2681}
2682
2683impl FakeEndpointControlHandle {}
2684
2685#[must_use = "FIDL methods require a response to be sent"]
2686#[derive(Debug)]
2687pub struct FakeEndpointWriteResponder {
2688    control_handle: std::mem::ManuallyDrop<FakeEndpointControlHandle>,
2689    tx_id: u32,
2690}
2691
2692/// Set the the channel to be shutdown (see [`FakeEndpointControlHandle::shutdown`])
2693/// if the responder is dropped without sending a response, so that the client
2694/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2695impl std::ops::Drop for FakeEndpointWriteResponder {
2696    fn drop(&mut self) {
2697        self.control_handle.shutdown();
2698        // Safety: drops once, never accessed again
2699        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2700    }
2701}
2702
2703impl fidl::endpoints::Responder for FakeEndpointWriteResponder {
2704    type ControlHandle = FakeEndpointControlHandle;
2705
2706    fn control_handle(&self) -> &FakeEndpointControlHandle {
2707        &self.control_handle
2708    }
2709
2710    fn drop_without_shutdown(mut self) {
2711        // Safety: drops once, never accessed again due to mem::forget
2712        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2713        // Prevent Drop from running (which would shut down the channel)
2714        std::mem::forget(self);
2715    }
2716}
2717
2718impl FakeEndpointWriteResponder {
2719    /// Sends a response to the FIDL transaction.
2720    ///
2721    /// Sets the channel to shutdown if an error occurs.
2722    pub fn send(self) -> Result<(), fidl::Error> {
2723        let _result = self.send_raw();
2724        if _result.is_err() {
2725            self.control_handle.shutdown();
2726        }
2727        self.drop_without_shutdown();
2728        _result
2729    }
2730
2731    /// Similar to "send" but does not shutdown the channel if an error occurs.
2732    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
2733        let _result = self.send_raw();
2734        self.drop_without_shutdown();
2735        _result
2736    }
2737
2738    fn send_raw(&self) -> Result<(), fidl::Error> {
2739        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
2740            (),
2741            self.tx_id,
2742            0x2c54af94338c523b,
2743            fidl::encoding::DynamicFlags::empty(),
2744        )
2745    }
2746}
2747
2748#[must_use = "FIDL methods require a response to be sent"]
2749#[derive(Debug)]
2750pub struct FakeEndpointReadResponder {
2751    control_handle: std::mem::ManuallyDrop<FakeEndpointControlHandle>,
2752    tx_id: u32,
2753}
2754
2755/// Set the the channel to be shutdown (see [`FakeEndpointControlHandle::shutdown`])
2756/// if the responder is dropped without sending a response, so that the client
2757/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2758impl std::ops::Drop for FakeEndpointReadResponder {
2759    fn drop(&mut self) {
2760        self.control_handle.shutdown();
2761        // Safety: drops once, never accessed again
2762        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2763    }
2764}
2765
2766impl fidl::endpoints::Responder for FakeEndpointReadResponder {
2767    type ControlHandle = FakeEndpointControlHandle;
2768
2769    fn control_handle(&self) -> &FakeEndpointControlHandle {
2770        &self.control_handle
2771    }
2772
2773    fn drop_without_shutdown(mut self) {
2774        // Safety: drops once, never accessed again due to mem::forget
2775        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2776        // Prevent Drop from running (which would shut down the channel)
2777        std::mem::forget(self);
2778    }
2779}
2780
2781impl FakeEndpointReadResponder {
2782    /// Sends a response to the FIDL transaction.
2783    ///
2784    /// Sets the channel to shutdown if an error occurs.
2785    pub fn send(self, mut data: &[u8], mut dropped_frames: u64) -> Result<(), fidl::Error> {
2786        let _result = self.send_raw(data, dropped_frames);
2787        if _result.is_err() {
2788            self.control_handle.shutdown();
2789        }
2790        self.drop_without_shutdown();
2791        _result
2792    }
2793
2794    /// Similar to "send" but does not shutdown the channel if an error occurs.
2795    pub fn send_no_shutdown_on_err(
2796        self,
2797        mut data: &[u8],
2798        mut dropped_frames: u64,
2799    ) -> Result<(), fidl::Error> {
2800        let _result = self.send_raw(data, dropped_frames);
2801        self.drop_without_shutdown();
2802        _result
2803    }
2804
2805    fn send_raw(&self, mut data: &[u8], mut dropped_frames: u64) -> Result<(), fidl::Error> {
2806        self.control_handle.inner.send::<FakeEndpointReadResponse>(
2807            (data, dropped_frames),
2808            self.tx_id,
2809            0x58e2d032a8f36234,
2810            fidl::encoding::DynamicFlags::empty(),
2811        )
2812    }
2813}
2814
2815#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2816pub struct NetworkMarker;
2817
2818impl fidl::endpoints::ProtocolMarker for NetworkMarker {
2819    type Proxy = NetworkProxy;
2820    type RequestStream = NetworkRequestStream;
2821    #[cfg(target_os = "fuchsia")]
2822    type SynchronousProxy = NetworkSynchronousProxy;
2823
2824    const DEBUG_NAME: &'static str = "(anonymous) Network";
2825}
2826
2827pub trait NetworkProxyInterface: Send + Sync {
2828    fn r#add_port(
2829        &self,
2830        port: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
2831        interface: fidl::endpoints::ServerEnd<fidl_fuchsia_net_virtualization::InterfaceMarker>,
2832    ) -> Result<(), fidl::Error>;
2833    type GetConfigResponseFut: std::future::Future<Output = Result<NetworkConfig, fidl::Error>>
2834        + Send;
2835    fn r#get_config(&self) -> Self::GetConfigResponseFut;
2836    type GetNameResponseFut: std::future::Future<Output = Result<String, fidl::Error>> + Send;
2837    fn r#get_name(&self) -> Self::GetNameResponseFut;
2838    type SetConfigResponseFut: std::future::Future<Output = Result<i32, fidl::Error>> + Send;
2839    fn r#set_config(&self, config: &NetworkConfig) -> Self::SetConfigResponseFut;
2840    type AttachEndpointResponseFut: std::future::Future<Output = Result<i32, fidl::Error>> + Send;
2841    fn r#attach_endpoint(&self, name: &str) -> Self::AttachEndpointResponseFut;
2842    type RemoveEndpointResponseFut: std::future::Future<Output = Result<i32, fidl::Error>> + Send;
2843    fn r#remove_endpoint(&self, name: &str) -> Self::RemoveEndpointResponseFut;
2844    fn r#create_fake_endpoint(
2845        &self,
2846        ep: fidl::endpoints::ServerEnd<FakeEndpointMarker>,
2847    ) -> Result<(), fidl::Error>;
2848    type StartCaptureResponseFut: std::future::Future<Output = Result<i32, fidl::Error>> + Send;
2849    fn r#start_capture(&self, name: &str) -> Self::StartCaptureResponseFut;
2850    type StopCaptureResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
2851    fn r#stop_capture(&self) -> Self::StopCaptureResponseFut;
2852}
2853#[derive(Debug)]
2854#[cfg(target_os = "fuchsia")]
2855pub struct NetworkSynchronousProxy {
2856    client: fidl::client::sync::Client,
2857}
2858
2859#[cfg(target_os = "fuchsia")]
2860impl fidl::endpoints::SynchronousProxy for NetworkSynchronousProxy {
2861    type Proxy = NetworkProxy;
2862    type Protocol = NetworkMarker;
2863
2864    fn from_channel(inner: fidl::Channel) -> Self {
2865        Self::new(inner)
2866    }
2867
2868    fn into_channel(self) -> fidl::Channel {
2869        self.client.into_channel()
2870    }
2871
2872    fn as_channel(&self) -> &fidl::Channel {
2873        self.client.as_channel()
2874    }
2875}
2876
2877#[cfg(target_os = "fuchsia")]
2878impl NetworkSynchronousProxy {
2879    pub fn new(channel: fidl::Channel) -> Self {
2880        Self { client: fidl::client::sync::Client::new(channel) }
2881    }
2882
2883    pub fn into_channel(self) -> fidl::Channel {
2884        self.client.into_channel()
2885    }
2886
2887    /// Waits until an event arrives and returns it. It is safe for other
2888    /// threads to make concurrent requests while waiting for an event.
2889    pub fn wait_for_event(
2890        &self,
2891        deadline: zx::MonotonicInstant,
2892    ) -> Result<NetworkEvent, fidl::Error> {
2893        NetworkEvent::decode(self.client.wait_for_event::<NetworkMarker>(deadline)?)
2894    }
2895
2896    /// Adds a port to the network.
2897    ///
2898    /// + request `port` port to be added.
2899    /// + request `interface` provides control over the interface.
2900    pub fn r#add_port(
2901        &self,
2902        mut port: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
2903        mut interface: fidl::endpoints::ServerEnd<fidl_fuchsia_net_virtualization::InterfaceMarker>,
2904    ) -> Result<(), fidl::Error> {
2905        self.client.send::<fidl_fuchsia_net_virtualization::NetworkAddPortRequest>(
2906            (port, interface),
2907            0x7ad6a60c931a3f4e,
2908            fidl::encoding::DynamicFlags::empty(),
2909        )
2910    }
2911
2912    /// Gets network configuration.
2913    pub fn r#get_config(
2914        &self,
2915        ___deadline: zx::MonotonicInstant,
2916    ) -> Result<NetworkConfig, fidl::Error> {
2917        let _response = self
2918            .client
2919            .send_query::<fidl::encoding::EmptyPayload, NetworkGetConfigResponse, NetworkMarker>(
2920                (),
2921                0x8dc04557e2ab069,
2922                fidl::encoding::DynamicFlags::empty(),
2923                ___deadline,
2924            )?;
2925        Ok(_response.config)
2926    }
2927
2928    /// Gets network name.
2929    pub fn r#get_name(&self, ___deadline: zx::MonotonicInstant) -> Result<String, fidl::Error> {
2930        let _response = self
2931            .client
2932            .send_query::<fidl::encoding::EmptyPayload, NetworkGetNameResponse, NetworkMarker>(
2933                (),
2934                0x57b7701d1ffeedb1,
2935                fidl::encoding::DynamicFlags::empty(),
2936                ___deadline,
2937            )?;
2938        Ok(_response.name)
2939    }
2940
2941    /// Updates network configuration.
2942    pub fn r#set_config(
2943        &self,
2944        mut config: &NetworkConfig,
2945        ___deadline: zx::MonotonicInstant,
2946    ) -> Result<i32, fidl::Error> {
2947        let _response = self
2948            .client
2949            .send_query::<NetworkSetConfigRequest, NetworkSetConfigResponse, NetworkMarker>(
2950                (config,),
2951                0x18a490ee9d4bfa16,
2952                fidl::encoding::DynamicFlags::empty(),
2953                ___deadline,
2954            )?;
2955        Ok(_response.status)
2956    }
2957
2958    /// Attaches endpoint with given name to network.
2959    pub fn r#attach_endpoint(
2960        &self,
2961        mut name: &str,
2962        ___deadline: zx::MonotonicInstant,
2963    ) -> Result<i32, fidl::Error> {
2964        let _response = self.client.send_query::<
2965            NetworkAttachEndpointRequest,
2966            NetworkAttachEndpointResponse,
2967            NetworkMarker,
2968        >(
2969            (name,),
2970            0x6e8ff8e9ea1b9a98,
2971            fidl::encoding::DynamicFlags::empty(),
2972            ___deadline,
2973        )?;
2974        Ok(_response.status)
2975    }
2976
2977    /// Removes endpoint with given name from network.
2978    pub fn r#remove_endpoint(
2979        &self,
2980        mut name: &str,
2981        ___deadline: zx::MonotonicInstant,
2982    ) -> Result<i32, fidl::Error> {
2983        let _response = self.client.send_query::<
2984            NetworkRemoveEndpointRequest,
2985            NetworkRemoveEndpointResponse,
2986            NetworkMarker,
2987        >(
2988            (name,),
2989            0x298eaac56bfcdd25,
2990            fidl::encoding::DynamicFlags::empty(),
2991            ___deadline,
2992        )?;
2993        Ok(_response.status)
2994    }
2995
2996    /// Injects a fake endpoint.
2997    pub fn r#create_fake_endpoint(
2998        &self,
2999        mut ep: fidl::endpoints::ServerEnd<FakeEndpointMarker>,
3000    ) -> Result<(), fidl::Error> {
3001        self.client.send::<NetworkCreateFakeEndpointRequest>(
3002            (ep,),
3003            0x3eb8f71b45e1e1f3,
3004            fidl::encoding::DynamicFlags::empty(),
3005        )
3006    }
3007
3008    /// Starts capturing packet in this network.
3009    ///
3010    /// The packet capture will be stored at `/custom_artifacts/{name}.pcapng`.
3011    ///
3012    /// Returns [`ZX_ERR_ALREADY_EXISTS`] if the capturing is already started
3013    /// in this network.
3014    pub fn r#start_capture(
3015        &self,
3016        mut name: &str,
3017        ___deadline: zx::MonotonicInstant,
3018    ) -> Result<i32, fidl::Error> {
3019        let _response = self
3020            .client
3021            .send_query::<NetworkStartCaptureRequest, NetworkStartCaptureResponse, NetworkMarker>(
3022                (name,),
3023                0x3ca44940622932c,
3024                fidl::encoding::DynamicFlags::empty(),
3025                ___deadline,
3026            )?;
3027        Ok(_response.status)
3028    }
3029
3030    /// Stops capturing packets. This function is guaranteed to succeed.
3031    ///
3032    /// The packet capture will be stored in the file at the path chosen when
3033    /// capturing started. The packet capture will stop automatically once the
3034    /// network is destroyed regardless of whether this method is called.
3035    pub fn r#stop_capture(&self, ___deadline: zx::MonotonicInstant) -> Result<(), fidl::Error> {
3036        let _response = self.client.send_query::<
3037            fidl::encoding::EmptyPayload,
3038            fidl::encoding::EmptyPayload,
3039            NetworkMarker,
3040        >(
3041            (),
3042            0x1d7827adad109468,
3043            fidl::encoding::DynamicFlags::empty(),
3044            ___deadline,
3045        )?;
3046        Ok(_response)
3047    }
3048}
3049
3050#[cfg(target_os = "fuchsia")]
3051impl From<NetworkSynchronousProxy> for zx::NullableHandle {
3052    fn from(value: NetworkSynchronousProxy) -> Self {
3053        value.into_channel().into()
3054    }
3055}
3056
3057#[cfg(target_os = "fuchsia")]
3058impl From<fidl::Channel> for NetworkSynchronousProxy {
3059    fn from(value: fidl::Channel) -> Self {
3060        Self::new(value)
3061    }
3062}
3063
3064#[cfg(target_os = "fuchsia")]
3065impl fidl::endpoints::FromClient for NetworkSynchronousProxy {
3066    type Protocol = NetworkMarker;
3067
3068    fn from_client(value: fidl::endpoints::ClientEnd<NetworkMarker>) -> Self {
3069        Self::new(value.into_channel())
3070    }
3071}
3072
3073#[derive(Debug, Clone)]
3074pub struct NetworkProxy {
3075    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3076}
3077
3078impl fidl::endpoints::Proxy for NetworkProxy {
3079    type Protocol = NetworkMarker;
3080
3081    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3082        Self::new(inner)
3083    }
3084
3085    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3086        self.client.into_channel().map_err(|client| Self { client })
3087    }
3088
3089    fn as_channel(&self) -> &::fidl::AsyncChannel {
3090        self.client.as_channel()
3091    }
3092}
3093
3094impl NetworkProxy {
3095    /// Create a new Proxy for fuchsia.netemul.network/Network.
3096    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3097        let protocol_name = <NetworkMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3098        Self { client: fidl::client::Client::new(channel, protocol_name) }
3099    }
3100
3101    /// Get a Stream of events from the remote end of the protocol.
3102    ///
3103    /// # Panics
3104    ///
3105    /// Panics if the event stream was already taken.
3106    pub fn take_event_stream(&self) -> NetworkEventStream {
3107        NetworkEventStream { event_receiver: self.client.take_event_receiver() }
3108    }
3109
3110    /// Adds a port to the network.
3111    ///
3112    /// + request `port` port to be added.
3113    /// + request `interface` provides control over the interface.
3114    pub fn r#add_port(
3115        &self,
3116        mut port: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
3117        mut interface: fidl::endpoints::ServerEnd<fidl_fuchsia_net_virtualization::InterfaceMarker>,
3118    ) -> Result<(), fidl::Error> {
3119        NetworkProxyInterface::r#add_port(self, port, interface)
3120    }
3121
3122    /// Gets network configuration.
3123    pub fn r#get_config(
3124        &self,
3125    ) -> fidl::client::QueryResponseFut<NetworkConfig, fidl::encoding::DefaultFuchsiaResourceDialect>
3126    {
3127        NetworkProxyInterface::r#get_config(self)
3128    }
3129
3130    /// Gets network name.
3131    pub fn r#get_name(
3132        &self,
3133    ) -> fidl::client::QueryResponseFut<String, fidl::encoding::DefaultFuchsiaResourceDialect> {
3134        NetworkProxyInterface::r#get_name(self)
3135    }
3136
3137    /// Updates network configuration.
3138    pub fn r#set_config(
3139        &self,
3140        mut config: &NetworkConfig,
3141    ) -> fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect> {
3142        NetworkProxyInterface::r#set_config(self, config)
3143    }
3144
3145    /// Attaches endpoint with given name to network.
3146    pub fn r#attach_endpoint(
3147        &self,
3148        mut name: &str,
3149    ) -> fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect> {
3150        NetworkProxyInterface::r#attach_endpoint(self, name)
3151    }
3152
3153    /// Removes endpoint with given name from network.
3154    pub fn r#remove_endpoint(
3155        &self,
3156        mut name: &str,
3157    ) -> fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect> {
3158        NetworkProxyInterface::r#remove_endpoint(self, name)
3159    }
3160
3161    /// Injects a fake endpoint.
3162    pub fn r#create_fake_endpoint(
3163        &self,
3164        mut ep: fidl::endpoints::ServerEnd<FakeEndpointMarker>,
3165    ) -> Result<(), fidl::Error> {
3166        NetworkProxyInterface::r#create_fake_endpoint(self, ep)
3167    }
3168
3169    /// Starts capturing packet in this network.
3170    ///
3171    /// The packet capture will be stored at `/custom_artifacts/{name}.pcapng`.
3172    ///
3173    /// Returns [`ZX_ERR_ALREADY_EXISTS`] if the capturing is already started
3174    /// in this network.
3175    pub fn r#start_capture(
3176        &self,
3177        mut name: &str,
3178    ) -> fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect> {
3179        NetworkProxyInterface::r#start_capture(self, name)
3180    }
3181
3182    /// Stops capturing packets. This function is guaranteed to succeed.
3183    ///
3184    /// The packet capture will be stored in the file at the path chosen when
3185    /// capturing started. The packet capture will stop automatically once the
3186    /// network is destroyed regardless of whether this method is called.
3187    pub fn r#stop_capture(
3188        &self,
3189    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
3190        NetworkProxyInterface::r#stop_capture(self)
3191    }
3192}
3193
3194impl NetworkProxyInterface for NetworkProxy {
3195    fn r#add_port(
3196        &self,
3197        mut port: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
3198        mut interface: fidl::endpoints::ServerEnd<fidl_fuchsia_net_virtualization::InterfaceMarker>,
3199    ) -> Result<(), fidl::Error> {
3200        self.client.send::<fidl_fuchsia_net_virtualization::NetworkAddPortRequest>(
3201            (port, interface),
3202            0x7ad6a60c931a3f4e,
3203            fidl::encoding::DynamicFlags::empty(),
3204        )
3205    }
3206
3207    type GetConfigResponseFut = fidl::client::QueryResponseFut<
3208        NetworkConfig,
3209        fidl::encoding::DefaultFuchsiaResourceDialect,
3210    >;
3211    fn r#get_config(&self) -> Self::GetConfigResponseFut {
3212        fn _decode(
3213            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3214        ) -> Result<NetworkConfig, fidl::Error> {
3215            let _response = fidl::client::decode_transaction_body::<
3216                NetworkGetConfigResponse,
3217                fidl::encoding::DefaultFuchsiaResourceDialect,
3218                0x8dc04557e2ab069,
3219            >(_buf?)?;
3220            Ok(_response.config)
3221        }
3222        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, NetworkConfig>(
3223            (),
3224            0x8dc04557e2ab069,
3225            fidl::encoding::DynamicFlags::empty(),
3226            _decode,
3227        )
3228    }
3229
3230    type GetNameResponseFut =
3231        fidl::client::QueryResponseFut<String, fidl::encoding::DefaultFuchsiaResourceDialect>;
3232    fn r#get_name(&self) -> Self::GetNameResponseFut {
3233        fn _decode(
3234            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3235        ) -> Result<String, fidl::Error> {
3236            let _response = fidl::client::decode_transaction_body::<
3237                NetworkGetNameResponse,
3238                fidl::encoding::DefaultFuchsiaResourceDialect,
3239                0x57b7701d1ffeedb1,
3240            >(_buf?)?;
3241            Ok(_response.name)
3242        }
3243        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, String>(
3244            (),
3245            0x57b7701d1ffeedb1,
3246            fidl::encoding::DynamicFlags::empty(),
3247            _decode,
3248        )
3249    }
3250
3251    type SetConfigResponseFut =
3252        fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect>;
3253    fn r#set_config(&self, mut config: &NetworkConfig) -> Self::SetConfigResponseFut {
3254        fn _decode(
3255            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3256        ) -> Result<i32, fidl::Error> {
3257            let _response = fidl::client::decode_transaction_body::<
3258                NetworkSetConfigResponse,
3259                fidl::encoding::DefaultFuchsiaResourceDialect,
3260                0x18a490ee9d4bfa16,
3261            >(_buf?)?;
3262            Ok(_response.status)
3263        }
3264        self.client.send_query_and_decode::<NetworkSetConfigRequest, i32>(
3265            (config,),
3266            0x18a490ee9d4bfa16,
3267            fidl::encoding::DynamicFlags::empty(),
3268            _decode,
3269        )
3270    }
3271
3272    type AttachEndpointResponseFut =
3273        fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect>;
3274    fn r#attach_endpoint(&self, mut name: &str) -> Self::AttachEndpointResponseFut {
3275        fn _decode(
3276            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3277        ) -> Result<i32, fidl::Error> {
3278            let _response = fidl::client::decode_transaction_body::<
3279                NetworkAttachEndpointResponse,
3280                fidl::encoding::DefaultFuchsiaResourceDialect,
3281                0x6e8ff8e9ea1b9a98,
3282            >(_buf?)?;
3283            Ok(_response.status)
3284        }
3285        self.client.send_query_and_decode::<NetworkAttachEndpointRequest, i32>(
3286            (name,),
3287            0x6e8ff8e9ea1b9a98,
3288            fidl::encoding::DynamicFlags::empty(),
3289            _decode,
3290        )
3291    }
3292
3293    type RemoveEndpointResponseFut =
3294        fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect>;
3295    fn r#remove_endpoint(&self, mut name: &str) -> Self::RemoveEndpointResponseFut {
3296        fn _decode(
3297            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3298        ) -> Result<i32, fidl::Error> {
3299            let _response = fidl::client::decode_transaction_body::<
3300                NetworkRemoveEndpointResponse,
3301                fidl::encoding::DefaultFuchsiaResourceDialect,
3302                0x298eaac56bfcdd25,
3303            >(_buf?)?;
3304            Ok(_response.status)
3305        }
3306        self.client.send_query_and_decode::<NetworkRemoveEndpointRequest, i32>(
3307            (name,),
3308            0x298eaac56bfcdd25,
3309            fidl::encoding::DynamicFlags::empty(),
3310            _decode,
3311        )
3312    }
3313
3314    fn r#create_fake_endpoint(
3315        &self,
3316        mut ep: fidl::endpoints::ServerEnd<FakeEndpointMarker>,
3317    ) -> Result<(), fidl::Error> {
3318        self.client.send::<NetworkCreateFakeEndpointRequest>(
3319            (ep,),
3320            0x3eb8f71b45e1e1f3,
3321            fidl::encoding::DynamicFlags::empty(),
3322        )
3323    }
3324
3325    type StartCaptureResponseFut =
3326        fidl::client::QueryResponseFut<i32, fidl::encoding::DefaultFuchsiaResourceDialect>;
3327    fn r#start_capture(&self, mut name: &str) -> Self::StartCaptureResponseFut {
3328        fn _decode(
3329            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3330        ) -> Result<i32, fidl::Error> {
3331            let _response = fidl::client::decode_transaction_body::<
3332                NetworkStartCaptureResponse,
3333                fidl::encoding::DefaultFuchsiaResourceDialect,
3334                0x3ca44940622932c,
3335            >(_buf?)?;
3336            Ok(_response.status)
3337        }
3338        self.client.send_query_and_decode::<NetworkStartCaptureRequest, i32>(
3339            (name,),
3340            0x3ca44940622932c,
3341            fidl::encoding::DynamicFlags::empty(),
3342            _decode,
3343        )
3344    }
3345
3346    type StopCaptureResponseFut =
3347        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
3348    fn r#stop_capture(&self) -> Self::StopCaptureResponseFut {
3349        fn _decode(
3350            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3351        ) -> Result<(), fidl::Error> {
3352            let _response = fidl::client::decode_transaction_body::<
3353                fidl::encoding::EmptyPayload,
3354                fidl::encoding::DefaultFuchsiaResourceDialect,
3355                0x1d7827adad109468,
3356            >(_buf?)?;
3357            Ok(_response)
3358        }
3359        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, ()>(
3360            (),
3361            0x1d7827adad109468,
3362            fidl::encoding::DynamicFlags::empty(),
3363            _decode,
3364        )
3365    }
3366}
3367
3368pub struct NetworkEventStream {
3369    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3370}
3371
3372impl std::marker::Unpin for NetworkEventStream {}
3373
3374impl futures::stream::FusedStream for NetworkEventStream {
3375    fn is_terminated(&self) -> bool {
3376        self.event_receiver.is_terminated()
3377    }
3378}
3379
3380impl futures::Stream for NetworkEventStream {
3381    type Item = Result<NetworkEvent, fidl::Error>;
3382
3383    fn poll_next(
3384        mut self: std::pin::Pin<&mut Self>,
3385        cx: &mut std::task::Context<'_>,
3386    ) -> std::task::Poll<Option<Self::Item>> {
3387        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3388            &mut self.event_receiver,
3389            cx
3390        )?) {
3391            Some(buf) => std::task::Poll::Ready(Some(NetworkEvent::decode(buf))),
3392            None => std::task::Poll::Ready(None),
3393        }
3394    }
3395}
3396
3397#[derive(Debug)]
3398pub enum NetworkEvent {
3399    OnRemoved { reason: fidl_fuchsia_net_virtualization::NetworkRemovalReason },
3400}
3401
3402impl NetworkEvent {
3403    #[allow(irrefutable_let_patterns)]
3404    pub fn into_on_removed(self) -> Option<fidl_fuchsia_net_virtualization::NetworkRemovalReason> {
3405        if let NetworkEvent::OnRemoved { reason } = self { Some((reason)) } else { None }
3406    }
3407
3408    /// Decodes a message buffer as a [`NetworkEvent`].
3409    fn decode(
3410        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3411    ) -> Result<NetworkEvent, fidl::Error> {
3412        let (bytes, _handles) = buf.split_mut();
3413        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3414        debug_assert_eq!(tx_header.tx_id, 0);
3415        match tx_header.ordinal {
3416            0xfe80656d1e5ec4a => {
3417                let mut out = fidl::new_empty!(
3418                    fidl_fuchsia_net_virtualization::NetworkOnRemovedRequest,
3419                    fidl::encoding::DefaultFuchsiaResourceDialect
3420                );
3421                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl_fuchsia_net_virtualization::NetworkOnRemovedRequest>(&tx_header, _body_bytes, _handles, &mut out)?;
3422                Ok((NetworkEvent::OnRemoved { reason: out.reason }))
3423            }
3424            _ => Err(fidl::Error::UnknownOrdinal {
3425                ordinal: tx_header.ordinal,
3426                protocol_name: <NetworkMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3427            }),
3428        }
3429    }
3430}
3431
3432/// A Stream of incoming requests for fuchsia.netemul.network/Network.
3433pub struct NetworkRequestStream {
3434    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3435    is_terminated: bool,
3436}
3437
3438impl std::marker::Unpin for NetworkRequestStream {}
3439
3440impl futures::stream::FusedStream for NetworkRequestStream {
3441    fn is_terminated(&self) -> bool {
3442        self.is_terminated
3443    }
3444}
3445
3446impl fidl::endpoints::RequestStream for NetworkRequestStream {
3447    type Protocol = NetworkMarker;
3448    type ControlHandle = NetworkControlHandle;
3449
3450    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3451        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3452    }
3453
3454    fn control_handle(&self) -> Self::ControlHandle {
3455        NetworkControlHandle { inner: self.inner.clone() }
3456    }
3457
3458    fn into_inner(
3459        self,
3460    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3461    {
3462        (self.inner, self.is_terminated)
3463    }
3464
3465    fn from_inner(
3466        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3467        is_terminated: bool,
3468    ) -> Self {
3469        Self { inner, is_terminated }
3470    }
3471}
3472
3473impl futures::Stream for NetworkRequestStream {
3474    type Item = Result<NetworkRequest, fidl::Error>;
3475
3476    fn poll_next(
3477        mut self: std::pin::Pin<&mut Self>,
3478        cx: &mut std::task::Context<'_>,
3479    ) -> std::task::Poll<Option<Self::Item>> {
3480        let this = &mut *self;
3481        if this.inner.check_shutdown(cx) {
3482            this.is_terminated = true;
3483            return std::task::Poll::Ready(None);
3484        }
3485        if this.is_terminated {
3486            panic!("polled NetworkRequestStream after completion");
3487        }
3488        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3489            |bytes, handles| {
3490                match this.inner.channel().read_etc(cx, bytes, handles) {
3491                    std::task::Poll::Ready(Ok(())) => {}
3492                    std::task::Poll::Pending => return std::task::Poll::Pending,
3493                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3494                        this.is_terminated = true;
3495                        return std::task::Poll::Ready(None);
3496                    }
3497                    std::task::Poll::Ready(Err(e)) => {
3498                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3499                            e.into(),
3500                        ))));
3501                    }
3502                }
3503
3504                // A message has been received from the channel
3505                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3506
3507                std::task::Poll::Ready(Some(match header.ordinal {
3508                    0x7ad6a60c931a3f4e => {
3509                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
3510                        let mut req = fidl::new_empty!(
3511                            fidl_fuchsia_net_virtualization::NetworkAddPortRequest,
3512                            fidl::encoding::DefaultFuchsiaResourceDialect
3513                        );
3514                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl_fuchsia_net_virtualization::NetworkAddPortRequest>(&header, _body_bytes, handles, &mut req)?;
3515                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3516                        Ok(NetworkRequest::AddPort {
3517                            port: req.port,
3518                            interface: req.interface,
3519
3520                            control_handle,
3521                        })
3522                    }
3523                    0x8dc04557e2ab069 => {
3524                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3525                        let mut req = fidl::new_empty!(
3526                            fidl::encoding::EmptyPayload,
3527                            fidl::encoding::DefaultFuchsiaResourceDialect
3528                        );
3529                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
3530                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3531                        Ok(NetworkRequest::GetConfig {
3532                            responder: NetworkGetConfigResponder {
3533                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3534                                tx_id: header.tx_id,
3535                            },
3536                        })
3537                    }
3538                    0x57b7701d1ffeedb1 => {
3539                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3540                        let mut req = fidl::new_empty!(
3541                            fidl::encoding::EmptyPayload,
3542                            fidl::encoding::DefaultFuchsiaResourceDialect
3543                        );
3544                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
3545                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3546                        Ok(NetworkRequest::GetName {
3547                            responder: NetworkGetNameResponder {
3548                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3549                                tx_id: header.tx_id,
3550                            },
3551                        })
3552                    }
3553                    0x18a490ee9d4bfa16 => {
3554                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3555                        let mut req = fidl::new_empty!(
3556                            NetworkSetConfigRequest,
3557                            fidl::encoding::DefaultFuchsiaResourceDialect
3558                        );
3559                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkSetConfigRequest>(&header, _body_bytes, handles, &mut req)?;
3560                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3561                        Ok(NetworkRequest::SetConfig {
3562                            config: req.config,
3563
3564                            responder: NetworkSetConfigResponder {
3565                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3566                                tx_id: header.tx_id,
3567                            },
3568                        })
3569                    }
3570                    0x6e8ff8e9ea1b9a98 => {
3571                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3572                        let mut req = fidl::new_empty!(
3573                            NetworkAttachEndpointRequest,
3574                            fidl::encoding::DefaultFuchsiaResourceDialect
3575                        );
3576                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkAttachEndpointRequest>(&header, _body_bytes, handles, &mut req)?;
3577                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3578                        Ok(NetworkRequest::AttachEndpoint {
3579                            name: req.name,
3580
3581                            responder: NetworkAttachEndpointResponder {
3582                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3583                                tx_id: header.tx_id,
3584                            },
3585                        })
3586                    }
3587                    0x298eaac56bfcdd25 => {
3588                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3589                        let mut req = fidl::new_empty!(
3590                            NetworkRemoveEndpointRequest,
3591                            fidl::encoding::DefaultFuchsiaResourceDialect
3592                        );
3593                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkRemoveEndpointRequest>(&header, _body_bytes, handles, &mut req)?;
3594                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3595                        Ok(NetworkRequest::RemoveEndpoint {
3596                            name: req.name,
3597
3598                            responder: NetworkRemoveEndpointResponder {
3599                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3600                                tx_id: header.tx_id,
3601                            },
3602                        })
3603                    }
3604                    0x3eb8f71b45e1e1f3 => {
3605                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
3606                        let mut req = fidl::new_empty!(
3607                            NetworkCreateFakeEndpointRequest,
3608                            fidl::encoding::DefaultFuchsiaResourceDialect
3609                        );
3610                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkCreateFakeEndpointRequest>(&header, _body_bytes, handles, &mut req)?;
3611                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3612                        Ok(NetworkRequest::CreateFakeEndpoint { ep: req.ep, control_handle })
3613                    }
3614                    0x3ca44940622932c => {
3615                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3616                        let mut req = fidl::new_empty!(
3617                            NetworkStartCaptureRequest,
3618                            fidl::encoding::DefaultFuchsiaResourceDialect
3619                        );
3620                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkStartCaptureRequest>(&header, _body_bytes, handles, &mut req)?;
3621                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3622                        Ok(NetworkRequest::StartCapture {
3623                            name: req.name,
3624
3625                            responder: NetworkStartCaptureResponder {
3626                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3627                                tx_id: header.tx_id,
3628                            },
3629                        })
3630                    }
3631                    0x1d7827adad109468 => {
3632                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3633                        let mut req = fidl::new_empty!(
3634                            fidl::encoding::EmptyPayload,
3635                            fidl::encoding::DefaultFuchsiaResourceDialect
3636                        );
3637                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
3638                        let control_handle = NetworkControlHandle { inner: this.inner.clone() };
3639                        Ok(NetworkRequest::StopCapture {
3640                            responder: NetworkStopCaptureResponder {
3641                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3642                                tx_id: header.tx_id,
3643                            },
3644                        })
3645                    }
3646                    _ => Err(fidl::Error::UnknownOrdinal {
3647                        ordinal: header.ordinal,
3648                        protocol_name:
3649                            <NetworkMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3650                    }),
3651                }))
3652            },
3653        )
3654    }
3655}
3656
3657/// Virtual network.
3658#[derive(Debug)]
3659pub enum NetworkRequest {
3660    /// Adds a port to the network.
3661    ///
3662    /// + request `port` port to be added.
3663    /// + request `interface` provides control over the interface.
3664    AddPort {
3665        port: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
3666        interface: fidl::endpoints::ServerEnd<fidl_fuchsia_net_virtualization::InterfaceMarker>,
3667        control_handle: NetworkControlHandle,
3668    },
3669    /// Gets network configuration.
3670    GetConfig { responder: NetworkGetConfigResponder },
3671    /// Gets network name.
3672    GetName { responder: NetworkGetNameResponder },
3673    /// Updates network configuration.
3674    SetConfig { config: NetworkConfig, responder: NetworkSetConfigResponder },
3675    /// Attaches endpoint with given name to network.
3676    AttachEndpoint { name: String, responder: NetworkAttachEndpointResponder },
3677    /// Removes endpoint with given name from network.
3678    RemoveEndpoint { name: String, responder: NetworkRemoveEndpointResponder },
3679    /// Injects a fake endpoint.
3680    CreateFakeEndpoint {
3681        ep: fidl::endpoints::ServerEnd<FakeEndpointMarker>,
3682        control_handle: NetworkControlHandle,
3683    },
3684    /// Starts capturing packet in this network.
3685    ///
3686    /// The packet capture will be stored at `/custom_artifacts/{name}.pcapng`.
3687    ///
3688    /// Returns [`ZX_ERR_ALREADY_EXISTS`] if the capturing is already started
3689    /// in this network.
3690    StartCapture { name: String, responder: NetworkStartCaptureResponder },
3691    /// Stops capturing packets. This function is guaranteed to succeed.
3692    ///
3693    /// The packet capture will be stored in the file at the path chosen when
3694    /// capturing started. The packet capture will stop automatically once the
3695    /// network is destroyed regardless of whether this method is called.
3696    StopCapture { responder: NetworkStopCaptureResponder },
3697}
3698
3699impl NetworkRequest {
3700    #[allow(irrefutable_let_patterns)]
3701    pub fn into_add_port(
3702        self,
3703    ) -> Option<(
3704        fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
3705        fidl::endpoints::ServerEnd<fidl_fuchsia_net_virtualization::InterfaceMarker>,
3706        NetworkControlHandle,
3707    )> {
3708        if let NetworkRequest::AddPort { port, interface, control_handle } = self {
3709            Some((port, interface, control_handle))
3710        } else {
3711            None
3712        }
3713    }
3714
3715    #[allow(irrefutable_let_patterns)]
3716    pub fn into_get_config(self) -> Option<(NetworkGetConfigResponder)> {
3717        if let NetworkRequest::GetConfig { responder } = self { Some((responder)) } else { None }
3718    }
3719
3720    #[allow(irrefutable_let_patterns)]
3721    pub fn into_get_name(self) -> Option<(NetworkGetNameResponder)> {
3722        if let NetworkRequest::GetName { responder } = self { Some((responder)) } else { None }
3723    }
3724
3725    #[allow(irrefutable_let_patterns)]
3726    pub fn into_set_config(self) -> Option<(NetworkConfig, NetworkSetConfigResponder)> {
3727        if let NetworkRequest::SetConfig { config, responder } = self {
3728            Some((config, responder))
3729        } else {
3730            None
3731        }
3732    }
3733
3734    #[allow(irrefutable_let_patterns)]
3735    pub fn into_attach_endpoint(self) -> Option<(String, NetworkAttachEndpointResponder)> {
3736        if let NetworkRequest::AttachEndpoint { name, responder } = self {
3737            Some((name, responder))
3738        } else {
3739            None
3740        }
3741    }
3742
3743    #[allow(irrefutable_let_patterns)]
3744    pub fn into_remove_endpoint(self) -> Option<(String, NetworkRemoveEndpointResponder)> {
3745        if let NetworkRequest::RemoveEndpoint { name, responder } = self {
3746            Some((name, responder))
3747        } else {
3748            None
3749        }
3750    }
3751
3752    #[allow(irrefutable_let_patterns)]
3753    pub fn into_create_fake_endpoint(
3754        self,
3755    ) -> Option<(fidl::endpoints::ServerEnd<FakeEndpointMarker>, NetworkControlHandle)> {
3756        if let NetworkRequest::CreateFakeEndpoint { ep, control_handle } = self {
3757            Some((ep, control_handle))
3758        } else {
3759            None
3760        }
3761    }
3762
3763    #[allow(irrefutable_let_patterns)]
3764    pub fn into_start_capture(self) -> Option<(String, NetworkStartCaptureResponder)> {
3765        if let NetworkRequest::StartCapture { name, responder } = self {
3766            Some((name, responder))
3767        } else {
3768            None
3769        }
3770    }
3771
3772    #[allow(irrefutable_let_patterns)]
3773    pub fn into_stop_capture(self) -> Option<(NetworkStopCaptureResponder)> {
3774        if let NetworkRequest::StopCapture { responder } = self { Some((responder)) } else { None }
3775    }
3776
3777    /// Name of the method defined in FIDL
3778    pub fn method_name(&self) -> &'static str {
3779        match *self {
3780            NetworkRequest::AddPort { .. } => "add_port",
3781            NetworkRequest::GetConfig { .. } => "get_config",
3782            NetworkRequest::GetName { .. } => "get_name",
3783            NetworkRequest::SetConfig { .. } => "set_config",
3784            NetworkRequest::AttachEndpoint { .. } => "attach_endpoint",
3785            NetworkRequest::RemoveEndpoint { .. } => "remove_endpoint",
3786            NetworkRequest::CreateFakeEndpoint { .. } => "create_fake_endpoint",
3787            NetworkRequest::StartCapture { .. } => "start_capture",
3788            NetworkRequest::StopCapture { .. } => "stop_capture",
3789        }
3790    }
3791}
3792
3793#[derive(Debug, Clone)]
3794pub struct NetworkControlHandle {
3795    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3796}
3797
3798impl fidl::endpoints::ControlHandle for NetworkControlHandle {
3799    fn shutdown(&self) {
3800        self.inner.shutdown()
3801    }
3802
3803    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
3804        self.inner.shutdown_with_epitaph(status)
3805    }
3806
3807    fn is_closed(&self) -> bool {
3808        self.inner.channel().is_closed()
3809    }
3810    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3811        self.inner.channel().on_closed()
3812    }
3813
3814    #[cfg(target_os = "fuchsia")]
3815    fn signal_peer(
3816        &self,
3817        clear_mask: zx::Signals,
3818        set_mask: zx::Signals,
3819    ) -> Result<(), zx_status::Status> {
3820        use fidl::Peered;
3821        self.inner.channel().signal_peer(clear_mask, set_mask)
3822    }
3823}
3824
3825impl NetworkControlHandle {
3826    pub fn send_on_removed(
3827        &self,
3828        mut reason: fidl_fuchsia_net_virtualization::NetworkRemovalReason,
3829    ) -> Result<(), fidl::Error> {
3830        self.inner.send::<fidl_fuchsia_net_virtualization::NetworkOnRemovedRequest>(
3831            (reason,),
3832            0,
3833            0xfe80656d1e5ec4a,
3834            fidl::encoding::DynamicFlags::empty(),
3835        )
3836    }
3837}
3838
3839#[must_use = "FIDL methods require a response to be sent"]
3840#[derive(Debug)]
3841pub struct NetworkGetConfigResponder {
3842    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
3843    tx_id: u32,
3844}
3845
3846/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
3847/// if the responder is dropped without sending a response, so that the client
3848/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3849impl std::ops::Drop for NetworkGetConfigResponder {
3850    fn drop(&mut self) {
3851        self.control_handle.shutdown();
3852        // Safety: drops once, never accessed again
3853        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3854    }
3855}
3856
3857impl fidl::endpoints::Responder for NetworkGetConfigResponder {
3858    type ControlHandle = NetworkControlHandle;
3859
3860    fn control_handle(&self) -> &NetworkControlHandle {
3861        &self.control_handle
3862    }
3863
3864    fn drop_without_shutdown(mut self) {
3865        // Safety: drops once, never accessed again due to mem::forget
3866        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3867        // Prevent Drop from running (which would shut down the channel)
3868        std::mem::forget(self);
3869    }
3870}
3871
3872impl NetworkGetConfigResponder {
3873    /// Sends a response to the FIDL transaction.
3874    ///
3875    /// Sets the channel to shutdown if an error occurs.
3876    pub fn send(self, mut config: &NetworkConfig) -> Result<(), fidl::Error> {
3877        let _result = self.send_raw(config);
3878        if _result.is_err() {
3879            self.control_handle.shutdown();
3880        }
3881        self.drop_without_shutdown();
3882        _result
3883    }
3884
3885    /// Similar to "send" but does not shutdown the channel if an error occurs.
3886    pub fn send_no_shutdown_on_err(self, mut config: &NetworkConfig) -> Result<(), fidl::Error> {
3887        let _result = self.send_raw(config);
3888        self.drop_without_shutdown();
3889        _result
3890    }
3891
3892    fn send_raw(&self, mut config: &NetworkConfig) -> Result<(), fidl::Error> {
3893        self.control_handle.inner.send::<NetworkGetConfigResponse>(
3894            (config,),
3895            self.tx_id,
3896            0x8dc04557e2ab069,
3897            fidl::encoding::DynamicFlags::empty(),
3898        )
3899    }
3900}
3901
3902#[must_use = "FIDL methods require a response to be sent"]
3903#[derive(Debug)]
3904pub struct NetworkGetNameResponder {
3905    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
3906    tx_id: u32,
3907}
3908
3909/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
3910/// if the responder is dropped without sending a response, so that the client
3911/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3912impl std::ops::Drop for NetworkGetNameResponder {
3913    fn drop(&mut self) {
3914        self.control_handle.shutdown();
3915        // Safety: drops once, never accessed again
3916        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3917    }
3918}
3919
3920impl fidl::endpoints::Responder for NetworkGetNameResponder {
3921    type ControlHandle = NetworkControlHandle;
3922
3923    fn control_handle(&self) -> &NetworkControlHandle {
3924        &self.control_handle
3925    }
3926
3927    fn drop_without_shutdown(mut self) {
3928        // Safety: drops once, never accessed again due to mem::forget
3929        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3930        // Prevent Drop from running (which would shut down the channel)
3931        std::mem::forget(self);
3932    }
3933}
3934
3935impl NetworkGetNameResponder {
3936    /// Sends a response to the FIDL transaction.
3937    ///
3938    /// Sets the channel to shutdown if an error occurs.
3939    pub fn send(self, mut name: &str) -> Result<(), fidl::Error> {
3940        let _result = self.send_raw(name);
3941        if _result.is_err() {
3942            self.control_handle.shutdown();
3943        }
3944        self.drop_without_shutdown();
3945        _result
3946    }
3947
3948    /// Similar to "send" but does not shutdown the channel if an error occurs.
3949    pub fn send_no_shutdown_on_err(self, mut name: &str) -> Result<(), fidl::Error> {
3950        let _result = self.send_raw(name);
3951        self.drop_without_shutdown();
3952        _result
3953    }
3954
3955    fn send_raw(&self, mut name: &str) -> Result<(), fidl::Error> {
3956        self.control_handle.inner.send::<NetworkGetNameResponse>(
3957            (name,),
3958            self.tx_id,
3959            0x57b7701d1ffeedb1,
3960            fidl::encoding::DynamicFlags::empty(),
3961        )
3962    }
3963}
3964
3965#[must_use = "FIDL methods require a response to be sent"]
3966#[derive(Debug)]
3967pub struct NetworkSetConfigResponder {
3968    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
3969    tx_id: u32,
3970}
3971
3972/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
3973/// if the responder is dropped without sending a response, so that the client
3974/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3975impl std::ops::Drop for NetworkSetConfigResponder {
3976    fn drop(&mut self) {
3977        self.control_handle.shutdown();
3978        // Safety: drops once, never accessed again
3979        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3980    }
3981}
3982
3983impl fidl::endpoints::Responder for NetworkSetConfigResponder {
3984    type ControlHandle = NetworkControlHandle;
3985
3986    fn control_handle(&self) -> &NetworkControlHandle {
3987        &self.control_handle
3988    }
3989
3990    fn drop_without_shutdown(mut self) {
3991        // Safety: drops once, never accessed again due to mem::forget
3992        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3993        // Prevent Drop from running (which would shut down the channel)
3994        std::mem::forget(self);
3995    }
3996}
3997
3998impl NetworkSetConfigResponder {
3999    /// Sends a response to the FIDL transaction.
4000    ///
4001    /// Sets the channel to shutdown if an error occurs.
4002    pub fn send(self, mut status: i32) -> Result<(), fidl::Error> {
4003        let _result = self.send_raw(status);
4004        if _result.is_err() {
4005            self.control_handle.shutdown();
4006        }
4007        self.drop_without_shutdown();
4008        _result
4009    }
4010
4011    /// Similar to "send" but does not shutdown the channel if an error occurs.
4012    pub fn send_no_shutdown_on_err(self, mut status: i32) -> Result<(), fidl::Error> {
4013        let _result = self.send_raw(status);
4014        self.drop_without_shutdown();
4015        _result
4016    }
4017
4018    fn send_raw(&self, mut status: i32) -> Result<(), fidl::Error> {
4019        self.control_handle.inner.send::<NetworkSetConfigResponse>(
4020            (status,),
4021            self.tx_id,
4022            0x18a490ee9d4bfa16,
4023            fidl::encoding::DynamicFlags::empty(),
4024        )
4025    }
4026}
4027
4028#[must_use = "FIDL methods require a response to be sent"]
4029#[derive(Debug)]
4030pub struct NetworkAttachEndpointResponder {
4031    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
4032    tx_id: u32,
4033}
4034
4035/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
4036/// if the responder is dropped without sending a response, so that the client
4037/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4038impl std::ops::Drop for NetworkAttachEndpointResponder {
4039    fn drop(&mut self) {
4040        self.control_handle.shutdown();
4041        // Safety: drops once, never accessed again
4042        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4043    }
4044}
4045
4046impl fidl::endpoints::Responder for NetworkAttachEndpointResponder {
4047    type ControlHandle = NetworkControlHandle;
4048
4049    fn control_handle(&self) -> &NetworkControlHandle {
4050        &self.control_handle
4051    }
4052
4053    fn drop_without_shutdown(mut self) {
4054        // Safety: drops once, never accessed again due to mem::forget
4055        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4056        // Prevent Drop from running (which would shut down the channel)
4057        std::mem::forget(self);
4058    }
4059}
4060
4061impl NetworkAttachEndpointResponder {
4062    /// Sends a response to the FIDL transaction.
4063    ///
4064    /// Sets the channel to shutdown if an error occurs.
4065    pub fn send(self, mut status: i32) -> Result<(), fidl::Error> {
4066        let _result = self.send_raw(status);
4067        if _result.is_err() {
4068            self.control_handle.shutdown();
4069        }
4070        self.drop_without_shutdown();
4071        _result
4072    }
4073
4074    /// Similar to "send" but does not shutdown the channel if an error occurs.
4075    pub fn send_no_shutdown_on_err(self, mut status: i32) -> Result<(), fidl::Error> {
4076        let _result = self.send_raw(status);
4077        self.drop_without_shutdown();
4078        _result
4079    }
4080
4081    fn send_raw(&self, mut status: i32) -> Result<(), fidl::Error> {
4082        self.control_handle.inner.send::<NetworkAttachEndpointResponse>(
4083            (status,),
4084            self.tx_id,
4085            0x6e8ff8e9ea1b9a98,
4086            fidl::encoding::DynamicFlags::empty(),
4087        )
4088    }
4089}
4090
4091#[must_use = "FIDL methods require a response to be sent"]
4092#[derive(Debug)]
4093pub struct NetworkRemoveEndpointResponder {
4094    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
4095    tx_id: u32,
4096}
4097
4098/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
4099/// if the responder is dropped without sending a response, so that the client
4100/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4101impl std::ops::Drop for NetworkRemoveEndpointResponder {
4102    fn drop(&mut self) {
4103        self.control_handle.shutdown();
4104        // Safety: drops once, never accessed again
4105        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4106    }
4107}
4108
4109impl fidl::endpoints::Responder for NetworkRemoveEndpointResponder {
4110    type ControlHandle = NetworkControlHandle;
4111
4112    fn control_handle(&self) -> &NetworkControlHandle {
4113        &self.control_handle
4114    }
4115
4116    fn drop_without_shutdown(mut self) {
4117        // Safety: drops once, never accessed again due to mem::forget
4118        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4119        // Prevent Drop from running (which would shut down the channel)
4120        std::mem::forget(self);
4121    }
4122}
4123
4124impl NetworkRemoveEndpointResponder {
4125    /// Sends a response to the FIDL transaction.
4126    ///
4127    /// Sets the channel to shutdown if an error occurs.
4128    pub fn send(self, mut status: i32) -> Result<(), fidl::Error> {
4129        let _result = self.send_raw(status);
4130        if _result.is_err() {
4131            self.control_handle.shutdown();
4132        }
4133        self.drop_without_shutdown();
4134        _result
4135    }
4136
4137    /// Similar to "send" but does not shutdown the channel if an error occurs.
4138    pub fn send_no_shutdown_on_err(self, mut status: i32) -> Result<(), fidl::Error> {
4139        let _result = self.send_raw(status);
4140        self.drop_without_shutdown();
4141        _result
4142    }
4143
4144    fn send_raw(&self, mut status: i32) -> Result<(), fidl::Error> {
4145        self.control_handle.inner.send::<NetworkRemoveEndpointResponse>(
4146            (status,),
4147            self.tx_id,
4148            0x298eaac56bfcdd25,
4149            fidl::encoding::DynamicFlags::empty(),
4150        )
4151    }
4152}
4153
4154#[must_use = "FIDL methods require a response to be sent"]
4155#[derive(Debug)]
4156pub struct NetworkStartCaptureResponder {
4157    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
4158    tx_id: u32,
4159}
4160
4161/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
4162/// if the responder is dropped without sending a response, so that the client
4163/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4164impl std::ops::Drop for NetworkStartCaptureResponder {
4165    fn drop(&mut self) {
4166        self.control_handle.shutdown();
4167        // Safety: drops once, never accessed again
4168        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4169    }
4170}
4171
4172impl fidl::endpoints::Responder for NetworkStartCaptureResponder {
4173    type ControlHandle = NetworkControlHandle;
4174
4175    fn control_handle(&self) -> &NetworkControlHandle {
4176        &self.control_handle
4177    }
4178
4179    fn drop_without_shutdown(mut self) {
4180        // Safety: drops once, never accessed again due to mem::forget
4181        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4182        // Prevent Drop from running (which would shut down the channel)
4183        std::mem::forget(self);
4184    }
4185}
4186
4187impl NetworkStartCaptureResponder {
4188    /// Sends a response to the FIDL transaction.
4189    ///
4190    /// Sets the channel to shutdown if an error occurs.
4191    pub fn send(self, mut status: i32) -> Result<(), fidl::Error> {
4192        let _result = self.send_raw(status);
4193        if _result.is_err() {
4194            self.control_handle.shutdown();
4195        }
4196        self.drop_without_shutdown();
4197        _result
4198    }
4199
4200    /// Similar to "send" but does not shutdown the channel if an error occurs.
4201    pub fn send_no_shutdown_on_err(self, mut status: i32) -> Result<(), fidl::Error> {
4202        let _result = self.send_raw(status);
4203        self.drop_without_shutdown();
4204        _result
4205    }
4206
4207    fn send_raw(&self, mut status: i32) -> Result<(), fidl::Error> {
4208        self.control_handle.inner.send::<NetworkStartCaptureResponse>(
4209            (status,),
4210            self.tx_id,
4211            0x3ca44940622932c,
4212            fidl::encoding::DynamicFlags::empty(),
4213        )
4214    }
4215}
4216
4217#[must_use = "FIDL methods require a response to be sent"]
4218#[derive(Debug)]
4219pub struct NetworkStopCaptureResponder {
4220    control_handle: std::mem::ManuallyDrop<NetworkControlHandle>,
4221    tx_id: u32,
4222}
4223
4224/// Set the the channel to be shutdown (see [`NetworkControlHandle::shutdown`])
4225/// if the responder is dropped without sending a response, so that the client
4226/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4227impl std::ops::Drop for NetworkStopCaptureResponder {
4228    fn drop(&mut self) {
4229        self.control_handle.shutdown();
4230        // Safety: drops once, never accessed again
4231        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4232    }
4233}
4234
4235impl fidl::endpoints::Responder for NetworkStopCaptureResponder {
4236    type ControlHandle = NetworkControlHandle;
4237
4238    fn control_handle(&self) -> &NetworkControlHandle {
4239        &self.control_handle
4240    }
4241
4242    fn drop_without_shutdown(mut self) {
4243        // Safety: drops once, never accessed again due to mem::forget
4244        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4245        // Prevent Drop from running (which would shut down the channel)
4246        std::mem::forget(self);
4247    }
4248}
4249
4250impl NetworkStopCaptureResponder {
4251    /// Sends a response to the FIDL transaction.
4252    ///
4253    /// Sets the channel to shutdown if an error occurs.
4254    pub fn send(self) -> Result<(), fidl::Error> {
4255        let _result = self.send_raw();
4256        if _result.is_err() {
4257            self.control_handle.shutdown();
4258        }
4259        self.drop_without_shutdown();
4260        _result
4261    }
4262
4263    /// Similar to "send" but does not shutdown the channel if an error occurs.
4264    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
4265        let _result = self.send_raw();
4266        self.drop_without_shutdown();
4267        _result
4268    }
4269
4270    fn send_raw(&self) -> Result<(), fidl::Error> {
4271        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
4272            (),
4273            self.tx_id,
4274            0x1d7827adad109468,
4275            fidl::encoding::DynamicFlags::empty(),
4276        )
4277    }
4278}
4279
4280#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4281pub struct NetworkContextMarker;
4282
4283impl fidl::endpoints::ProtocolMarker for NetworkContextMarker {
4284    type Proxy = NetworkContextProxy;
4285    type RequestStream = NetworkContextRequestStream;
4286    #[cfg(target_os = "fuchsia")]
4287    type SynchronousProxy = NetworkContextSynchronousProxy;
4288
4289    const DEBUG_NAME: &'static str = "fuchsia.netemul.network.NetworkContext";
4290}
4291impl fidl::endpoints::DiscoverableProtocolMarker for NetworkContextMarker {}
4292
4293pub trait NetworkContextProxyInterface: Send + Sync {
4294    fn r#clone(
4295        &self,
4296        network_context: fidl::endpoints::ServerEnd<NetworkContextMarker>,
4297    ) -> Result<(), fidl::Error>;
4298    fn r#get_network_manager(
4299        &self,
4300        net_manager: fidl::endpoints::ServerEnd<NetworkManagerMarker>,
4301    ) -> Result<(), fidl::Error>;
4302    fn r#get_endpoint_manager(
4303        &self,
4304        endp_manager: fidl::endpoints::ServerEnd<EndpointManagerMarker>,
4305    ) -> Result<(), fidl::Error>;
4306    type SetupResponseFut: std::future::Future<
4307            Output = Result<
4308                (i32, Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>),
4309                fidl::Error,
4310            >,
4311        > + Send;
4312    fn r#setup(&self, networks: &[NetworkSetup]) -> Self::SetupResponseFut;
4313}
4314#[derive(Debug)]
4315#[cfg(target_os = "fuchsia")]
4316pub struct NetworkContextSynchronousProxy {
4317    client: fidl::client::sync::Client,
4318}
4319
4320#[cfg(target_os = "fuchsia")]
4321impl fidl::endpoints::SynchronousProxy for NetworkContextSynchronousProxy {
4322    type Proxy = NetworkContextProxy;
4323    type Protocol = NetworkContextMarker;
4324
4325    fn from_channel(inner: fidl::Channel) -> Self {
4326        Self::new(inner)
4327    }
4328
4329    fn into_channel(self) -> fidl::Channel {
4330        self.client.into_channel()
4331    }
4332
4333    fn as_channel(&self) -> &fidl::Channel {
4334        self.client.as_channel()
4335    }
4336}
4337
4338#[cfg(target_os = "fuchsia")]
4339impl NetworkContextSynchronousProxy {
4340    pub fn new(channel: fidl::Channel) -> Self {
4341        Self { client: fidl::client::sync::Client::new(channel) }
4342    }
4343
4344    pub fn into_channel(self) -> fidl::Channel {
4345        self.client.into_channel()
4346    }
4347
4348    /// Waits until an event arrives and returns it. It is safe for other
4349    /// threads to make concurrent requests while waiting for an event.
4350    pub fn wait_for_event(
4351        &self,
4352        deadline: zx::MonotonicInstant,
4353    ) -> Result<NetworkContextEvent, fidl::Error> {
4354        NetworkContextEvent::decode(self.client.wait_for_event::<NetworkContextMarker>(deadline)?)
4355    }
4356
4357    pub fn r#clone(
4358        &self,
4359        mut network_context: fidl::endpoints::ServerEnd<NetworkContextMarker>,
4360    ) -> Result<(), fidl::Error> {
4361        self.client.send::<NetworkContextCloneRequest>(
4362            (network_context,),
4363            0x1f7eb1b78a2ad2b0,
4364            fidl::encoding::DynamicFlags::empty(),
4365        )
4366    }
4367
4368    pub fn r#get_network_manager(
4369        &self,
4370        mut net_manager: fidl::endpoints::ServerEnd<NetworkManagerMarker>,
4371    ) -> Result<(), fidl::Error> {
4372        self.client.send::<NetworkContextGetNetworkManagerRequest>(
4373            (net_manager,),
4374            0x379899a30766afd4,
4375            fidl::encoding::DynamicFlags::empty(),
4376        )
4377    }
4378
4379    pub fn r#get_endpoint_manager(
4380        &self,
4381        mut endp_manager: fidl::endpoints::ServerEnd<EndpointManagerMarker>,
4382    ) -> Result<(), fidl::Error> {
4383        self.client.send::<NetworkContextGetEndpointManagerRequest>(
4384            (endp_manager,),
4385            0x5e64360363b9bd81,
4386            fidl::encoding::DynamicFlags::empty(),
4387        )
4388    }
4389
4390    /// Creates a collection of networks described by `networks`.
4391    /// `status` is `ZX_OK` for success
4392    /// `setup_handle` is a resource that references and maintains the lifecycle of
4393    ///                the created networks and endpoints.
4394    pub fn r#setup(
4395        &self,
4396        mut networks: &[NetworkSetup],
4397        ___deadline: zx::MonotonicInstant,
4398    ) -> Result<(i32, Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>), fidl::Error> {
4399        let _response = self.client.send_query::<
4400            NetworkContextSetupRequest,
4401            NetworkContextSetupResponse,
4402            NetworkContextMarker,
4403        >(
4404            (networks,),
4405            0x1680e0b13823fc8c,
4406            fidl::encoding::DynamicFlags::empty(),
4407            ___deadline,
4408        )?;
4409        Ok((_response.status, _response.setup_handle))
4410    }
4411}
4412
4413#[cfg(target_os = "fuchsia")]
4414impl From<NetworkContextSynchronousProxy> for zx::NullableHandle {
4415    fn from(value: NetworkContextSynchronousProxy) -> Self {
4416        value.into_channel().into()
4417    }
4418}
4419
4420#[cfg(target_os = "fuchsia")]
4421impl From<fidl::Channel> for NetworkContextSynchronousProxy {
4422    fn from(value: fidl::Channel) -> Self {
4423        Self::new(value)
4424    }
4425}
4426
4427#[cfg(target_os = "fuchsia")]
4428impl fidl::endpoints::FromClient for NetworkContextSynchronousProxy {
4429    type Protocol = NetworkContextMarker;
4430
4431    fn from_client(value: fidl::endpoints::ClientEnd<NetworkContextMarker>) -> Self {
4432        Self::new(value.into_channel())
4433    }
4434}
4435
4436#[derive(Debug, Clone)]
4437pub struct NetworkContextProxy {
4438    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
4439}
4440
4441impl fidl::endpoints::Proxy for NetworkContextProxy {
4442    type Protocol = NetworkContextMarker;
4443
4444    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
4445        Self::new(inner)
4446    }
4447
4448    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
4449        self.client.into_channel().map_err(|client| Self { client })
4450    }
4451
4452    fn as_channel(&self) -> &::fidl::AsyncChannel {
4453        self.client.as_channel()
4454    }
4455}
4456
4457impl NetworkContextProxy {
4458    /// Create a new Proxy for fuchsia.netemul.network/NetworkContext.
4459    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
4460        let protocol_name = <NetworkContextMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
4461        Self { client: fidl::client::Client::new(channel, protocol_name) }
4462    }
4463
4464    /// Get a Stream of events from the remote end of the protocol.
4465    ///
4466    /// # Panics
4467    ///
4468    /// Panics if the event stream was already taken.
4469    pub fn take_event_stream(&self) -> NetworkContextEventStream {
4470        NetworkContextEventStream { event_receiver: self.client.take_event_receiver() }
4471    }
4472
4473    pub fn r#clone(
4474        &self,
4475        mut network_context: fidl::endpoints::ServerEnd<NetworkContextMarker>,
4476    ) -> Result<(), fidl::Error> {
4477        NetworkContextProxyInterface::r#clone(self, network_context)
4478    }
4479
4480    pub fn r#get_network_manager(
4481        &self,
4482        mut net_manager: fidl::endpoints::ServerEnd<NetworkManagerMarker>,
4483    ) -> Result<(), fidl::Error> {
4484        NetworkContextProxyInterface::r#get_network_manager(self, net_manager)
4485    }
4486
4487    pub fn r#get_endpoint_manager(
4488        &self,
4489        mut endp_manager: fidl::endpoints::ServerEnd<EndpointManagerMarker>,
4490    ) -> Result<(), fidl::Error> {
4491        NetworkContextProxyInterface::r#get_endpoint_manager(self, endp_manager)
4492    }
4493
4494    /// Creates a collection of networks described by `networks`.
4495    /// `status` is `ZX_OK` for success
4496    /// `setup_handle` is a resource that references and maintains the lifecycle of
4497    ///                the created networks and endpoints.
4498    pub fn r#setup(
4499        &self,
4500        mut networks: &[NetworkSetup],
4501    ) -> fidl::client::QueryResponseFut<
4502        (i32, Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>),
4503        fidl::encoding::DefaultFuchsiaResourceDialect,
4504    > {
4505        NetworkContextProxyInterface::r#setup(self, networks)
4506    }
4507}
4508
4509impl NetworkContextProxyInterface for NetworkContextProxy {
4510    fn r#clone(
4511        &self,
4512        mut network_context: fidl::endpoints::ServerEnd<NetworkContextMarker>,
4513    ) -> Result<(), fidl::Error> {
4514        self.client.send::<NetworkContextCloneRequest>(
4515            (network_context,),
4516            0x1f7eb1b78a2ad2b0,
4517            fidl::encoding::DynamicFlags::empty(),
4518        )
4519    }
4520
4521    fn r#get_network_manager(
4522        &self,
4523        mut net_manager: fidl::endpoints::ServerEnd<NetworkManagerMarker>,
4524    ) -> Result<(), fidl::Error> {
4525        self.client.send::<NetworkContextGetNetworkManagerRequest>(
4526            (net_manager,),
4527            0x379899a30766afd4,
4528            fidl::encoding::DynamicFlags::empty(),
4529        )
4530    }
4531
4532    fn r#get_endpoint_manager(
4533        &self,
4534        mut endp_manager: fidl::endpoints::ServerEnd<EndpointManagerMarker>,
4535    ) -> Result<(), fidl::Error> {
4536        self.client.send::<NetworkContextGetEndpointManagerRequest>(
4537            (endp_manager,),
4538            0x5e64360363b9bd81,
4539            fidl::encoding::DynamicFlags::empty(),
4540        )
4541    }
4542
4543    type SetupResponseFut = fidl::client::QueryResponseFut<
4544        (i32, Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>),
4545        fidl::encoding::DefaultFuchsiaResourceDialect,
4546    >;
4547    fn r#setup(&self, mut networks: &[NetworkSetup]) -> Self::SetupResponseFut {
4548        fn _decode(
4549            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4550        ) -> Result<(i32, Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>), fidl::Error>
4551        {
4552            let _response = fidl::client::decode_transaction_body::<
4553                NetworkContextSetupResponse,
4554                fidl::encoding::DefaultFuchsiaResourceDialect,
4555                0x1680e0b13823fc8c,
4556            >(_buf?)?;
4557            Ok((_response.status, _response.setup_handle))
4558        }
4559        self.client.send_query_and_decode::<
4560            NetworkContextSetupRequest,
4561            (i32, Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>),
4562        >(
4563            (networks,),
4564            0x1680e0b13823fc8c,
4565            fidl::encoding::DynamicFlags::empty(),
4566            _decode,
4567        )
4568    }
4569}
4570
4571pub struct NetworkContextEventStream {
4572    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
4573}
4574
4575impl std::marker::Unpin for NetworkContextEventStream {}
4576
4577impl futures::stream::FusedStream for NetworkContextEventStream {
4578    fn is_terminated(&self) -> bool {
4579        self.event_receiver.is_terminated()
4580    }
4581}
4582
4583impl futures::Stream for NetworkContextEventStream {
4584    type Item = Result<NetworkContextEvent, fidl::Error>;
4585
4586    fn poll_next(
4587        mut self: std::pin::Pin<&mut Self>,
4588        cx: &mut std::task::Context<'_>,
4589    ) -> std::task::Poll<Option<Self::Item>> {
4590        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
4591            &mut self.event_receiver,
4592            cx
4593        )?) {
4594            Some(buf) => std::task::Poll::Ready(Some(NetworkContextEvent::decode(buf))),
4595            None => std::task::Poll::Ready(None),
4596        }
4597    }
4598}
4599
4600#[derive(Debug)]
4601pub enum NetworkContextEvent {}
4602
4603impl NetworkContextEvent {
4604    /// Decodes a message buffer as a [`NetworkContextEvent`].
4605    fn decode(
4606        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
4607    ) -> Result<NetworkContextEvent, fidl::Error> {
4608        let (bytes, _handles) = buf.split_mut();
4609        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4610        debug_assert_eq!(tx_header.tx_id, 0);
4611        match tx_header.ordinal {
4612            _ => Err(fidl::Error::UnknownOrdinal {
4613                ordinal: tx_header.ordinal,
4614                protocol_name:
4615                    <NetworkContextMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4616            }),
4617        }
4618    }
4619}
4620
4621/// A Stream of incoming requests for fuchsia.netemul.network/NetworkContext.
4622pub struct NetworkContextRequestStream {
4623    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4624    is_terminated: bool,
4625}
4626
4627impl std::marker::Unpin for NetworkContextRequestStream {}
4628
4629impl futures::stream::FusedStream for NetworkContextRequestStream {
4630    fn is_terminated(&self) -> bool {
4631        self.is_terminated
4632    }
4633}
4634
4635impl fidl::endpoints::RequestStream for NetworkContextRequestStream {
4636    type Protocol = NetworkContextMarker;
4637    type ControlHandle = NetworkContextControlHandle;
4638
4639    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
4640        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
4641    }
4642
4643    fn control_handle(&self) -> Self::ControlHandle {
4644        NetworkContextControlHandle { inner: self.inner.clone() }
4645    }
4646
4647    fn into_inner(
4648        self,
4649    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
4650    {
4651        (self.inner, self.is_terminated)
4652    }
4653
4654    fn from_inner(
4655        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4656        is_terminated: bool,
4657    ) -> Self {
4658        Self { inner, is_terminated }
4659    }
4660}
4661
4662impl futures::Stream for NetworkContextRequestStream {
4663    type Item = Result<NetworkContextRequest, fidl::Error>;
4664
4665    fn poll_next(
4666        mut self: std::pin::Pin<&mut Self>,
4667        cx: &mut std::task::Context<'_>,
4668    ) -> std::task::Poll<Option<Self::Item>> {
4669        let this = &mut *self;
4670        if this.inner.check_shutdown(cx) {
4671            this.is_terminated = true;
4672            return std::task::Poll::Ready(None);
4673        }
4674        if this.is_terminated {
4675            panic!("polled NetworkContextRequestStream after completion");
4676        }
4677        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
4678            |bytes, handles| {
4679                match this.inner.channel().read_etc(cx, bytes, handles) {
4680                    std::task::Poll::Ready(Ok(())) => {}
4681                    std::task::Poll::Pending => return std::task::Poll::Pending,
4682                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
4683                        this.is_terminated = true;
4684                        return std::task::Poll::Ready(None);
4685                    }
4686                    std::task::Poll::Ready(Err(e)) => {
4687                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
4688                            e.into(),
4689                        ))));
4690                    }
4691                }
4692
4693                // A message has been received from the channel
4694                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4695
4696                std::task::Poll::Ready(Some(match header.ordinal {
4697                    0x1f7eb1b78a2ad2b0 => {
4698                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
4699                        let mut req = fidl::new_empty!(
4700                            NetworkContextCloneRequest,
4701                            fidl::encoding::DefaultFuchsiaResourceDialect
4702                        );
4703                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkContextCloneRequest>(&header, _body_bytes, handles, &mut req)?;
4704                        let control_handle =
4705                            NetworkContextControlHandle { inner: this.inner.clone() };
4706                        Ok(NetworkContextRequest::Clone {
4707                            network_context: req.network_context,
4708
4709                            control_handle,
4710                        })
4711                    }
4712                    0x379899a30766afd4 => {
4713                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
4714                        let mut req = fidl::new_empty!(
4715                            NetworkContextGetNetworkManagerRequest,
4716                            fidl::encoding::DefaultFuchsiaResourceDialect
4717                        );
4718                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkContextGetNetworkManagerRequest>(&header, _body_bytes, handles, &mut req)?;
4719                        let control_handle =
4720                            NetworkContextControlHandle { inner: this.inner.clone() };
4721                        Ok(NetworkContextRequest::GetNetworkManager {
4722                            net_manager: req.net_manager,
4723
4724                            control_handle,
4725                        })
4726                    }
4727                    0x5e64360363b9bd81 => {
4728                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
4729                        let mut req = fidl::new_empty!(
4730                            NetworkContextGetEndpointManagerRequest,
4731                            fidl::encoding::DefaultFuchsiaResourceDialect
4732                        );
4733                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkContextGetEndpointManagerRequest>(&header, _body_bytes, handles, &mut req)?;
4734                        let control_handle =
4735                            NetworkContextControlHandle { inner: this.inner.clone() };
4736                        Ok(NetworkContextRequest::GetEndpointManager {
4737                            endp_manager: req.endp_manager,
4738
4739                            control_handle,
4740                        })
4741                    }
4742                    0x1680e0b13823fc8c => {
4743                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
4744                        let mut req = fidl::new_empty!(
4745                            NetworkContextSetupRequest,
4746                            fidl::encoding::DefaultFuchsiaResourceDialect
4747                        );
4748                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkContextSetupRequest>(&header, _body_bytes, handles, &mut req)?;
4749                        let control_handle =
4750                            NetworkContextControlHandle { inner: this.inner.clone() };
4751                        Ok(NetworkContextRequest::Setup {
4752                            networks: req.networks,
4753
4754                            responder: NetworkContextSetupResponder {
4755                                control_handle: std::mem::ManuallyDrop::new(control_handle),
4756                                tx_id: header.tx_id,
4757                            },
4758                        })
4759                    }
4760                    _ => Err(fidl::Error::UnknownOrdinal {
4761                        ordinal: header.ordinal,
4762                        protocol_name:
4763                            <NetworkContextMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4764                    }),
4765                }))
4766            },
4767        )
4768    }
4769}
4770
4771/// Main entry point to manage virtual networks and endpoints.
4772///
4773/// Every new connection to NetworkContext provides access to a an isolated
4774/// namespace for networks and endpoints. `Clone` is the only means by which a
4775/// client can acquire a new connection to the same network context.
4776#[derive(Debug)]
4777pub enum NetworkContextRequest {
4778    Clone {
4779        network_context: fidl::endpoints::ServerEnd<NetworkContextMarker>,
4780        control_handle: NetworkContextControlHandle,
4781    },
4782    GetNetworkManager {
4783        net_manager: fidl::endpoints::ServerEnd<NetworkManagerMarker>,
4784        control_handle: NetworkContextControlHandle,
4785    },
4786    GetEndpointManager {
4787        endp_manager: fidl::endpoints::ServerEnd<EndpointManagerMarker>,
4788        control_handle: NetworkContextControlHandle,
4789    },
4790    /// Creates a collection of networks described by `networks`.
4791    /// `status` is `ZX_OK` for success
4792    /// `setup_handle` is a resource that references and maintains the lifecycle of
4793    ///                the created networks and endpoints.
4794    Setup { networks: Vec<NetworkSetup>, responder: NetworkContextSetupResponder },
4795}
4796
4797impl NetworkContextRequest {
4798    #[allow(irrefutable_let_patterns)]
4799    pub fn into_clone(
4800        self,
4801    ) -> Option<(fidl::endpoints::ServerEnd<NetworkContextMarker>, NetworkContextControlHandle)>
4802    {
4803        if let NetworkContextRequest::Clone { network_context, control_handle } = self {
4804            Some((network_context, control_handle))
4805        } else {
4806            None
4807        }
4808    }
4809
4810    #[allow(irrefutable_let_patterns)]
4811    pub fn into_get_network_manager(
4812        self,
4813    ) -> Option<(fidl::endpoints::ServerEnd<NetworkManagerMarker>, NetworkContextControlHandle)>
4814    {
4815        if let NetworkContextRequest::GetNetworkManager { net_manager, control_handle } = self {
4816            Some((net_manager, control_handle))
4817        } else {
4818            None
4819        }
4820    }
4821
4822    #[allow(irrefutable_let_patterns)]
4823    pub fn into_get_endpoint_manager(
4824        self,
4825    ) -> Option<(fidl::endpoints::ServerEnd<EndpointManagerMarker>, NetworkContextControlHandle)>
4826    {
4827        if let NetworkContextRequest::GetEndpointManager { endp_manager, control_handle } = self {
4828            Some((endp_manager, control_handle))
4829        } else {
4830            None
4831        }
4832    }
4833
4834    #[allow(irrefutable_let_patterns)]
4835    pub fn into_setup(self) -> Option<(Vec<NetworkSetup>, NetworkContextSetupResponder)> {
4836        if let NetworkContextRequest::Setup { networks, responder } = self {
4837            Some((networks, responder))
4838        } else {
4839            None
4840        }
4841    }
4842
4843    /// Name of the method defined in FIDL
4844    pub fn method_name(&self) -> &'static str {
4845        match *self {
4846            NetworkContextRequest::Clone { .. } => "clone",
4847            NetworkContextRequest::GetNetworkManager { .. } => "get_network_manager",
4848            NetworkContextRequest::GetEndpointManager { .. } => "get_endpoint_manager",
4849            NetworkContextRequest::Setup { .. } => "setup",
4850        }
4851    }
4852}
4853
4854#[derive(Debug, Clone)]
4855pub struct NetworkContextControlHandle {
4856    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4857}
4858
4859impl fidl::endpoints::ControlHandle for NetworkContextControlHandle {
4860    fn shutdown(&self) {
4861        self.inner.shutdown()
4862    }
4863
4864    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
4865        self.inner.shutdown_with_epitaph(status)
4866    }
4867
4868    fn is_closed(&self) -> bool {
4869        self.inner.channel().is_closed()
4870    }
4871    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
4872        self.inner.channel().on_closed()
4873    }
4874
4875    #[cfg(target_os = "fuchsia")]
4876    fn signal_peer(
4877        &self,
4878        clear_mask: zx::Signals,
4879        set_mask: zx::Signals,
4880    ) -> Result<(), zx_status::Status> {
4881        use fidl::Peered;
4882        self.inner.channel().signal_peer(clear_mask, set_mask)
4883    }
4884}
4885
4886impl NetworkContextControlHandle {}
4887
4888#[must_use = "FIDL methods require a response to be sent"]
4889#[derive(Debug)]
4890pub struct NetworkContextSetupResponder {
4891    control_handle: std::mem::ManuallyDrop<NetworkContextControlHandle>,
4892    tx_id: u32,
4893}
4894
4895/// Set the the channel to be shutdown (see [`NetworkContextControlHandle::shutdown`])
4896/// if the responder is dropped without sending a response, so that the client
4897/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4898impl std::ops::Drop for NetworkContextSetupResponder {
4899    fn drop(&mut self) {
4900        self.control_handle.shutdown();
4901        // Safety: drops once, never accessed again
4902        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4903    }
4904}
4905
4906impl fidl::endpoints::Responder for NetworkContextSetupResponder {
4907    type ControlHandle = NetworkContextControlHandle;
4908
4909    fn control_handle(&self) -> &NetworkContextControlHandle {
4910        &self.control_handle
4911    }
4912
4913    fn drop_without_shutdown(mut self) {
4914        // Safety: drops once, never accessed again due to mem::forget
4915        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4916        // Prevent Drop from running (which would shut down the channel)
4917        std::mem::forget(self);
4918    }
4919}
4920
4921impl NetworkContextSetupResponder {
4922    /// Sends a response to the FIDL transaction.
4923    ///
4924    /// Sets the channel to shutdown if an error occurs.
4925    pub fn send(
4926        self,
4927        mut status: i32,
4928        mut setup_handle: Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
4929    ) -> Result<(), fidl::Error> {
4930        let _result = self.send_raw(status, setup_handle);
4931        if _result.is_err() {
4932            self.control_handle.shutdown();
4933        }
4934        self.drop_without_shutdown();
4935        _result
4936    }
4937
4938    /// Similar to "send" but does not shutdown the channel if an error occurs.
4939    pub fn send_no_shutdown_on_err(
4940        self,
4941        mut status: i32,
4942        mut setup_handle: Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
4943    ) -> Result<(), fidl::Error> {
4944        let _result = self.send_raw(status, setup_handle);
4945        self.drop_without_shutdown();
4946        _result
4947    }
4948
4949    fn send_raw(
4950        &self,
4951        mut status: i32,
4952        mut setup_handle: Option<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
4953    ) -> Result<(), fidl::Error> {
4954        self.control_handle.inner.send::<NetworkContextSetupResponse>(
4955            (status, setup_handle),
4956            self.tx_id,
4957            0x1680e0b13823fc8c,
4958            fidl::encoding::DynamicFlags::empty(),
4959        )
4960    }
4961}
4962
4963#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4964pub struct NetworkManagerMarker;
4965
4966impl fidl::endpoints::ProtocolMarker for NetworkManagerMarker {
4967    type Proxy = NetworkManagerProxy;
4968    type RequestStream = NetworkManagerRequestStream;
4969    #[cfg(target_os = "fuchsia")]
4970    type SynchronousProxy = NetworkManagerSynchronousProxy;
4971
4972    const DEBUG_NAME: &'static str = "(anonymous) NetworkManager";
4973}
4974
4975pub trait NetworkManagerProxyInterface: Send + Sync {
4976    type ListNetworksResponseFut: std::future::Future<Output = Result<Vec<String>, fidl::Error>>
4977        + Send;
4978    fn r#list_networks(&self) -> Self::ListNetworksResponseFut;
4979    type CreateNetworkResponseFut: std::future::Future<
4980            Output = Result<(i32, Option<fidl::endpoints::ClientEnd<NetworkMarker>>), fidl::Error>,
4981        > + Send;
4982    fn r#create_network(
4983        &self,
4984        name: &str,
4985        config: &NetworkConfig,
4986    ) -> Self::CreateNetworkResponseFut;
4987    type GetNetworkResponseFut: std::future::Future<
4988            Output = Result<Option<fidl::endpoints::ClientEnd<NetworkMarker>>, fidl::Error>,
4989        > + Send;
4990    fn r#get_network(&self, name: &str) -> Self::GetNetworkResponseFut;
4991}
4992#[derive(Debug)]
4993#[cfg(target_os = "fuchsia")]
4994pub struct NetworkManagerSynchronousProxy {
4995    client: fidl::client::sync::Client,
4996}
4997
4998#[cfg(target_os = "fuchsia")]
4999impl fidl::endpoints::SynchronousProxy for NetworkManagerSynchronousProxy {
5000    type Proxy = NetworkManagerProxy;
5001    type Protocol = NetworkManagerMarker;
5002
5003    fn from_channel(inner: fidl::Channel) -> Self {
5004        Self::new(inner)
5005    }
5006
5007    fn into_channel(self) -> fidl::Channel {
5008        self.client.into_channel()
5009    }
5010
5011    fn as_channel(&self) -> &fidl::Channel {
5012        self.client.as_channel()
5013    }
5014}
5015
5016#[cfg(target_os = "fuchsia")]
5017impl NetworkManagerSynchronousProxy {
5018    pub fn new(channel: fidl::Channel) -> Self {
5019        Self { client: fidl::client::sync::Client::new(channel) }
5020    }
5021
5022    pub fn into_channel(self) -> fidl::Channel {
5023        self.client.into_channel()
5024    }
5025
5026    /// Waits until an event arrives and returns it. It is safe for other
5027    /// threads to make concurrent requests while waiting for an event.
5028    pub fn wait_for_event(
5029        &self,
5030        deadline: zx::MonotonicInstant,
5031    ) -> Result<NetworkManagerEvent, fidl::Error> {
5032        NetworkManagerEvent::decode(self.client.wait_for_event::<NetworkManagerMarker>(deadline)?)
5033    }
5034
5035    /// Lists emulated networks by name.
5036    pub fn r#list_networks(
5037        &self,
5038        ___deadline: zx::MonotonicInstant,
5039    ) -> Result<Vec<String>, fidl::Error> {
5040        let _response = self.client.send_query::<
5041            fidl::encoding::EmptyPayload,
5042            NetworkManagerListNetworksResponse,
5043            NetworkManagerMarker,
5044        >(
5045            (),
5046            0x2488653e0974cc62,
5047            fidl::encoding::DynamicFlags::empty(),
5048            ___deadline,
5049        )?;
5050        Ok(_response.nets)
5051    }
5052
5053    /// Creates a new network with given name and config.
5054    pub fn r#create_network(
5055        &self,
5056        mut name: &str,
5057        mut config: &NetworkConfig,
5058        ___deadline: zx::MonotonicInstant,
5059    ) -> Result<(i32, Option<fidl::endpoints::ClientEnd<NetworkMarker>>), fidl::Error> {
5060        let _response = self.client.send_query::<
5061            NetworkManagerCreateNetworkRequest,
5062            NetworkManagerCreateNetworkResponse,
5063            NetworkManagerMarker,
5064        >(
5065            (name, config,),
5066            0x6052eb5ac709af,
5067            fidl::encoding::DynamicFlags::empty(),
5068            ___deadline,
5069        )?;
5070        Ok((_response.status, _response.net))
5071    }
5072
5073    /// Gets a handle to a network.
5074    pub fn r#get_network(
5075        &self,
5076        mut name: &str,
5077        ___deadline: zx::MonotonicInstant,
5078    ) -> Result<Option<fidl::endpoints::ClientEnd<NetworkMarker>>, fidl::Error> {
5079        let _response = self.client.send_query::<
5080            NetworkManagerGetNetworkRequest,
5081            NetworkManagerGetNetworkResponse,
5082            NetworkManagerMarker,
5083        >(
5084            (name,),
5085            0x59930bf23acc7d9a,
5086            fidl::encoding::DynamicFlags::empty(),
5087            ___deadline,
5088        )?;
5089        Ok(_response.net)
5090    }
5091}
5092
5093#[cfg(target_os = "fuchsia")]
5094impl From<NetworkManagerSynchronousProxy> for zx::NullableHandle {
5095    fn from(value: NetworkManagerSynchronousProxy) -> Self {
5096        value.into_channel().into()
5097    }
5098}
5099
5100#[cfg(target_os = "fuchsia")]
5101impl From<fidl::Channel> for NetworkManagerSynchronousProxy {
5102    fn from(value: fidl::Channel) -> Self {
5103        Self::new(value)
5104    }
5105}
5106
5107#[cfg(target_os = "fuchsia")]
5108impl fidl::endpoints::FromClient for NetworkManagerSynchronousProxy {
5109    type Protocol = NetworkManagerMarker;
5110
5111    fn from_client(value: fidl::endpoints::ClientEnd<NetworkManagerMarker>) -> Self {
5112        Self::new(value.into_channel())
5113    }
5114}
5115
5116#[derive(Debug, Clone)]
5117pub struct NetworkManagerProxy {
5118    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
5119}
5120
5121impl fidl::endpoints::Proxy for NetworkManagerProxy {
5122    type Protocol = NetworkManagerMarker;
5123
5124    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
5125        Self::new(inner)
5126    }
5127
5128    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
5129        self.client.into_channel().map_err(|client| Self { client })
5130    }
5131
5132    fn as_channel(&self) -> &::fidl::AsyncChannel {
5133        self.client.as_channel()
5134    }
5135}
5136
5137impl NetworkManagerProxy {
5138    /// Create a new Proxy for fuchsia.netemul.network/NetworkManager.
5139    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
5140        let protocol_name = <NetworkManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
5141        Self { client: fidl::client::Client::new(channel, protocol_name) }
5142    }
5143
5144    /// Get a Stream of events from the remote end of the protocol.
5145    ///
5146    /// # Panics
5147    ///
5148    /// Panics if the event stream was already taken.
5149    pub fn take_event_stream(&self) -> NetworkManagerEventStream {
5150        NetworkManagerEventStream { event_receiver: self.client.take_event_receiver() }
5151    }
5152
5153    /// Lists emulated networks by name.
5154    pub fn r#list_networks(
5155        &self,
5156    ) -> fidl::client::QueryResponseFut<Vec<String>, fidl::encoding::DefaultFuchsiaResourceDialect>
5157    {
5158        NetworkManagerProxyInterface::r#list_networks(self)
5159    }
5160
5161    /// Creates a new network with given name and config.
5162    pub fn r#create_network(
5163        &self,
5164        mut name: &str,
5165        mut config: &NetworkConfig,
5166    ) -> fidl::client::QueryResponseFut<
5167        (i32, Option<fidl::endpoints::ClientEnd<NetworkMarker>>),
5168        fidl::encoding::DefaultFuchsiaResourceDialect,
5169    > {
5170        NetworkManagerProxyInterface::r#create_network(self, name, config)
5171    }
5172
5173    /// Gets a handle to a network.
5174    pub fn r#get_network(
5175        &self,
5176        mut name: &str,
5177    ) -> fidl::client::QueryResponseFut<
5178        Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5179        fidl::encoding::DefaultFuchsiaResourceDialect,
5180    > {
5181        NetworkManagerProxyInterface::r#get_network(self, name)
5182    }
5183}
5184
5185impl NetworkManagerProxyInterface for NetworkManagerProxy {
5186    type ListNetworksResponseFut =
5187        fidl::client::QueryResponseFut<Vec<String>, fidl::encoding::DefaultFuchsiaResourceDialect>;
5188    fn r#list_networks(&self) -> Self::ListNetworksResponseFut {
5189        fn _decode(
5190            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
5191        ) -> Result<Vec<String>, fidl::Error> {
5192            let _response = fidl::client::decode_transaction_body::<
5193                NetworkManagerListNetworksResponse,
5194                fidl::encoding::DefaultFuchsiaResourceDialect,
5195                0x2488653e0974cc62,
5196            >(_buf?)?;
5197            Ok(_response.nets)
5198        }
5199        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, Vec<String>>(
5200            (),
5201            0x2488653e0974cc62,
5202            fidl::encoding::DynamicFlags::empty(),
5203            _decode,
5204        )
5205    }
5206
5207    type CreateNetworkResponseFut = fidl::client::QueryResponseFut<
5208        (i32, Option<fidl::endpoints::ClientEnd<NetworkMarker>>),
5209        fidl::encoding::DefaultFuchsiaResourceDialect,
5210    >;
5211    fn r#create_network(
5212        &self,
5213        mut name: &str,
5214        mut config: &NetworkConfig,
5215    ) -> Self::CreateNetworkResponseFut {
5216        fn _decode(
5217            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
5218        ) -> Result<(i32, Option<fidl::endpoints::ClientEnd<NetworkMarker>>), fidl::Error> {
5219            let _response = fidl::client::decode_transaction_body::<
5220                NetworkManagerCreateNetworkResponse,
5221                fidl::encoding::DefaultFuchsiaResourceDialect,
5222                0x6052eb5ac709af,
5223            >(_buf?)?;
5224            Ok((_response.status, _response.net))
5225        }
5226        self.client.send_query_and_decode::<
5227            NetworkManagerCreateNetworkRequest,
5228            (i32, Option<fidl::endpoints::ClientEnd<NetworkMarker>>),
5229        >(
5230            (name, config,),
5231            0x6052eb5ac709af,
5232            fidl::encoding::DynamicFlags::empty(),
5233            _decode,
5234        )
5235    }
5236
5237    type GetNetworkResponseFut = fidl::client::QueryResponseFut<
5238        Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5239        fidl::encoding::DefaultFuchsiaResourceDialect,
5240    >;
5241    fn r#get_network(&self, mut name: &str) -> Self::GetNetworkResponseFut {
5242        fn _decode(
5243            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
5244        ) -> Result<Option<fidl::endpoints::ClientEnd<NetworkMarker>>, fidl::Error> {
5245            let _response = fidl::client::decode_transaction_body::<
5246                NetworkManagerGetNetworkResponse,
5247                fidl::encoding::DefaultFuchsiaResourceDialect,
5248                0x59930bf23acc7d9a,
5249            >(_buf?)?;
5250            Ok(_response.net)
5251        }
5252        self.client.send_query_and_decode::<
5253            NetworkManagerGetNetworkRequest,
5254            Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5255        >(
5256            (name,),
5257            0x59930bf23acc7d9a,
5258            fidl::encoding::DynamicFlags::empty(),
5259            _decode,
5260        )
5261    }
5262}
5263
5264pub struct NetworkManagerEventStream {
5265    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
5266}
5267
5268impl std::marker::Unpin for NetworkManagerEventStream {}
5269
5270impl futures::stream::FusedStream for NetworkManagerEventStream {
5271    fn is_terminated(&self) -> bool {
5272        self.event_receiver.is_terminated()
5273    }
5274}
5275
5276impl futures::Stream for NetworkManagerEventStream {
5277    type Item = Result<NetworkManagerEvent, fidl::Error>;
5278
5279    fn poll_next(
5280        mut self: std::pin::Pin<&mut Self>,
5281        cx: &mut std::task::Context<'_>,
5282    ) -> std::task::Poll<Option<Self::Item>> {
5283        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
5284            &mut self.event_receiver,
5285            cx
5286        )?) {
5287            Some(buf) => std::task::Poll::Ready(Some(NetworkManagerEvent::decode(buf))),
5288            None => std::task::Poll::Ready(None),
5289        }
5290    }
5291}
5292
5293#[derive(Debug)]
5294pub enum NetworkManagerEvent {}
5295
5296impl NetworkManagerEvent {
5297    /// Decodes a message buffer as a [`NetworkManagerEvent`].
5298    fn decode(
5299        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
5300    ) -> Result<NetworkManagerEvent, fidl::Error> {
5301        let (bytes, _handles) = buf.split_mut();
5302        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5303        debug_assert_eq!(tx_header.tx_id, 0);
5304        match tx_header.ordinal {
5305            _ => Err(fidl::Error::UnknownOrdinal {
5306                ordinal: tx_header.ordinal,
5307                protocol_name:
5308                    <NetworkManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5309            }),
5310        }
5311    }
5312}
5313
5314/// A Stream of incoming requests for fuchsia.netemul.network/NetworkManager.
5315pub struct NetworkManagerRequestStream {
5316    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5317    is_terminated: bool,
5318}
5319
5320impl std::marker::Unpin for NetworkManagerRequestStream {}
5321
5322impl futures::stream::FusedStream for NetworkManagerRequestStream {
5323    fn is_terminated(&self) -> bool {
5324        self.is_terminated
5325    }
5326}
5327
5328impl fidl::endpoints::RequestStream for NetworkManagerRequestStream {
5329    type Protocol = NetworkManagerMarker;
5330    type ControlHandle = NetworkManagerControlHandle;
5331
5332    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
5333        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
5334    }
5335
5336    fn control_handle(&self) -> Self::ControlHandle {
5337        NetworkManagerControlHandle { inner: self.inner.clone() }
5338    }
5339
5340    fn into_inner(
5341        self,
5342    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
5343    {
5344        (self.inner, self.is_terminated)
5345    }
5346
5347    fn from_inner(
5348        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5349        is_terminated: bool,
5350    ) -> Self {
5351        Self { inner, is_terminated }
5352    }
5353}
5354
5355impl futures::Stream for NetworkManagerRequestStream {
5356    type Item = Result<NetworkManagerRequest, fidl::Error>;
5357
5358    fn poll_next(
5359        mut self: std::pin::Pin<&mut Self>,
5360        cx: &mut std::task::Context<'_>,
5361    ) -> std::task::Poll<Option<Self::Item>> {
5362        let this = &mut *self;
5363        if this.inner.check_shutdown(cx) {
5364            this.is_terminated = true;
5365            return std::task::Poll::Ready(None);
5366        }
5367        if this.is_terminated {
5368            panic!("polled NetworkManagerRequestStream after completion");
5369        }
5370        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
5371            |bytes, handles| {
5372                match this.inner.channel().read_etc(cx, bytes, handles) {
5373                    std::task::Poll::Ready(Ok(())) => {}
5374                    std::task::Poll::Pending => return std::task::Poll::Pending,
5375                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
5376                        this.is_terminated = true;
5377                        return std::task::Poll::Ready(None);
5378                    }
5379                    std::task::Poll::Ready(Err(e)) => {
5380                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
5381                            e.into(),
5382                        ))));
5383                    }
5384                }
5385
5386                // A message has been received from the channel
5387                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5388
5389                std::task::Poll::Ready(Some(match header.ordinal {
5390                    0x2488653e0974cc62 => {
5391                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
5392                        let mut req = fidl::new_empty!(
5393                            fidl::encoding::EmptyPayload,
5394                            fidl::encoding::DefaultFuchsiaResourceDialect
5395                        );
5396                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
5397                        let control_handle =
5398                            NetworkManagerControlHandle { inner: this.inner.clone() };
5399                        Ok(NetworkManagerRequest::ListNetworks {
5400                            responder: NetworkManagerListNetworksResponder {
5401                                control_handle: std::mem::ManuallyDrop::new(control_handle),
5402                                tx_id: header.tx_id,
5403                            },
5404                        })
5405                    }
5406                    0x6052eb5ac709af => {
5407                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
5408                        let mut req = fidl::new_empty!(
5409                            NetworkManagerCreateNetworkRequest,
5410                            fidl::encoding::DefaultFuchsiaResourceDialect
5411                        );
5412                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkManagerCreateNetworkRequest>(&header, _body_bytes, handles, &mut req)?;
5413                        let control_handle =
5414                            NetworkManagerControlHandle { inner: this.inner.clone() };
5415                        Ok(NetworkManagerRequest::CreateNetwork {
5416                            name: req.name,
5417                            config: req.config,
5418
5419                            responder: NetworkManagerCreateNetworkResponder {
5420                                control_handle: std::mem::ManuallyDrop::new(control_handle),
5421                                tx_id: header.tx_id,
5422                            },
5423                        })
5424                    }
5425                    0x59930bf23acc7d9a => {
5426                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
5427                        let mut req = fidl::new_empty!(
5428                            NetworkManagerGetNetworkRequest,
5429                            fidl::encoding::DefaultFuchsiaResourceDialect
5430                        );
5431                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NetworkManagerGetNetworkRequest>(&header, _body_bytes, handles, &mut req)?;
5432                        let control_handle =
5433                            NetworkManagerControlHandle { inner: this.inner.clone() };
5434                        Ok(NetworkManagerRequest::GetNetwork {
5435                            name: req.name,
5436
5437                            responder: NetworkManagerGetNetworkResponder {
5438                                control_handle: std::mem::ManuallyDrop::new(control_handle),
5439                                tx_id: header.tx_id,
5440                            },
5441                        })
5442                    }
5443                    _ => Err(fidl::Error::UnknownOrdinal {
5444                        ordinal: header.ordinal,
5445                        protocol_name:
5446                            <NetworkManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5447                    }),
5448                }))
5449            },
5450        )
5451    }
5452}
5453
5454/// Manages virtual networks.
5455#[derive(Debug)]
5456pub enum NetworkManagerRequest {
5457    /// Lists emulated networks by name.
5458    ListNetworks { responder: NetworkManagerListNetworksResponder },
5459    /// Creates a new network with given name and config.
5460    CreateNetwork {
5461        name: String,
5462        config: NetworkConfig,
5463        responder: NetworkManagerCreateNetworkResponder,
5464    },
5465    /// Gets a handle to a network.
5466    GetNetwork { name: String, responder: NetworkManagerGetNetworkResponder },
5467}
5468
5469impl NetworkManagerRequest {
5470    #[allow(irrefutable_let_patterns)]
5471    pub fn into_list_networks(self) -> Option<(NetworkManagerListNetworksResponder)> {
5472        if let NetworkManagerRequest::ListNetworks { responder } = self {
5473            Some((responder))
5474        } else {
5475            None
5476        }
5477    }
5478
5479    #[allow(irrefutable_let_patterns)]
5480    pub fn into_create_network(
5481        self,
5482    ) -> Option<(String, NetworkConfig, NetworkManagerCreateNetworkResponder)> {
5483        if let NetworkManagerRequest::CreateNetwork { name, config, responder } = self {
5484            Some((name, config, responder))
5485        } else {
5486            None
5487        }
5488    }
5489
5490    #[allow(irrefutable_let_patterns)]
5491    pub fn into_get_network(self) -> Option<(String, NetworkManagerGetNetworkResponder)> {
5492        if let NetworkManagerRequest::GetNetwork { name, responder } = self {
5493            Some((name, responder))
5494        } else {
5495            None
5496        }
5497    }
5498
5499    /// Name of the method defined in FIDL
5500    pub fn method_name(&self) -> &'static str {
5501        match *self {
5502            NetworkManagerRequest::ListNetworks { .. } => "list_networks",
5503            NetworkManagerRequest::CreateNetwork { .. } => "create_network",
5504            NetworkManagerRequest::GetNetwork { .. } => "get_network",
5505        }
5506    }
5507}
5508
5509#[derive(Debug, Clone)]
5510pub struct NetworkManagerControlHandle {
5511    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5512}
5513
5514impl fidl::endpoints::ControlHandle for NetworkManagerControlHandle {
5515    fn shutdown(&self) {
5516        self.inner.shutdown()
5517    }
5518
5519    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
5520        self.inner.shutdown_with_epitaph(status)
5521    }
5522
5523    fn is_closed(&self) -> bool {
5524        self.inner.channel().is_closed()
5525    }
5526    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
5527        self.inner.channel().on_closed()
5528    }
5529
5530    #[cfg(target_os = "fuchsia")]
5531    fn signal_peer(
5532        &self,
5533        clear_mask: zx::Signals,
5534        set_mask: zx::Signals,
5535    ) -> Result<(), zx_status::Status> {
5536        use fidl::Peered;
5537        self.inner.channel().signal_peer(clear_mask, set_mask)
5538    }
5539}
5540
5541impl NetworkManagerControlHandle {}
5542
5543#[must_use = "FIDL methods require a response to be sent"]
5544#[derive(Debug)]
5545pub struct NetworkManagerListNetworksResponder {
5546    control_handle: std::mem::ManuallyDrop<NetworkManagerControlHandle>,
5547    tx_id: u32,
5548}
5549
5550/// Set the the channel to be shutdown (see [`NetworkManagerControlHandle::shutdown`])
5551/// if the responder is dropped without sending a response, so that the client
5552/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
5553impl std::ops::Drop for NetworkManagerListNetworksResponder {
5554    fn drop(&mut self) {
5555        self.control_handle.shutdown();
5556        // Safety: drops once, never accessed again
5557        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5558    }
5559}
5560
5561impl fidl::endpoints::Responder for NetworkManagerListNetworksResponder {
5562    type ControlHandle = NetworkManagerControlHandle;
5563
5564    fn control_handle(&self) -> &NetworkManagerControlHandle {
5565        &self.control_handle
5566    }
5567
5568    fn drop_without_shutdown(mut self) {
5569        // Safety: drops once, never accessed again due to mem::forget
5570        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5571        // Prevent Drop from running (which would shut down the channel)
5572        std::mem::forget(self);
5573    }
5574}
5575
5576impl NetworkManagerListNetworksResponder {
5577    /// Sends a response to the FIDL transaction.
5578    ///
5579    /// Sets the channel to shutdown if an error occurs.
5580    pub fn send(self, mut nets: &[String]) -> Result<(), fidl::Error> {
5581        let _result = self.send_raw(nets);
5582        if _result.is_err() {
5583            self.control_handle.shutdown();
5584        }
5585        self.drop_without_shutdown();
5586        _result
5587    }
5588
5589    /// Similar to "send" but does not shutdown the channel if an error occurs.
5590    pub fn send_no_shutdown_on_err(self, mut nets: &[String]) -> Result<(), fidl::Error> {
5591        let _result = self.send_raw(nets);
5592        self.drop_without_shutdown();
5593        _result
5594    }
5595
5596    fn send_raw(&self, mut nets: &[String]) -> Result<(), fidl::Error> {
5597        self.control_handle.inner.send::<NetworkManagerListNetworksResponse>(
5598            (nets,),
5599            self.tx_id,
5600            0x2488653e0974cc62,
5601            fidl::encoding::DynamicFlags::empty(),
5602        )
5603    }
5604}
5605
5606#[must_use = "FIDL methods require a response to be sent"]
5607#[derive(Debug)]
5608pub struct NetworkManagerCreateNetworkResponder {
5609    control_handle: std::mem::ManuallyDrop<NetworkManagerControlHandle>,
5610    tx_id: u32,
5611}
5612
5613/// Set the the channel to be shutdown (see [`NetworkManagerControlHandle::shutdown`])
5614/// if the responder is dropped without sending a response, so that the client
5615/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
5616impl std::ops::Drop for NetworkManagerCreateNetworkResponder {
5617    fn drop(&mut self) {
5618        self.control_handle.shutdown();
5619        // Safety: drops once, never accessed again
5620        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5621    }
5622}
5623
5624impl fidl::endpoints::Responder for NetworkManagerCreateNetworkResponder {
5625    type ControlHandle = NetworkManagerControlHandle;
5626
5627    fn control_handle(&self) -> &NetworkManagerControlHandle {
5628        &self.control_handle
5629    }
5630
5631    fn drop_without_shutdown(mut self) {
5632        // Safety: drops once, never accessed again due to mem::forget
5633        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5634        // Prevent Drop from running (which would shut down the channel)
5635        std::mem::forget(self);
5636    }
5637}
5638
5639impl NetworkManagerCreateNetworkResponder {
5640    /// Sends a response to the FIDL transaction.
5641    ///
5642    /// Sets the channel to shutdown if an error occurs.
5643    pub fn send(
5644        self,
5645        mut status: i32,
5646        mut net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5647    ) -> Result<(), fidl::Error> {
5648        let _result = self.send_raw(status, net);
5649        if _result.is_err() {
5650            self.control_handle.shutdown();
5651        }
5652        self.drop_without_shutdown();
5653        _result
5654    }
5655
5656    /// Similar to "send" but does not shutdown the channel if an error occurs.
5657    pub fn send_no_shutdown_on_err(
5658        self,
5659        mut status: i32,
5660        mut net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5661    ) -> Result<(), fidl::Error> {
5662        let _result = self.send_raw(status, net);
5663        self.drop_without_shutdown();
5664        _result
5665    }
5666
5667    fn send_raw(
5668        &self,
5669        mut status: i32,
5670        mut net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5671    ) -> Result<(), fidl::Error> {
5672        self.control_handle.inner.send::<NetworkManagerCreateNetworkResponse>(
5673            (status, net),
5674            self.tx_id,
5675            0x6052eb5ac709af,
5676            fidl::encoding::DynamicFlags::empty(),
5677        )
5678    }
5679}
5680
5681#[must_use = "FIDL methods require a response to be sent"]
5682#[derive(Debug)]
5683pub struct NetworkManagerGetNetworkResponder {
5684    control_handle: std::mem::ManuallyDrop<NetworkManagerControlHandle>,
5685    tx_id: u32,
5686}
5687
5688/// Set the the channel to be shutdown (see [`NetworkManagerControlHandle::shutdown`])
5689/// if the responder is dropped without sending a response, so that the client
5690/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
5691impl std::ops::Drop for NetworkManagerGetNetworkResponder {
5692    fn drop(&mut self) {
5693        self.control_handle.shutdown();
5694        // Safety: drops once, never accessed again
5695        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5696    }
5697}
5698
5699impl fidl::endpoints::Responder for NetworkManagerGetNetworkResponder {
5700    type ControlHandle = NetworkManagerControlHandle;
5701
5702    fn control_handle(&self) -> &NetworkManagerControlHandle {
5703        &self.control_handle
5704    }
5705
5706    fn drop_without_shutdown(mut self) {
5707        // Safety: drops once, never accessed again due to mem::forget
5708        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
5709        // Prevent Drop from running (which would shut down the channel)
5710        std::mem::forget(self);
5711    }
5712}
5713
5714impl NetworkManagerGetNetworkResponder {
5715    /// Sends a response to the FIDL transaction.
5716    ///
5717    /// Sets the channel to shutdown if an error occurs.
5718    pub fn send(
5719        self,
5720        mut net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5721    ) -> Result<(), fidl::Error> {
5722        let _result = self.send_raw(net);
5723        if _result.is_err() {
5724            self.control_handle.shutdown();
5725        }
5726        self.drop_without_shutdown();
5727        _result
5728    }
5729
5730    /// Similar to "send" but does not shutdown the channel if an error occurs.
5731    pub fn send_no_shutdown_on_err(
5732        self,
5733        mut net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5734    ) -> Result<(), fidl::Error> {
5735        let _result = self.send_raw(net);
5736        self.drop_without_shutdown();
5737        _result
5738    }
5739
5740    fn send_raw(
5741        &self,
5742        mut net: Option<fidl::endpoints::ClientEnd<NetworkMarker>>,
5743    ) -> Result<(), fidl::Error> {
5744        self.control_handle.inner.send::<NetworkManagerGetNetworkResponse>(
5745            (net,),
5746            self.tx_id,
5747            0x59930bf23acc7d9a,
5748            fidl::encoding::DynamicFlags::empty(),
5749        )
5750    }
5751}
5752
5753#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
5754pub struct SetupHandleMarker;
5755
5756impl fidl::endpoints::ProtocolMarker for SetupHandleMarker {
5757    type Proxy = SetupHandleProxy;
5758    type RequestStream = SetupHandleRequestStream;
5759    #[cfg(target_os = "fuchsia")]
5760    type SynchronousProxy = SetupHandleSynchronousProxy;
5761
5762    const DEBUG_NAME: &'static str = "(anonymous) SetupHandle";
5763}
5764
5765pub trait SetupHandleProxyInterface: Send + Sync {}
5766#[derive(Debug)]
5767#[cfg(target_os = "fuchsia")]
5768pub struct SetupHandleSynchronousProxy {
5769    client: fidl::client::sync::Client,
5770}
5771
5772#[cfg(target_os = "fuchsia")]
5773impl fidl::endpoints::SynchronousProxy for SetupHandleSynchronousProxy {
5774    type Proxy = SetupHandleProxy;
5775    type Protocol = SetupHandleMarker;
5776
5777    fn from_channel(inner: fidl::Channel) -> Self {
5778        Self::new(inner)
5779    }
5780
5781    fn into_channel(self) -> fidl::Channel {
5782        self.client.into_channel()
5783    }
5784
5785    fn as_channel(&self) -> &fidl::Channel {
5786        self.client.as_channel()
5787    }
5788}
5789
5790#[cfg(target_os = "fuchsia")]
5791impl SetupHandleSynchronousProxy {
5792    pub fn new(channel: fidl::Channel) -> Self {
5793        Self { client: fidl::client::sync::Client::new(channel) }
5794    }
5795
5796    pub fn into_channel(self) -> fidl::Channel {
5797        self.client.into_channel()
5798    }
5799
5800    /// Waits until an event arrives and returns it. It is safe for other
5801    /// threads to make concurrent requests while waiting for an event.
5802    pub fn wait_for_event(
5803        &self,
5804        deadline: zx::MonotonicInstant,
5805    ) -> Result<SetupHandleEvent, fidl::Error> {
5806        SetupHandleEvent::decode(self.client.wait_for_event::<SetupHandleMarker>(deadline)?)
5807    }
5808}
5809
5810#[cfg(target_os = "fuchsia")]
5811impl From<SetupHandleSynchronousProxy> for zx::NullableHandle {
5812    fn from(value: SetupHandleSynchronousProxy) -> Self {
5813        value.into_channel().into()
5814    }
5815}
5816
5817#[cfg(target_os = "fuchsia")]
5818impl From<fidl::Channel> for SetupHandleSynchronousProxy {
5819    fn from(value: fidl::Channel) -> Self {
5820        Self::new(value)
5821    }
5822}
5823
5824#[cfg(target_os = "fuchsia")]
5825impl fidl::endpoints::FromClient for SetupHandleSynchronousProxy {
5826    type Protocol = SetupHandleMarker;
5827
5828    fn from_client(value: fidl::endpoints::ClientEnd<SetupHandleMarker>) -> Self {
5829        Self::new(value.into_channel())
5830    }
5831}
5832
5833#[derive(Debug, Clone)]
5834pub struct SetupHandleProxy {
5835    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
5836}
5837
5838impl fidl::endpoints::Proxy for SetupHandleProxy {
5839    type Protocol = SetupHandleMarker;
5840
5841    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
5842        Self::new(inner)
5843    }
5844
5845    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
5846        self.client.into_channel().map_err(|client| Self { client })
5847    }
5848
5849    fn as_channel(&self) -> &::fidl::AsyncChannel {
5850        self.client.as_channel()
5851    }
5852}
5853
5854impl SetupHandleProxy {
5855    /// Create a new Proxy for fuchsia.netemul.network/SetupHandle.
5856    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
5857        let protocol_name = <SetupHandleMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
5858        Self { client: fidl::client::Client::new(channel, protocol_name) }
5859    }
5860
5861    /// Get a Stream of events from the remote end of the protocol.
5862    ///
5863    /// # Panics
5864    ///
5865    /// Panics if the event stream was already taken.
5866    pub fn take_event_stream(&self) -> SetupHandleEventStream {
5867        SetupHandleEventStream { event_receiver: self.client.take_event_receiver() }
5868    }
5869}
5870
5871impl SetupHandleProxyInterface for SetupHandleProxy {}
5872
5873pub struct SetupHandleEventStream {
5874    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
5875}
5876
5877impl std::marker::Unpin for SetupHandleEventStream {}
5878
5879impl futures::stream::FusedStream for SetupHandleEventStream {
5880    fn is_terminated(&self) -> bool {
5881        self.event_receiver.is_terminated()
5882    }
5883}
5884
5885impl futures::Stream for SetupHandleEventStream {
5886    type Item = Result<SetupHandleEvent, fidl::Error>;
5887
5888    fn poll_next(
5889        mut self: std::pin::Pin<&mut Self>,
5890        cx: &mut std::task::Context<'_>,
5891    ) -> std::task::Poll<Option<Self::Item>> {
5892        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
5893            &mut self.event_receiver,
5894            cx
5895        )?) {
5896            Some(buf) => std::task::Poll::Ready(Some(SetupHandleEvent::decode(buf))),
5897            None => std::task::Poll::Ready(None),
5898        }
5899    }
5900}
5901
5902#[derive(Debug)]
5903pub enum SetupHandleEvent {}
5904
5905impl SetupHandleEvent {
5906    /// Decodes a message buffer as a [`SetupHandleEvent`].
5907    fn decode(
5908        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
5909    ) -> Result<SetupHandleEvent, fidl::Error> {
5910        let (bytes, _handles) = buf.split_mut();
5911        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5912        debug_assert_eq!(tx_header.tx_id, 0);
5913        match tx_header.ordinal {
5914            _ => Err(fidl::Error::UnknownOrdinal {
5915                ordinal: tx_header.ordinal,
5916                protocol_name: <SetupHandleMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
5917            }),
5918        }
5919    }
5920}
5921
5922/// A Stream of incoming requests for fuchsia.netemul.network/SetupHandle.
5923pub struct SetupHandleRequestStream {
5924    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5925    is_terminated: bool,
5926}
5927
5928impl std::marker::Unpin for SetupHandleRequestStream {}
5929
5930impl futures::stream::FusedStream for SetupHandleRequestStream {
5931    fn is_terminated(&self) -> bool {
5932        self.is_terminated
5933    }
5934}
5935
5936impl fidl::endpoints::RequestStream for SetupHandleRequestStream {
5937    type Protocol = SetupHandleMarker;
5938    type ControlHandle = SetupHandleControlHandle;
5939
5940    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
5941        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
5942    }
5943
5944    fn control_handle(&self) -> Self::ControlHandle {
5945        SetupHandleControlHandle { inner: self.inner.clone() }
5946    }
5947
5948    fn into_inner(
5949        self,
5950    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
5951    {
5952        (self.inner, self.is_terminated)
5953    }
5954
5955    fn from_inner(
5956        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
5957        is_terminated: bool,
5958    ) -> Self {
5959        Self { inner, is_terminated }
5960    }
5961}
5962
5963impl futures::Stream for SetupHandleRequestStream {
5964    type Item = Result<SetupHandleRequest, fidl::Error>;
5965
5966    fn poll_next(
5967        mut self: std::pin::Pin<&mut Self>,
5968        cx: &mut std::task::Context<'_>,
5969    ) -> std::task::Poll<Option<Self::Item>> {
5970        let this = &mut *self;
5971        if this.inner.check_shutdown(cx) {
5972            this.is_terminated = true;
5973            return std::task::Poll::Ready(None);
5974        }
5975        if this.is_terminated {
5976            panic!("polled SetupHandleRequestStream after completion");
5977        }
5978        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
5979            |bytes, handles| {
5980                match this.inner.channel().read_etc(cx, bytes, handles) {
5981                    std::task::Poll::Ready(Ok(())) => {}
5982                    std::task::Poll::Pending => return std::task::Poll::Pending,
5983                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
5984                        this.is_terminated = true;
5985                        return std::task::Poll::Ready(None);
5986                    }
5987                    std::task::Poll::Ready(Err(e)) => {
5988                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
5989                            e.into(),
5990                        ))));
5991                    }
5992                }
5993
5994                // A message has been received from the channel
5995                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
5996
5997                std::task::Poll::Ready(Some(match header.ordinal {
5998                    _ => Err(fidl::Error::UnknownOrdinal {
5999                        ordinal: header.ordinal,
6000                        protocol_name:
6001                            <SetupHandleMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
6002                    }),
6003                }))
6004            },
6005        )
6006    }
6007}
6008
6009/// Handle returned when using NetworkContext.Setup for quick network configuration.
6010/// Networks and endpoints created by Setup are tied to the lifecycle of the SetupHandle's channel.
6011#[derive(Debug)]
6012pub enum SetupHandleRequest {}
6013
6014impl SetupHandleRequest {
6015    /// Name of the method defined in FIDL
6016    pub fn method_name(&self) -> &'static str {
6017        match *self {}
6018    }
6019}
6020
6021#[derive(Debug, Clone)]
6022pub struct SetupHandleControlHandle {
6023    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
6024}
6025
6026impl fidl::endpoints::ControlHandle for SetupHandleControlHandle {
6027    fn shutdown(&self) {
6028        self.inner.shutdown()
6029    }
6030
6031    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
6032        self.inner.shutdown_with_epitaph(status)
6033    }
6034
6035    fn is_closed(&self) -> bool {
6036        self.inner.channel().is_closed()
6037    }
6038    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
6039        self.inner.channel().on_closed()
6040    }
6041
6042    #[cfg(target_os = "fuchsia")]
6043    fn signal_peer(
6044        &self,
6045        clear_mask: zx::Signals,
6046        set_mask: zx::Signals,
6047    ) -> Result<(), zx_status::Status> {
6048        use fidl::Peered;
6049        self.inner.channel().signal_peer(clear_mask, set_mask)
6050    }
6051}
6052
6053impl SetupHandleControlHandle {}
6054
6055mod internal {
6056    use super::*;
6057
6058    impl fidl::encoding::ResourceTypeMarker for DeviceProxyServeControllerRequest {
6059        type Borrowed<'a> = &'a mut Self;
6060        fn take_or_borrow<'a>(
6061            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6062        ) -> Self::Borrowed<'a> {
6063            value
6064        }
6065    }
6066
6067    unsafe impl fidl::encoding::TypeMarker for DeviceProxyServeControllerRequest {
6068        type Owned = Self;
6069
6070        #[inline(always)]
6071        fn inline_align(_context: fidl::encoding::Context) -> usize {
6072            4
6073        }
6074
6075        #[inline(always)]
6076        fn inline_size(_context: fidl::encoding::Context) -> usize {
6077            4
6078        }
6079    }
6080
6081    unsafe impl
6082        fidl::encoding::Encode<
6083            DeviceProxyServeControllerRequest,
6084            fidl::encoding::DefaultFuchsiaResourceDialect,
6085        > for &mut DeviceProxyServeControllerRequest
6086    {
6087        #[inline]
6088        unsafe fn encode(
6089            self,
6090            encoder: &mut fidl::encoding::Encoder<
6091                '_,
6092                fidl::encoding::DefaultFuchsiaResourceDialect,
6093            >,
6094            offset: usize,
6095            _depth: fidl::encoding::Depth,
6096        ) -> fidl::Result<()> {
6097            encoder.debug_check_bounds::<DeviceProxyServeControllerRequest>(offset);
6098            // Delegate to tuple encoding.
6099            fidl::encoding::Encode::<
6100                DeviceProxyServeControllerRequest,
6101                fidl::encoding::DefaultFuchsiaResourceDialect,
6102            >::encode(
6103                (<fidl::encoding::Endpoint<
6104                    fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
6105                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
6106                    &mut self.req
6107                ),),
6108                encoder,
6109                offset,
6110                _depth,
6111            )
6112        }
6113    }
6114    unsafe impl<
6115        T0: fidl::encoding::Encode<
6116                fidl::encoding::Endpoint<
6117                    fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
6118                >,
6119                fidl::encoding::DefaultFuchsiaResourceDialect,
6120            >,
6121    >
6122        fidl::encoding::Encode<
6123            DeviceProxyServeControllerRequest,
6124            fidl::encoding::DefaultFuchsiaResourceDialect,
6125        > for (T0,)
6126    {
6127        #[inline]
6128        unsafe fn encode(
6129            self,
6130            encoder: &mut fidl::encoding::Encoder<
6131                '_,
6132                fidl::encoding::DefaultFuchsiaResourceDialect,
6133            >,
6134            offset: usize,
6135            depth: fidl::encoding::Depth,
6136        ) -> fidl::Result<()> {
6137            encoder.debug_check_bounds::<DeviceProxyServeControllerRequest>(offset);
6138            // Zero out padding regions. There's no need to apply masks
6139            // because the unmasked parts will be overwritten by fields.
6140            // Write the fields.
6141            self.0.encode(encoder, offset + 0, depth)?;
6142            Ok(())
6143        }
6144    }
6145
6146    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6147        for DeviceProxyServeControllerRequest
6148    {
6149        #[inline(always)]
6150        fn new_empty() -> Self {
6151            Self {
6152                req: fidl::new_empty!(
6153                    fidl::encoding::Endpoint<
6154                        fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
6155                    >,
6156                    fidl::encoding::DefaultFuchsiaResourceDialect
6157                ),
6158            }
6159        }
6160
6161        #[inline]
6162        unsafe fn decode(
6163            &mut self,
6164            decoder: &mut fidl::encoding::Decoder<
6165                '_,
6166                fidl::encoding::DefaultFuchsiaResourceDialect,
6167            >,
6168            offset: usize,
6169            _depth: fidl::encoding::Depth,
6170        ) -> fidl::Result<()> {
6171            decoder.debug_check_bounds::<Self>(offset);
6172            // Verify that padding bytes are zero.
6173            fidl::decode!(
6174                fidl::encoding::Endpoint<
6175                    fidl::endpoints::ServerEnd<fidl_fuchsia_device::ControllerMarker>,
6176                >,
6177                fidl::encoding::DefaultFuchsiaResourceDialect,
6178                &mut self.req,
6179                decoder,
6180                offset + 0,
6181                _depth
6182            )?;
6183            Ok(())
6184        }
6185    }
6186
6187    impl fidl::encoding::ResourceTypeMarker for DeviceProxyServeDeviceRequest {
6188        type Borrowed<'a> = &'a mut Self;
6189        fn take_or_borrow<'a>(
6190            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6191        ) -> Self::Borrowed<'a> {
6192            value
6193        }
6194    }
6195
6196    unsafe impl fidl::encoding::TypeMarker for DeviceProxyServeDeviceRequest {
6197        type Owned = Self;
6198
6199        #[inline(always)]
6200        fn inline_align(_context: fidl::encoding::Context) -> usize {
6201            4
6202        }
6203
6204        #[inline(always)]
6205        fn inline_size(_context: fidl::encoding::Context) -> usize {
6206            4
6207        }
6208    }
6209
6210    unsafe impl
6211        fidl::encoding::Encode<
6212            DeviceProxyServeDeviceRequest,
6213            fidl::encoding::DefaultFuchsiaResourceDialect,
6214        > for &mut DeviceProxyServeDeviceRequest
6215    {
6216        #[inline]
6217        unsafe fn encode(
6218            self,
6219            encoder: &mut fidl::encoding::Encoder<
6220                '_,
6221                fidl::encoding::DefaultFuchsiaResourceDialect,
6222            >,
6223            offset: usize,
6224            _depth: fidl::encoding::Depth,
6225        ) -> fidl::Result<()> {
6226            encoder.debug_check_bounds::<DeviceProxyServeDeviceRequest>(offset);
6227            // Delegate to tuple encoding.
6228            fidl::encoding::Encode::<
6229                DeviceProxyServeDeviceRequest,
6230                fidl::encoding::DefaultFuchsiaResourceDialect,
6231            >::encode(
6232                (<fidl::encoding::Endpoint<
6233                    fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
6234                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
6235                    &mut self.req
6236                ),),
6237                encoder,
6238                offset,
6239                _depth,
6240            )
6241        }
6242    }
6243    unsafe impl<
6244        T0: fidl::encoding::Encode<
6245                fidl::encoding::Endpoint<
6246                    fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
6247                >,
6248                fidl::encoding::DefaultFuchsiaResourceDialect,
6249            >,
6250    >
6251        fidl::encoding::Encode<
6252            DeviceProxyServeDeviceRequest,
6253            fidl::encoding::DefaultFuchsiaResourceDialect,
6254        > for (T0,)
6255    {
6256        #[inline]
6257        unsafe fn encode(
6258            self,
6259            encoder: &mut fidl::encoding::Encoder<
6260                '_,
6261                fidl::encoding::DefaultFuchsiaResourceDialect,
6262            >,
6263            offset: usize,
6264            depth: fidl::encoding::Depth,
6265        ) -> fidl::Result<()> {
6266            encoder.debug_check_bounds::<DeviceProxyServeDeviceRequest>(offset);
6267            // Zero out padding regions. There's no need to apply masks
6268            // because the unmasked parts will be overwritten by fields.
6269            // Write the fields.
6270            self.0.encode(encoder, offset + 0, depth)?;
6271            Ok(())
6272        }
6273    }
6274
6275    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6276        for DeviceProxyServeDeviceRequest
6277    {
6278        #[inline(always)]
6279        fn new_empty() -> Self {
6280            Self {
6281                req: fidl::new_empty!(
6282                    fidl::encoding::Endpoint<
6283                        fidl::endpoints::ServerEnd<
6284                            fidl_fuchsia_hardware_network::DeviceInstanceMarker,
6285                        >,
6286                    >,
6287                    fidl::encoding::DefaultFuchsiaResourceDialect
6288                ),
6289            }
6290        }
6291
6292        #[inline]
6293        unsafe fn decode(
6294            &mut self,
6295            decoder: &mut fidl::encoding::Decoder<
6296                '_,
6297                fidl::encoding::DefaultFuchsiaResourceDialect,
6298            >,
6299            offset: usize,
6300            _depth: fidl::encoding::Depth,
6301        ) -> fidl::Result<()> {
6302            decoder.debug_check_bounds::<Self>(offset);
6303            // Verify that padding bytes are zero.
6304            fidl::decode!(
6305                fidl::encoding::Endpoint<
6306                    fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::DeviceInstanceMarker>,
6307                >,
6308                fidl::encoding::DefaultFuchsiaResourceDialect,
6309                &mut self.req,
6310                decoder,
6311                offset + 0,
6312                _depth
6313            )?;
6314            Ok(())
6315        }
6316    }
6317
6318    impl fidl::encoding::ResourceTypeMarker for EndpointGetPortRequest {
6319        type Borrowed<'a> = &'a mut Self;
6320        fn take_or_borrow<'a>(
6321            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6322        ) -> Self::Borrowed<'a> {
6323            value
6324        }
6325    }
6326
6327    unsafe impl fidl::encoding::TypeMarker for EndpointGetPortRequest {
6328        type Owned = Self;
6329
6330        #[inline(always)]
6331        fn inline_align(_context: fidl::encoding::Context) -> usize {
6332            4
6333        }
6334
6335        #[inline(always)]
6336        fn inline_size(_context: fidl::encoding::Context) -> usize {
6337            4
6338        }
6339    }
6340
6341    unsafe impl
6342        fidl::encoding::Encode<
6343            EndpointGetPortRequest,
6344            fidl::encoding::DefaultFuchsiaResourceDialect,
6345        > for &mut EndpointGetPortRequest
6346    {
6347        #[inline]
6348        unsafe fn encode(
6349            self,
6350            encoder: &mut fidl::encoding::Encoder<
6351                '_,
6352                fidl::encoding::DefaultFuchsiaResourceDialect,
6353            >,
6354            offset: usize,
6355            _depth: fidl::encoding::Depth,
6356        ) -> fidl::Result<()> {
6357            encoder.debug_check_bounds::<EndpointGetPortRequest>(offset);
6358            // Delegate to tuple encoding.
6359            fidl::encoding::Encode::<
6360                EndpointGetPortRequest,
6361                fidl::encoding::DefaultFuchsiaResourceDialect,
6362            >::encode(
6363                (<fidl::encoding::Endpoint<
6364                    fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
6365                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
6366                    &mut self.port
6367                ),),
6368                encoder,
6369                offset,
6370                _depth,
6371            )
6372        }
6373    }
6374    unsafe impl<
6375        T0: fidl::encoding::Encode<
6376                fidl::encoding::Endpoint<
6377                    fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
6378                >,
6379                fidl::encoding::DefaultFuchsiaResourceDialect,
6380            >,
6381    >
6382        fidl::encoding::Encode<
6383            EndpointGetPortRequest,
6384            fidl::encoding::DefaultFuchsiaResourceDialect,
6385        > for (T0,)
6386    {
6387        #[inline]
6388        unsafe fn encode(
6389            self,
6390            encoder: &mut fidl::encoding::Encoder<
6391                '_,
6392                fidl::encoding::DefaultFuchsiaResourceDialect,
6393            >,
6394            offset: usize,
6395            depth: fidl::encoding::Depth,
6396        ) -> fidl::Result<()> {
6397            encoder.debug_check_bounds::<EndpointGetPortRequest>(offset);
6398            // Zero out padding regions. There's no need to apply masks
6399            // because the unmasked parts will be overwritten by fields.
6400            // Write the fields.
6401            self.0.encode(encoder, offset + 0, depth)?;
6402            Ok(())
6403        }
6404    }
6405
6406    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6407        for EndpointGetPortRequest
6408    {
6409        #[inline(always)]
6410        fn new_empty() -> Self {
6411            Self {
6412                port: fidl::new_empty!(
6413                    fidl::encoding::Endpoint<
6414                        fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
6415                    >,
6416                    fidl::encoding::DefaultFuchsiaResourceDialect
6417                ),
6418            }
6419        }
6420
6421        #[inline]
6422        unsafe fn decode(
6423            &mut self,
6424            decoder: &mut fidl::encoding::Decoder<
6425                '_,
6426                fidl::encoding::DefaultFuchsiaResourceDialect,
6427            >,
6428            offset: usize,
6429            _depth: fidl::encoding::Depth,
6430        ) -> fidl::Result<()> {
6431            decoder.debug_check_bounds::<Self>(offset);
6432            // Verify that padding bytes are zero.
6433            fidl::decode!(
6434                fidl::encoding::Endpoint<
6435                    fidl::endpoints::ServerEnd<fidl_fuchsia_hardware_network::PortMarker>,
6436                >,
6437                fidl::encoding::DefaultFuchsiaResourceDialect,
6438                &mut self.port,
6439                decoder,
6440                offset + 0,
6441                _depth
6442            )?;
6443            Ok(())
6444        }
6445    }
6446
6447    impl fidl::encoding::ResourceTypeMarker for EndpointGetProxyRequest {
6448        type Borrowed<'a> = &'a mut Self;
6449        fn take_or_borrow<'a>(
6450            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6451        ) -> Self::Borrowed<'a> {
6452            value
6453        }
6454    }
6455
6456    unsafe impl fidl::encoding::TypeMarker for EndpointGetProxyRequest {
6457        type Owned = Self;
6458
6459        #[inline(always)]
6460        fn inline_align(_context: fidl::encoding::Context) -> usize {
6461            4
6462        }
6463
6464        #[inline(always)]
6465        fn inline_size(_context: fidl::encoding::Context) -> usize {
6466            4
6467        }
6468    }
6469
6470    unsafe impl
6471        fidl::encoding::Encode<
6472            EndpointGetProxyRequest,
6473            fidl::encoding::DefaultFuchsiaResourceDialect,
6474        > for &mut EndpointGetProxyRequest
6475    {
6476        #[inline]
6477        unsafe fn encode(
6478            self,
6479            encoder: &mut fidl::encoding::Encoder<
6480                '_,
6481                fidl::encoding::DefaultFuchsiaResourceDialect,
6482            >,
6483            offset: usize,
6484            _depth: fidl::encoding::Depth,
6485        ) -> fidl::Result<()> {
6486            encoder.debug_check_bounds::<EndpointGetProxyRequest>(offset);
6487            // Delegate to tuple encoding.
6488            fidl::encoding::Encode::<EndpointGetProxyRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
6489                (
6490                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DeviceProxy_Marker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.proxy),
6491                ),
6492                encoder, offset, _depth
6493            )
6494        }
6495    }
6496    unsafe impl<
6497        T0: fidl::encoding::Encode<
6498                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DeviceProxy_Marker>>,
6499                fidl::encoding::DefaultFuchsiaResourceDialect,
6500            >,
6501    >
6502        fidl::encoding::Encode<
6503            EndpointGetProxyRequest,
6504            fidl::encoding::DefaultFuchsiaResourceDialect,
6505        > for (T0,)
6506    {
6507        #[inline]
6508        unsafe fn encode(
6509            self,
6510            encoder: &mut fidl::encoding::Encoder<
6511                '_,
6512                fidl::encoding::DefaultFuchsiaResourceDialect,
6513            >,
6514            offset: usize,
6515            depth: fidl::encoding::Depth,
6516        ) -> fidl::Result<()> {
6517            encoder.debug_check_bounds::<EndpointGetProxyRequest>(offset);
6518            // Zero out padding regions. There's no need to apply masks
6519            // because the unmasked parts will be overwritten by fields.
6520            // Write the fields.
6521            self.0.encode(encoder, offset + 0, depth)?;
6522            Ok(())
6523        }
6524    }
6525
6526    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6527        for EndpointGetProxyRequest
6528    {
6529        #[inline(always)]
6530        fn new_empty() -> Self {
6531            Self {
6532                proxy: fidl::new_empty!(
6533                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DeviceProxy_Marker>>,
6534                    fidl::encoding::DefaultFuchsiaResourceDialect
6535                ),
6536            }
6537        }
6538
6539        #[inline]
6540        unsafe fn decode(
6541            &mut self,
6542            decoder: &mut fidl::encoding::Decoder<
6543                '_,
6544                fidl::encoding::DefaultFuchsiaResourceDialect,
6545            >,
6546            offset: usize,
6547            _depth: fidl::encoding::Depth,
6548        ) -> fidl::Result<()> {
6549            decoder.debug_check_bounds::<Self>(offset);
6550            // Verify that padding bytes are zero.
6551            fidl::decode!(
6552                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DeviceProxy_Marker>>,
6553                fidl::encoding::DefaultFuchsiaResourceDialect,
6554                &mut self.proxy,
6555                decoder,
6556                offset + 0,
6557                _depth
6558            )?;
6559            Ok(())
6560        }
6561    }
6562
6563    impl fidl::encoding::ResourceTypeMarker for EndpointManagerCreateEndpointResponse {
6564        type Borrowed<'a> = &'a mut Self;
6565        fn take_or_borrow<'a>(
6566            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6567        ) -> Self::Borrowed<'a> {
6568            value
6569        }
6570    }
6571
6572    unsafe impl fidl::encoding::TypeMarker for EndpointManagerCreateEndpointResponse {
6573        type Owned = Self;
6574
6575        #[inline(always)]
6576        fn inline_align(_context: fidl::encoding::Context) -> usize {
6577            4
6578        }
6579
6580        #[inline(always)]
6581        fn inline_size(_context: fidl::encoding::Context) -> usize {
6582            8
6583        }
6584    }
6585
6586    unsafe impl
6587        fidl::encoding::Encode<
6588            EndpointManagerCreateEndpointResponse,
6589            fidl::encoding::DefaultFuchsiaResourceDialect,
6590        > for &mut EndpointManagerCreateEndpointResponse
6591    {
6592        #[inline]
6593        unsafe fn encode(
6594            self,
6595            encoder: &mut fidl::encoding::Encoder<
6596                '_,
6597                fidl::encoding::DefaultFuchsiaResourceDialect,
6598            >,
6599            offset: usize,
6600            _depth: fidl::encoding::Depth,
6601        ) -> fidl::Result<()> {
6602            encoder.debug_check_bounds::<EndpointManagerCreateEndpointResponse>(offset);
6603            // Delegate to tuple encoding.
6604            fidl::encoding::Encode::<
6605                EndpointManagerCreateEndpointResponse,
6606                fidl::encoding::DefaultFuchsiaResourceDialect,
6607            >::encode(
6608                (
6609                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
6610                    <fidl::encoding::Optional<
6611                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6612                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
6613                        &mut self.endpoint
6614                    ),
6615                ),
6616                encoder,
6617                offset,
6618                _depth,
6619            )
6620        }
6621    }
6622    unsafe impl<
6623        T0: fidl::encoding::Encode<i32, fidl::encoding::DefaultFuchsiaResourceDialect>,
6624        T1: fidl::encoding::Encode<
6625                fidl::encoding::Optional<
6626                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6627                >,
6628                fidl::encoding::DefaultFuchsiaResourceDialect,
6629            >,
6630    >
6631        fidl::encoding::Encode<
6632            EndpointManagerCreateEndpointResponse,
6633            fidl::encoding::DefaultFuchsiaResourceDialect,
6634        > for (T0, T1)
6635    {
6636        #[inline]
6637        unsafe fn encode(
6638            self,
6639            encoder: &mut fidl::encoding::Encoder<
6640                '_,
6641                fidl::encoding::DefaultFuchsiaResourceDialect,
6642            >,
6643            offset: usize,
6644            depth: fidl::encoding::Depth,
6645        ) -> fidl::Result<()> {
6646            encoder.debug_check_bounds::<EndpointManagerCreateEndpointResponse>(offset);
6647            // Zero out padding regions. There's no need to apply masks
6648            // because the unmasked parts will be overwritten by fields.
6649            // Write the fields.
6650            self.0.encode(encoder, offset + 0, depth)?;
6651            self.1.encode(encoder, offset + 4, depth)?;
6652            Ok(())
6653        }
6654    }
6655
6656    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6657        for EndpointManagerCreateEndpointResponse
6658    {
6659        #[inline(always)]
6660        fn new_empty() -> Self {
6661            Self {
6662                status: fidl::new_empty!(i32, fidl::encoding::DefaultFuchsiaResourceDialect),
6663                endpoint: fidl::new_empty!(
6664                    fidl::encoding::Optional<
6665                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6666                    >,
6667                    fidl::encoding::DefaultFuchsiaResourceDialect
6668                ),
6669            }
6670        }
6671
6672        #[inline]
6673        unsafe fn decode(
6674            &mut self,
6675            decoder: &mut fidl::encoding::Decoder<
6676                '_,
6677                fidl::encoding::DefaultFuchsiaResourceDialect,
6678            >,
6679            offset: usize,
6680            _depth: fidl::encoding::Depth,
6681        ) -> fidl::Result<()> {
6682            decoder.debug_check_bounds::<Self>(offset);
6683            // Verify that padding bytes are zero.
6684            fidl::decode!(
6685                i32,
6686                fidl::encoding::DefaultFuchsiaResourceDialect,
6687                &mut self.status,
6688                decoder,
6689                offset + 0,
6690                _depth
6691            )?;
6692            fidl::decode!(
6693                fidl::encoding::Optional<
6694                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6695                >,
6696                fidl::encoding::DefaultFuchsiaResourceDialect,
6697                &mut self.endpoint,
6698                decoder,
6699                offset + 4,
6700                _depth
6701            )?;
6702            Ok(())
6703        }
6704    }
6705
6706    impl fidl::encoding::ResourceTypeMarker for EndpointManagerGetEndpointResponse {
6707        type Borrowed<'a> = &'a mut Self;
6708        fn take_or_borrow<'a>(
6709            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6710        ) -> Self::Borrowed<'a> {
6711            value
6712        }
6713    }
6714
6715    unsafe impl fidl::encoding::TypeMarker for EndpointManagerGetEndpointResponse {
6716        type Owned = Self;
6717
6718        #[inline(always)]
6719        fn inline_align(_context: fidl::encoding::Context) -> usize {
6720            4
6721        }
6722
6723        #[inline(always)]
6724        fn inline_size(_context: fidl::encoding::Context) -> usize {
6725            4
6726        }
6727    }
6728
6729    unsafe impl
6730        fidl::encoding::Encode<
6731            EndpointManagerGetEndpointResponse,
6732            fidl::encoding::DefaultFuchsiaResourceDialect,
6733        > for &mut EndpointManagerGetEndpointResponse
6734    {
6735        #[inline]
6736        unsafe fn encode(
6737            self,
6738            encoder: &mut fidl::encoding::Encoder<
6739                '_,
6740                fidl::encoding::DefaultFuchsiaResourceDialect,
6741            >,
6742            offset: usize,
6743            _depth: fidl::encoding::Depth,
6744        ) -> fidl::Result<()> {
6745            encoder.debug_check_bounds::<EndpointManagerGetEndpointResponse>(offset);
6746            // Delegate to tuple encoding.
6747            fidl::encoding::Encode::<
6748                EndpointManagerGetEndpointResponse,
6749                fidl::encoding::DefaultFuchsiaResourceDialect,
6750            >::encode(
6751                (<fidl::encoding::Optional<
6752                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6753                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
6754                    &mut self.endpoint
6755                ),),
6756                encoder,
6757                offset,
6758                _depth,
6759            )
6760        }
6761    }
6762    unsafe impl<
6763        T0: fidl::encoding::Encode<
6764                fidl::encoding::Optional<
6765                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6766                >,
6767                fidl::encoding::DefaultFuchsiaResourceDialect,
6768            >,
6769    >
6770        fidl::encoding::Encode<
6771            EndpointManagerGetEndpointResponse,
6772            fidl::encoding::DefaultFuchsiaResourceDialect,
6773        > for (T0,)
6774    {
6775        #[inline]
6776        unsafe fn encode(
6777            self,
6778            encoder: &mut fidl::encoding::Encoder<
6779                '_,
6780                fidl::encoding::DefaultFuchsiaResourceDialect,
6781            >,
6782            offset: usize,
6783            depth: fidl::encoding::Depth,
6784        ) -> fidl::Result<()> {
6785            encoder.debug_check_bounds::<EndpointManagerGetEndpointResponse>(offset);
6786            // Zero out padding regions. There's no need to apply masks
6787            // because the unmasked parts will be overwritten by fields.
6788            // Write the fields.
6789            self.0.encode(encoder, offset + 0, depth)?;
6790            Ok(())
6791        }
6792    }
6793
6794    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6795        for EndpointManagerGetEndpointResponse
6796    {
6797        #[inline(always)]
6798        fn new_empty() -> Self {
6799            Self {
6800                endpoint: fidl::new_empty!(
6801                    fidl::encoding::Optional<
6802                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6803                    >,
6804                    fidl::encoding::DefaultFuchsiaResourceDialect
6805                ),
6806            }
6807        }
6808
6809        #[inline]
6810        unsafe fn decode(
6811            &mut self,
6812            decoder: &mut fidl::encoding::Decoder<
6813                '_,
6814                fidl::encoding::DefaultFuchsiaResourceDialect,
6815            >,
6816            offset: usize,
6817            _depth: fidl::encoding::Depth,
6818        ) -> fidl::Result<()> {
6819            decoder.debug_check_bounds::<Self>(offset);
6820            // Verify that padding bytes are zero.
6821            fidl::decode!(
6822                fidl::encoding::Optional<
6823                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<EndpointMarker>>,
6824                >,
6825                fidl::encoding::DefaultFuchsiaResourceDialect,
6826                &mut self.endpoint,
6827                decoder,
6828                offset + 0,
6829                _depth
6830            )?;
6831            Ok(())
6832        }
6833    }
6834
6835    impl fidl::encoding::ResourceTypeMarker for NetworkContextCloneRequest {
6836        type Borrowed<'a> = &'a mut Self;
6837        fn take_or_borrow<'a>(
6838            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6839        ) -> Self::Borrowed<'a> {
6840            value
6841        }
6842    }
6843
6844    unsafe impl fidl::encoding::TypeMarker for NetworkContextCloneRequest {
6845        type Owned = Self;
6846
6847        #[inline(always)]
6848        fn inline_align(_context: fidl::encoding::Context) -> usize {
6849            4
6850        }
6851
6852        #[inline(always)]
6853        fn inline_size(_context: fidl::encoding::Context) -> usize {
6854            4
6855        }
6856    }
6857
6858    unsafe impl
6859        fidl::encoding::Encode<
6860            NetworkContextCloneRequest,
6861            fidl::encoding::DefaultFuchsiaResourceDialect,
6862        > for &mut NetworkContextCloneRequest
6863    {
6864        #[inline]
6865        unsafe fn encode(
6866            self,
6867            encoder: &mut fidl::encoding::Encoder<
6868                '_,
6869                fidl::encoding::DefaultFuchsiaResourceDialect,
6870            >,
6871            offset: usize,
6872            _depth: fidl::encoding::Depth,
6873        ) -> fidl::Result<()> {
6874            encoder.debug_check_bounds::<NetworkContextCloneRequest>(offset);
6875            // Delegate to tuple encoding.
6876            fidl::encoding::Encode::<NetworkContextCloneRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
6877                (
6878                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkContextMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.network_context),
6879                ),
6880                encoder, offset, _depth
6881            )
6882        }
6883    }
6884    unsafe impl<
6885        T0: fidl::encoding::Encode<
6886                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkContextMarker>>,
6887                fidl::encoding::DefaultFuchsiaResourceDialect,
6888            >,
6889    >
6890        fidl::encoding::Encode<
6891            NetworkContextCloneRequest,
6892            fidl::encoding::DefaultFuchsiaResourceDialect,
6893        > for (T0,)
6894    {
6895        #[inline]
6896        unsafe fn encode(
6897            self,
6898            encoder: &mut fidl::encoding::Encoder<
6899                '_,
6900                fidl::encoding::DefaultFuchsiaResourceDialect,
6901            >,
6902            offset: usize,
6903            depth: fidl::encoding::Depth,
6904        ) -> fidl::Result<()> {
6905            encoder.debug_check_bounds::<NetworkContextCloneRequest>(offset);
6906            // Zero out padding regions. There's no need to apply masks
6907            // because the unmasked parts will be overwritten by fields.
6908            // Write the fields.
6909            self.0.encode(encoder, offset + 0, depth)?;
6910            Ok(())
6911        }
6912    }
6913
6914    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6915        for NetworkContextCloneRequest
6916    {
6917        #[inline(always)]
6918        fn new_empty() -> Self {
6919            Self {
6920                network_context: fidl::new_empty!(
6921                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkContextMarker>>,
6922                    fidl::encoding::DefaultFuchsiaResourceDialect
6923                ),
6924            }
6925        }
6926
6927        #[inline]
6928        unsafe fn decode(
6929            &mut self,
6930            decoder: &mut fidl::encoding::Decoder<
6931                '_,
6932                fidl::encoding::DefaultFuchsiaResourceDialect,
6933            >,
6934            offset: usize,
6935            _depth: fidl::encoding::Depth,
6936        ) -> fidl::Result<()> {
6937            decoder.debug_check_bounds::<Self>(offset);
6938            // Verify that padding bytes are zero.
6939            fidl::decode!(
6940                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkContextMarker>>,
6941                fidl::encoding::DefaultFuchsiaResourceDialect,
6942                &mut self.network_context,
6943                decoder,
6944                offset + 0,
6945                _depth
6946            )?;
6947            Ok(())
6948        }
6949    }
6950
6951    impl fidl::encoding::ResourceTypeMarker for NetworkContextGetEndpointManagerRequest {
6952        type Borrowed<'a> = &'a mut Self;
6953        fn take_or_borrow<'a>(
6954            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6955        ) -> Self::Borrowed<'a> {
6956            value
6957        }
6958    }
6959
6960    unsafe impl fidl::encoding::TypeMarker for NetworkContextGetEndpointManagerRequest {
6961        type Owned = Self;
6962
6963        #[inline(always)]
6964        fn inline_align(_context: fidl::encoding::Context) -> usize {
6965            4
6966        }
6967
6968        #[inline(always)]
6969        fn inline_size(_context: fidl::encoding::Context) -> usize {
6970            4
6971        }
6972    }
6973
6974    unsafe impl
6975        fidl::encoding::Encode<
6976            NetworkContextGetEndpointManagerRequest,
6977            fidl::encoding::DefaultFuchsiaResourceDialect,
6978        > for &mut NetworkContextGetEndpointManagerRequest
6979    {
6980        #[inline]
6981        unsafe fn encode(
6982            self,
6983            encoder: &mut fidl::encoding::Encoder<
6984                '_,
6985                fidl::encoding::DefaultFuchsiaResourceDialect,
6986            >,
6987            offset: usize,
6988            _depth: fidl::encoding::Depth,
6989        ) -> fidl::Result<()> {
6990            encoder.debug_check_bounds::<NetworkContextGetEndpointManagerRequest>(offset);
6991            // Delegate to tuple encoding.
6992            fidl::encoding::Encode::<NetworkContextGetEndpointManagerRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
6993                (
6994                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<EndpointManagerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.endp_manager),
6995                ),
6996                encoder, offset, _depth
6997            )
6998        }
6999    }
7000    unsafe impl<
7001        T0: fidl::encoding::Encode<
7002                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<EndpointManagerMarker>>,
7003                fidl::encoding::DefaultFuchsiaResourceDialect,
7004            >,
7005    >
7006        fidl::encoding::Encode<
7007            NetworkContextGetEndpointManagerRequest,
7008            fidl::encoding::DefaultFuchsiaResourceDialect,
7009        > for (T0,)
7010    {
7011        #[inline]
7012        unsafe fn encode(
7013            self,
7014            encoder: &mut fidl::encoding::Encoder<
7015                '_,
7016                fidl::encoding::DefaultFuchsiaResourceDialect,
7017            >,
7018            offset: usize,
7019            depth: fidl::encoding::Depth,
7020        ) -> fidl::Result<()> {
7021            encoder.debug_check_bounds::<NetworkContextGetEndpointManagerRequest>(offset);
7022            // Zero out padding regions. There's no need to apply masks
7023            // because the unmasked parts will be overwritten by fields.
7024            // Write the fields.
7025            self.0.encode(encoder, offset + 0, depth)?;
7026            Ok(())
7027        }
7028    }
7029
7030    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7031        for NetworkContextGetEndpointManagerRequest
7032    {
7033        #[inline(always)]
7034        fn new_empty() -> Self {
7035            Self {
7036                endp_manager: fidl::new_empty!(
7037                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<EndpointManagerMarker>>,
7038                    fidl::encoding::DefaultFuchsiaResourceDialect
7039                ),
7040            }
7041        }
7042
7043        #[inline]
7044        unsafe fn decode(
7045            &mut self,
7046            decoder: &mut fidl::encoding::Decoder<
7047                '_,
7048                fidl::encoding::DefaultFuchsiaResourceDialect,
7049            >,
7050            offset: usize,
7051            _depth: fidl::encoding::Depth,
7052        ) -> fidl::Result<()> {
7053            decoder.debug_check_bounds::<Self>(offset);
7054            // Verify that padding bytes are zero.
7055            fidl::decode!(
7056                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<EndpointManagerMarker>>,
7057                fidl::encoding::DefaultFuchsiaResourceDialect,
7058                &mut self.endp_manager,
7059                decoder,
7060                offset + 0,
7061                _depth
7062            )?;
7063            Ok(())
7064        }
7065    }
7066
7067    impl fidl::encoding::ResourceTypeMarker for NetworkContextGetNetworkManagerRequest {
7068        type Borrowed<'a> = &'a mut Self;
7069        fn take_or_borrow<'a>(
7070            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7071        ) -> Self::Borrowed<'a> {
7072            value
7073        }
7074    }
7075
7076    unsafe impl fidl::encoding::TypeMarker for NetworkContextGetNetworkManagerRequest {
7077        type Owned = Self;
7078
7079        #[inline(always)]
7080        fn inline_align(_context: fidl::encoding::Context) -> usize {
7081            4
7082        }
7083
7084        #[inline(always)]
7085        fn inline_size(_context: fidl::encoding::Context) -> usize {
7086            4
7087        }
7088    }
7089
7090    unsafe impl
7091        fidl::encoding::Encode<
7092            NetworkContextGetNetworkManagerRequest,
7093            fidl::encoding::DefaultFuchsiaResourceDialect,
7094        > for &mut NetworkContextGetNetworkManagerRequest
7095    {
7096        #[inline]
7097        unsafe fn encode(
7098            self,
7099            encoder: &mut fidl::encoding::Encoder<
7100                '_,
7101                fidl::encoding::DefaultFuchsiaResourceDialect,
7102            >,
7103            offset: usize,
7104            _depth: fidl::encoding::Depth,
7105        ) -> fidl::Result<()> {
7106            encoder.debug_check_bounds::<NetworkContextGetNetworkManagerRequest>(offset);
7107            // Delegate to tuple encoding.
7108            fidl::encoding::Encode::<NetworkContextGetNetworkManagerRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
7109                (
7110                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkManagerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.net_manager),
7111                ),
7112                encoder, offset, _depth
7113            )
7114        }
7115    }
7116    unsafe impl<
7117        T0: fidl::encoding::Encode<
7118                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkManagerMarker>>,
7119                fidl::encoding::DefaultFuchsiaResourceDialect,
7120            >,
7121    >
7122        fidl::encoding::Encode<
7123            NetworkContextGetNetworkManagerRequest,
7124            fidl::encoding::DefaultFuchsiaResourceDialect,
7125        > for (T0,)
7126    {
7127        #[inline]
7128        unsafe fn encode(
7129            self,
7130            encoder: &mut fidl::encoding::Encoder<
7131                '_,
7132                fidl::encoding::DefaultFuchsiaResourceDialect,
7133            >,
7134            offset: usize,
7135            depth: fidl::encoding::Depth,
7136        ) -> fidl::Result<()> {
7137            encoder.debug_check_bounds::<NetworkContextGetNetworkManagerRequest>(offset);
7138            // Zero out padding regions. There's no need to apply masks
7139            // because the unmasked parts will be overwritten by fields.
7140            // Write the fields.
7141            self.0.encode(encoder, offset + 0, depth)?;
7142            Ok(())
7143        }
7144    }
7145
7146    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7147        for NetworkContextGetNetworkManagerRequest
7148    {
7149        #[inline(always)]
7150        fn new_empty() -> Self {
7151            Self {
7152                net_manager: fidl::new_empty!(
7153                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkManagerMarker>>,
7154                    fidl::encoding::DefaultFuchsiaResourceDialect
7155                ),
7156            }
7157        }
7158
7159        #[inline]
7160        unsafe fn decode(
7161            &mut self,
7162            decoder: &mut fidl::encoding::Decoder<
7163                '_,
7164                fidl::encoding::DefaultFuchsiaResourceDialect,
7165            >,
7166            offset: usize,
7167            _depth: fidl::encoding::Depth,
7168        ) -> fidl::Result<()> {
7169            decoder.debug_check_bounds::<Self>(offset);
7170            // Verify that padding bytes are zero.
7171            fidl::decode!(
7172                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NetworkManagerMarker>>,
7173                fidl::encoding::DefaultFuchsiaResourceDialect,
7174                &mut self.net_manager,
7175                decoder,
7176                offset + 0,
7177                _depth
7178            )?;
7179            Ok(())
7180        }
7181    }
7182
7183    impl fidl::encoding::ResourceTypeMarker for NetworkContextSetupResponse {
7184        type Borrowed<'a> = &'a mut Self;
7185        fn take_or_borrow<'a>(
7186            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7187        ) -> Self::Borrowed<'a> {
7188            value
7189        }
7190    }
7191
7192    unsafe impl fidl::encoding::TypeMarker for NetworkContextSetupResponse {
7193        type Owned = Self;
7194
7195        #[inline(always)]
7196        fn inline_align(_context: fidl::encoding::Context) -> usize {
7197            4
7198        }
7199
7200        #[inline(always)]
7201        fn inline_size(_context: fidl::encoding::Context) -> usize {
7202            8
7203        }
7204    }
7205
7206    unsafe impl
7207        fidl::encoding::Encode<
7208            NetworkContextSetupResponse,
7209            fidl::encoding::DefaultFuchsiaResourceDialect,
7210        > for &mut NetworkContextSetupResponse
7211    {
7212        #[inline]
7213        unsafe fn encode(
7214            self,
7215            encoder: &mut fidl::encoding::Encoder<
7216                '_,
7217                fidl::encoding::DefaultFuchsiaResourceDialect,
7218            >,
7219            offset: usize,
7220            _depth: fidl::encoding::Depth,
7221        ) -> fidl::Result<()> {
7222            encoder.debug_check_bounds::<NetworkContextSetupResponse>(offset);
7223            // Delegate to tuple encoding.
7224            fidl::encoding::Encode::<
7225                NetworkContextSetupResponse,
7226                fidl::encoding::DefaultFuchsiaResourceDialect,
7227            >::encode(
7228                (
7229                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
7230                    <fidl::encoding::Optional<
7231                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
7232                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
7233                        &mut self.setup_handle,
7234                    ),
7235                ),
7236                encoder,
7237                offset,
7238                _depth,
7239            )
7240        }
7241    }
7242    unsafe impl<
7243        T0: fidl::encoding::Encode<i32, fidl::encoding::DefaultFuchsiaResourceDialect>,
7244        T1: fidl::encoding::Encode<
7245                fidl::encoding::Optional<
7246                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
7247                >,
7248                fidl::encoding::DefaultFuchsiaResourceDialect,
7249            >,
7250    >
7251        fidl::encoding::Encode<
7252            NetworkContextSetupResponse,
7253            fidl::encoding::DefaultFuchsiaResourceDialect,
7254        > for (T0, T1)
7255    {
7256        #[inline]
7257        unsafe fn encode(
7258            self,
7259            encoder: &mut fidl::encoding::Encoder<
7260                '_,
7261                fidl::encoding::DefaultFuchsiaResourceDialect,
7262            >,
7263            offset: usize,
7264            depth: fidl::encoding::Depth,
7265        ) -> fidl::Result<()> {
7266            encoder.debug_check_bounds::<NetworkContextSetupResponse>(offset);
7267            // Zero out padding regions. There's no need to apply masks
7268            // because the unmasked parts will be overwritten by fields.
7269            // Write the fields.
7270            self.0.encode(encoder, offset + 0, depth)?;
7271            self.1.encode(encoder, offset + 4, depth)?;
7272            Ok(())
7273        }
7274    }
7275
7276    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7277        for NetworkContextSetupResponse
7278    {
7279        #[inline(always)]
7280        fn new_empty() -> Self {
7281            Self {
7282                status: fidl::new_empty!(i32, fidl::encoding::DefaultFuchsiaResourceDialect),
7283                setup_handle: fidl::new_empty!(
7284                    fidl::encoding::Optional<
7285                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
7286                    >,
7287                    fidl::encoding::DefaultFuchsiaResourceDialect
7288                ),
7289            }
7290        }
7291
7292        #[inline]
7293        unsafe fn decode(
7294            &mut self,
7295            decoder: &mut fidl::encoding::Decoder<
7296                '_,
7297                fidl::encoding::DefaultFuchsiaResourceDialect,
7298            >,
7299            offset: usize,
7300            _depth: fidl::encoding::Depth,
7301        ) -> fidl::Result<()> {
7302            decoder.debug_check_bounds::<Self>(offset);
7303            // Verify that padding bytes are zero.
7304            fidl::decode!(
7305                i32,
7306                fidl::encoding::DefaultFuchsiaResourceDialect,
7307                &mut self.status,
7308                decoder,
7309                offset + 0,
7310                _depth
7311            )?;
7312            fidl::decode!(
7313                fidl::encoding::Optional<
7314                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<SetupHandleMarker>>,
7315                >,
7316                fidl::encoding::DefaultFuchsiaResourceDialect,
7317                &mut self.setup_handle,
7318                decoder,
7319                offset + 4,
7320                _depth
7321            )?;
7322            Ok(())
7323        }
7324    }
7325
7326    impl fidl::encoding::ResourceTypeMarker for NetworkCreateFakeEndpointRequest {
7327        type Borrowed<'a> = &'a mut Self;
7328        fn take_or_borrow<'a>(
7329            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7330        ) -> Self::Borrowed<'a> {
7331            value
7332        }
7333    }
7334
7335    unsafe impl fidl::encoding::TypeMarker for NetworkCreateFakeEndpointRequest {
7336        type Owned = Self;
7337
7338        #[inline(always)]
7339        fn inline_align(_context: fidl::encoding::Context) -> usize {
7340            4
7341        }
7342
7343        #[inline(always)]
7344        fn inline_size(_context: fidl::encoding::Context) -> usize {
7345            4
7346        }
7347    }
7348
7349    unsafe impl
7350        fidl::encoding::Encode<
7351            NetworkCreateFakeEndpointRequest,
7352            fidl::encoding::DefaultFuchsiaResourceDialect,
7353        > for &mut NetworkCreateFakeEndpointRequest
7354    {
7355        #[inline]
7356        unsafe fn encode(
7357            self,
7358            encoder: &mut fidl::encoding::Encoder<
7359                '_,
7360                fidl::encoding::DefaultFuchsiaResourceDialect,
7361            >,
7362            offset: usize,
7363            _depth: fidl::encoding::Depth,
7364        ) -> fidl::Result<()> {
7365            encoder.debug_check_bounds::<NetworkCreateFakeEndpointRequest>(offset);
7366            // Delegate to tuple encoding.
7367            fidl::encoding::Encode::<NetworkCreateFakeEndpointRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
7368                (
7369                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<FakeEndpointMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.ep),
7370                ),
7371                encoder, offset, _depth
7372            )
7373        }
7374    }
7375    unsafe impl<
7376        T0: fidl::encoding::Encode<
7377                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<FakeEndpointMarker>>,
7378                fidl::encoding::DefaultFuchsiaResourceDialect,
7379            >,
7380    >
7381        fidl::encoding::Encode<
7382            NetworkCreateFakeEndpointRequest,
7383            fidl::encoding::DefaultFuchsiaResourceDialect,
7384        > for (T0,)
7385    {
7386        #[inline]
7387        unsafe fn encode(
7388            self,
7389            encoder: &mut fidl::encoding::Encoder<
7390                '_,
7391                fidl::encoding::DefaultFuchsiaResourceDialect,
7392            >,
7393            offset: usize,
7394            depth: fidl::encoding::Depth,
7395        ) -> fidl::Result<()> {
7396            encoder.debug_check_bounds::<NetworkCreateFakeEndpointRequest>(offset);
7397            // Zero out padding regions. There's no need to apply masks
7398            // because the unmasked parts will be overwritten by fields.
7399            // Write the fields.
7400            self.0.encode(encoder, offset + 0, depth)?;
7401            Ok(())
7402        }
7403    }
7404
7405    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7406        for NetworkCreateFakeEndpointRequest
7407    {
7408        #[inline(always)]
7409        fn new_empty() -> Self {
7410            Self {
7411                ep: fidl::new_empty!(
7412                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<FakeEndpointMarker>>,
7413                    fidl::encoding::DefaultFuchsiaResourceDialect
7414                ),
7415            }
7416        }
7417
7418        #[inline]
7419        unsafe fn decode(
7420            &mut self,
7421            decoder: &mut fidl::encoding::Decoder<
7422                '_,
7423                fidl::encoding::DefaultFuchsiaResourceDialect,
7424            >,
7425            offset: usize,
7426            _depth: fidl::encoding::Depth,
7427        ) -> fidl::Result<()> {
7428            decoder.debug_check_bounds::<Self>(offset);
7429            // Verify that padding bytes are zero.
7430            fidl::decode!(
7431                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<FakeEndpointMarker>>,
7432                fidl::encoding::DefaultFuchsiaResourceDialect,
7433                &mut self.ep,
7434                decoder,
7435                offset + 0,
7436                _depth
7437            )?;
7438            Ok(())
7439        }
7440    }
7441
7442    impl fidl::encoding::ResourceTypeMarker for NetworkManagerCreateNetworkResponse {
7443        type Borrowed<'a> = &'a mut Self;
7444        fn take_or_borrow<'a>(
7445            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7446        ) -> Self::Borrowed<'a> {
7447            value
7448        }
7449    }
7450
7451    unsafe impl fidl::encoding::TypeMarker for NetworkManagerCreateNetworkResponse {
7452        type Owned = Self;
7453
7454        #[inline(always)]
7455        fn inline_align(_context: fidl::encoding::Context) -> usize {
7456            4
7457        }
7458
7459        #[inline(always)]
7460        fn inline_size(_context: fidl::encoding::Context) -> usize {
7461            8
7462        }
7463    }
7464
7465    unsafe impl
7466        fidl::encoding::Encode<
7467            NetworkManagerCreateNetworkResponse,
7468            fidl::encoding::DefaultFuchsiaResourceDialect,
7469        > for &mut NetworkManagerCreateNetworkResponse
7470    {
7471        #[inline]
7472        unsafe fn encode(
7473            self,
7474            encoder: &mut fidl::encoding::Encoder<
7475                '_,
7476                fidl::encoding::DefaultFuchsiaResourceDialect,
7477            >,
7478            offset: usize,
7479            _depth: fidl::encoding::Depth,
7480        ) -> fidl::Result<()> {
7481            encoder.debug_check_bounds::<NetworkManagerCreateNetworkResponse>(offset);
7482            // Delegate to tuple encoding.
7483            fidl::encoding::Encode::<
7484                NetworkManagerCreateNetworkResponse,
7485                fidl::encoding::DefaultFuchsiaResourceDialect,
7486            >::encode(
7487                (
7488                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
7489                    <fidl::encoding::Optional<
7490                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7491                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
7492                        &mut self.net
7493                    ),
7494                ),
7495                encoder,
7496                offset,
7497                _depth,
7498            )
7499        }
7500    }
7501    unsafe impl<
7502        T0: fidl::encoding::Encode<i32, fidl::encoding::DefaultFuchsiaResourceDialect>,
7503        T1: fidl::encoding::Encode<
7504                fidl::encoding::Optional<
7505                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7506                >,
7507                fidl::encoding::DefaultFuchsiaResourceDialect,
7508            >,
7509    >
7510        fidl::encoding::Encode<
7511            NetworkManagerCreateNetworkResponse,
7512            fidl::encoding::DefaultFuchsiaResourceDialect,
7513        > for (T0, T1)
7514    {
7515        #[inline]
7516        unsafe fn encode(
7517            self,
7518            encoder: &mut fidl::encoding::Encoder<
7519                '_,
7520                fidl::encoding::DefaultFuchsiaResourceDialect,
7521            >,
7522            offset: usize,
7523            depth: fidl::encoding::Depth,
7524        ) -> fidl::Result<()> {
7525            encoder.debug_check_bounds::<NetworkManagerCreateNetworkResponse>(offset);
7526            // Zero out padding regions. There's no need to apply masks
7527            // because the unmasked parts will be overwritten by fields.
7528            // Write the fields.
7529            self.0.encode(encoder, offset + 0, depth)?;
7530            self.1.encode(encoder, offset + 4, depth)?;
7531            Ok(())
7532        }
7533    }
7534
7535    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7536        for NetworkManagerCreateNetworkResponse
7537    {
7538        #[inline(always)]
7539        fn new_empty() -> Self {
7540            Self {
7541                status: fidl::new_empty!(i32, fidl::encoding::DefaultFuchsiaResourceDialect),
7542                net: fidl::new_empty!(
7543                    fidl::encoding::Optional<
7544                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7545                    >,
7546                    fidl::encoding::DefaultFuchsiaResourceDialect
7547                ),
7548            }
7549        }
7550
7551        #[inline]
7552        unsafe fn decode(
7553            &mut self,
7554            decoder: &mut fidl::encoding::Decoder<
7555                '_,
7556                fidl::encoding::DefaultFuchsiaResourceDialect,
7557            >,
7558            offset: usize,
7559            _depth: fidl::encoding::Depth,
7560        ) -> fidl::Result<()> {
7561            decoder.debug_check_bounds::<Self>(offset);
7562            // Verify that padding bytes are zero.
7563            fidl::decode!(
7564                i32,
7565                fidl::encoding::DefaultFuchsiaResourceDialect,
7566                &mut self.status,
7567                decoder,
7568                offset + 0,
7569                _depth
7570            )?;
7571            fidl::decode!(
7572                fidl::encoding::Optional<
7573                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7574                >,
7575                fidl::encoding::DefaultFuchsiaResourceDialect,
7576                &mut self.net,
7577                decoder,
7578                offset + 4,
7579                _depth
7580            )?;
7581            Ok(())
7582        }
7583    }
7584
7585    impl fidl::encoding::ResourceTypeMarker for NetworkManagerGetNetworkResponse {
7586        type Borrowed<'a> = &'a mut Self;
7587        fn take_or_borrow<'a>(
7588            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7589        ) -> Self::Borrowed<'a> {
7590            value
7591        }
7592    }
7593
7594    unsafe impl fidl::encoding::TypeMarker for NetworkManagerGetNetworkResponse {
7595        type Owned = Self;
7596
7597        #[inline(always)]
7598        fn inline_align(_context: fidl::encoding::Context) -> usize {
7599            4
7600        }
7601
7602        #[inline(always)]
7603        fn inline_size(_context: fidl::encoding::Context) -> usize {
7604            4
7605        }
7606    }
7607
7608    unsafe impl
7609        fidl::encoding::Encode<
7610            NetworkManagerGetNetworkResponse,
7611            fidl::encoding::DefaultFuchsiaResourceDialect,
7612        > for &mut NetworkManagerGetNetworkResponse
7613    {
7614        #[inline]
7615        unsafe fn encode(
7616            self,
7617            encoder: &mut fidl::encoding::Encoder<
7618                '_,
7619                fidl::encoding::DefaultFuchsiaResourceDialect,
7620            >,
7621            offset: usize,
7622            _depth: fidl::encoding::Depth,
7623        ) -> fidl::Result<()> {
7624            encoder.debug_check_bounds::<NetworkManagerGetNetworkResponse>(offset);
7625            // Delegate to tuple encoding.
7626            fidl::encoding::Encode::<
7627                NetworkManagerGetNetworkResponse,
7628                fidl::encoding::DefaultFuchsiaResourceDialect,
7629            >::encode(
7630                (<fidl::encoding::Optional<
7631                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7632                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
7633                    &mut self.net
7634                ),),
7635                encoder,
7636                offset,
7637                _depth,
7638            )
7639        }
7640    }
7641    unsafe impl<
7642        T0: fidl::encoding::Encode<
7643                fidl::encoding::Optional<
7644                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7645                >,
7646                fidl::encoding::DefaultFuchsiaResourceDialect,
7647            >,
7648    >
7649        fidl::encoding::Encode<
7650            NetworkManagerGetNetworkResponse,
7651            fidl::encoding::DefaultFuchsiaResourceDialect,
7652        > for (T0,)
7653    {
7654        #[inline]
7655        unsafe fn encode(
7656            self,
7657            encoder: &mut fidl::encoding::Encoder<
7658                '_,
7659                fidl::encoding::DefaultFuchsiaResourceDialect,
7660            >,
7661            offset: usize,
7662            depth: fidl::encoding::Depth,
7663        ) -> fidl::Result<()> {
7664            encoder.debug_check_bounds::<NetworkManagerGetNetworkResponse>(offset);
7665            // Zero out padding regions. There's no need to apply masks
7666            // because the unmasked parts will be overwritten by fields.
7667            // Write the fields.
7668            self.0.encode(encoder, offset + 0, depth)?;
7669            Ok(())
7670        }
7671    }
7672
7673    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7674        for NetworkManagerGetNetworkResponse
7675    {
7676        #[inline(always)]
7677        fn new_empty() -> Self {
7678            Self {
7679                net: fidl::new_empty!(
7680                    fidl::encoding::Optional<
7681                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7682                    >,
7683                    fidl::encoding::DefaultFuchsiaResourceDialect
7684                ),
7685            }
7686        }
7687
7688        #[inline]
7689        unsafe fn decode(
7690            &mut self,
7691            decoder: &mut fidl::encoding::Decoder<
7692                '_,
7693                fidl::encoding::DefaultFuchsiaResourceDialect,
7694            >,
7695            offset: usize,
7696            _depth: fidl::encoding::Depth,
7697        ) -> fidl::Result<()> {
7698            decoder.debug_check_bounds::<Self>(offset);
7699            // Verify that padding bytes are zero.
7700            fidl::decode!(
7701                fidl::encoding::Optional<
7702                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NetworkMarker>>,
7703                >,
7704                fidl::encoding::DefaultFuchsiaResourceDialect,
7705                &mut self.net,
7706                decoder,
7707                offset + 0,
7708                _depth
7709            )?;
7710            Ok(())
7711        }
7712    }
7713}