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