fidl_fuchsia_netemul_network/
fidl_fuchsia_netemul_network.rs

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