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