Skip to main content

fidl_fuchsia_netemul_network/
fidl_fuchsia_netemul_network.rs

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