Skip to main content

fidl_fuchsia_netemul/
fidl_fuchsia_netemul.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_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct ManagedRealmAddDeviceRequest {
16    pub path: String,
17    pub device: fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
18}
19
20impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
21    for ManagedRealmAddDeviceRequest
22{
23}
24
25#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
26pub struct ManagedRealmConnectToProtocolRequest {
27    pub protocol_name: String,
28    pub child_name: Option<String>,
29    pub req: fidl::Channel,
30}
31
32impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
33    for ManagedRealmConnectToProtocolRequest
34{
35}
36
37#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
38pub struct ManagedRealmConnectToServiceRequest {
39    pub service_name: String,
40    pub child_name: Option<String>,
41    pub req: fidl::Channel,
42}
43
44impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
45    for ManagedRealmConnectToServiceRequest
46{
47}
48
49#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
50pub struct ManagedRealmGetCrashListenerRequest {
51    pub listener: fidl::endpoints::ServerEnd<CrashListenerMarker>,
52}
53
54impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
55    for ManagedRealmGetCrashListenerRequest
56{
57}
58
59#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
60pub struct ManagedRealmGetDevfsRequest {
61    pub devfs: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
62}
63
64impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
65    for ManagedRealmGetDevfsRequest
66{
67}
68
69#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
70pub struct ManagedRealmOpenDiagnosticsDirectoryRequest {
71    pub child_name: String,
72    pub directory: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
73}
74
75impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
76    for ManagedRealmOpenDiagnosticsDirectoryRequest
77{
78}
79
80#[derive(Debug, PartialEq)]
81pub struct SandboxCreateRealmRequest {
82    pub realm: fidl::endpoints::ServerEnd<ManagedRealmMarker>,
83    pub options: RealmOptions,
84}
85
86impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for SandboxCreateRealmRequest {}
87
88#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
89pub struct SandboxGetNetworkContextRequest {
90    pub network_context:
91        fidl::endpoints::ServerEnd<fidl_fuchsia_netemul_network::NetworkContextMarker>,
92}
93
94impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
95    for SandboxGetNetworkContextRequest
96{
97}
98
99#[derive(Debug, Default, PartialEq)]
100pub struct ChildDef {
101    /// The runtime source for creating this child.
102    ///
103    /// Required.
104    pub source: Option<ChildSource>,
105    /// The name of this child local to its containing realm.
106    ///
107    /// Required.
108    pub name: Option<String>,
109    /// Protocols that this child exposes to the realm.
110    ///
111    /// If not set, interpreted as an empty vector.
112    pub exposes: Option<Vec<String>>,
113    /// Capabilities that this child uses.
114    ///
115    /// If not set, no capabilities will be routed to the component.
116    pub uses: Option<ChildUses>,
117    /// Arguments to be passed to the child at runtime. If
118    /// specified, overrides any arguments specified in the
119    /// manifest.
120    ///
121    /// If not set, the original arguments from the manifest are
122    /// used.
123    pub program_args: Option<Vec<String>>,
124    /// Whether the component should be started eagerly once the
125    /// realm is created.
126    ///
127    /// If not set, interpreted as false.
128    pub eager: Option<bool>,
129    /// Structured configuration values to *override* when launching
130    /// the child.
131    ///
132    /// If not set, interpereted as an empty vector.
133    pub config_values: Option<Vec<ChildConfigValue>>,
134    #[doc(hidden)]
135    pub __source_breaking: fidl::marker::SourceBreaking,
136}
137
138impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ChildDef {}
139
140#[derive(Debug, Default, PartialEq)]
141pub struct InterfaceOptions {
142    /// The name of the interface to be created.
143    ///
144    /// Required.
145    pub name: Option<String>,
146    /// The device port to be installed.
147    ///
148    /// Required.
149    pub device: Option<fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>>,
150    /// Whether to disable automatic generation and assignment of link-
151    /// local IPv6 addresses for the interface.
152    ///
153    /// If not set, interpreted as false.
154    pub without_autogenerated_addresses: Option<bool>,
155    /// Static IP addresses to be assigned to the interface.
156    /// Corresponding local subnet routes will also be added to the
157    /// netstack's routing table.
158    ///
159    /// If not set, interpreted as an empty vector.
160    pub static_ips: Option<Vec<fidl_fuchsia_net::Subnet>>,
161    /// The IP address of the default gateway.
162    ///
163    /// If not set, no default route will be added to the netstack.
164    pub gateway: Option<fidl_fuchsia_net::IpAddress>,
165    /// Whether to enable IPv4 forwarding on the interface.
166    ///
167    /// If not set, interpreted as false.
168    pub enable_ipv4_forwarding: Option<bool>,
169    /// Whether to enable IPv6 forwarding on the interface.
170    ///
171    /// If not set, interpreted as false.
172    pub enable_ipv6_forwarding: Option<bool>,
173    /// The maximum number of IPv4 multicast neighbor solicitations.
174    ///
175    /// If not set, uses the system default.
176    pub ipv4_multicast_neighbor_solicitations: Option<u16>,
177    /// The maximum number of IPv6 multicast neighbor solicitations.
178    ///
179    /// If not set, uses the system default.
180    pub ipv6_multicast_neighbor_solicitations: Option<u16>,
181    #[doc(hidden)]
182    pub __source_breaking: fidl::marker::SourceBreaking,
183}
184
185impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for InterfaceOptions {}
186
187#[derive(Debug, Default, PartialEq)]
188pub struct RealmOptions {
189    /// Realm name.
190    ///
191    /// The realm name is used for attribution and debugging purposes.
192    /// It is used to decorate logs that come from its constituent child
193    /// components.
194    ///
195    /// If not set, an automatically-generated name will be used.
196    pub name: Option<String>,
197    /// Child components to dynamically create in this realm.
198    ///
199    /// If not set, interpreted as an empty vector.
200    pub children: Option<Vec<ChildDef>>,
201    #[doc(hidden)]
202    pub __source_breaking: fidl::marker::SourceBreaking,
203}
204
205impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for RealmOptions {}
206
207#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
208pub enum ChildSource {
209    /// Spawn a child from a component with the provided URL.
210    Component(String),
211    /// Spawn a mock child which serves its exposed directory
212    /// through the provided handle.
213    Mock(fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>),
214}
215
216impl ChildSource {
217    #[inline]
218    pub fn ordinal(&self) -> u64 {
219        match *self {
220            Self::Component(_) => 1,
221            Self::Mock(_) => 2,
222        }
223    }
224}
225
226impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ChildSource {}
227
228#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
229pub struct ConfigurableNetstackMarker;
230
231impl fidl::endpoints::ProtocolMarker for ConfigurableNetstackMarker {
232    type Proxy = ConfigurableNetstackProxy;
233    type RequestStream = ConfigurableNetstackRequestStream;
234    #[cfg(target_os = "fuchsia")]
235    type SynchronousProxy = ConfigurableNetstackSynchronousProxy;
236
237    const DEBUG_NAME: &'static str = "fuchsia.netemul.ConfigurableNetstack";
238}
239impl fidl::endpoints::DiscoverableProtocolMarker for ConfigurableNetstackMarker {}
240pub type ConfigurableNetstackConfigureInterfaceResult = Result<(), ConfigurationError>;
241
242pub trait ConfigurableNetstackProxyInterface: Send + Sync {
243    type ConfigureInterfaceResponseFut: std::future::Future<
244            Output = Result<ConfigurableNetstackConfigureInterfaceResult, fidl::Error>,
245        > + Send;
246    fn r#configure_interface(
247        &self,
248        payload: InterfaceOptions,
249    ) -> Self::ConfigureInterfaceResponseFut;
250}
251#[derive(Debug)]
252#[cfg(target_os = "fuchsia")]
253pub struct ConfigurableNetstackSynchronousProxy {
254    client: fidl::client::sync::Client,
255}
256
257#[cfg(target_os = "fuchsia")]
258impl fidl::endpoints::SynchronousProxy for ConfigurableNetstackSynchronousProxy {
259    type Proxy = ConfigurableNetstackProxy;
260    type Protocol = ConfigurableNetstackMarker;
261
262    fn from_channel(inner: fidl::Channel) -> Self {
263        Self::new(inner)
264    }
265
266    fn into_channel(self) -> fidl::Channel {
267        self.client.into_channel()
268    }
269
270    fn as_channel(&self) -> &fidl::Channel {
271        self.client.as_channel()
272    }
273}
274
275#[cfg(target_os = "fuchsia")]
276impl ConfigurableNetstackSynchronousProxy {
277    pub fn new(channel: fidl::Channel) -> Self {
278        Self { client: fidl::client::sync::Client::new(channel) }
279    }
280
281    pub fn into_channel(self) -> fidl::Channel {
282        self.client.into_channel()
283    }
284
285    /// Waits until an event arrives and returns it. It is safe for other
286    /// threads to make concurrent requests while waiting for an event.
287    pub fn wait_for_event(
288        &self,
289        deadline: zx::MonotonicInstant,
290    ) -> Result<ConfigurableNetstackEvent, fidl::Error> {
291        ConfigurableNetstackEvent::decode(
292            self.client.wait_for_event::<ConfigurableNetstackMarker>(deadline)?,
293        )
294    }
295
296    /// Installs a device in the netstack with the provided configuration.
297    ///
298    /// + request `options` configuration options on the interface.
299    ///
300    /// * error `INVALID_ARGS` if `options` is invalid, as validated by the
301    ///     configurable-netstack.
302    /// * error `REJECTED_BY_NETSTACK` if an error is returned from an operation
303    ///     on the netstack, e.g. attempting to add an invalid route.
304    /// * error `INTERNAL` if an unexpected error is encountered that is not
305    ///     caused by the client, e.g. an error communicating with the netstack.
306    pub fn r#configure_interface(
307        &self,
308        mut payload: InterfaceOptions,
309        ___deadline: zx::MonotonicInstant,
310    ) -> Result<ConfigurableNetstackConfigureInterfaceResult, fidl::Error> {
311        let _response = self.client.send_query::<InterfaceOptions, fidl::encoding::ResultType<
312            fidl::encoding::EmptyStruct,
313            ConfigurationError,
314        >, ConfigurableNetstackMarker>(
315            &mut payload,
316            0x64db8deb981ee49,
317            fidl::encoding::DynamicFlags::empty(),
318            ___deadline,
319        )?;
320        Ok(_response.map(|x| x))
321    }
322}
323
324#[cfg(target_os = "fuchsia")]
325impl From<ConfigurableNetstackSynchronousProxy> for zx::NullableHandle {
326    fn from(value: ConfigurableNetstackSynchronousProxy) -> Self {
327        value.into_channel().into()
328    }
329}
330
331#[cfg(target_os = "fuchsia")]
332impl From<fidl::Channel> for ConfigurableNetstackSynchronousProxy {
333    fn from(value: fidl::Channel) -> Self {
334        Self::new(value)
335    }
336}
337
338#[cfg(target_os = "fuchsia")]
339impl fidl::endpoints::FromClient for ConfigurableNetstackSynchronousProxy {
340    type Protocol = ConfigurableNetstackMarker;
341
342    fn from_client(value: fidl::endpoints::ClientEnd<ConfigurableNetstackMarker>) -> Self {
343        Self::new(value.into_channel())
344    }
345}
346
347#[derive(Debug, Clone)]
348pub struct ConfigurableNetstackProxy {
349    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
350}
351
352impl fidl::endpoints::Proxy for ConfigurableNetstackProxy {
353    type Protocol = ConfigurableNetstackMarker;
354
355    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
356        Self::new(inner)
357    }
358
359    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
360        self.client.into_channel().map_err(|client| Self { client })
361    }
362
363    fn as_channel(&self) -> &::fidl::AsyncChannel {
364        self.client.as_channel()
365    }
366}
367
368impl ConfigurableNetstackProxy {
369    /// Create a new Proxy for fuchsia.netemul/ConfigurableNetstack.
370    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
371        let protocol_name =
372            <ConfigurableNetstackMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
373        Self { client: fidl::client::Client::new(channel, protocol_name) }
374    }
375
376    /// Get a Stream of events from the remote end of the protocol.
377    ///
378    /// # Panics
379    ///
380    /// Panics if the event stream was already taken.
381    pub fn take_event_stream(&self) -> ConfigurableNetstackEventStream {
382        ConfigurableNetstackEventStream { event_receiver: self.client.take_event_receiver() }
383    }
384
385    /// Installs a device in the netstack with the provided configuration.
386    ///
387    /// + request `options` configuration options on the interface.
388    ///
389    /// * error `INVALID_ARGS` if `options` is invalid, as validated by the
390    ///     configurable-netstack.
391    /// * error `REJECTED_BY_NETSTACK` if an error is returned from an operation
392    ///     on the netstack, e.g. attempting to add an invalid route.
393    /// * error `INTERNAL` if an unexpected error is encountered that is not
394    ///     caused by the client, e.g. an error communicating with the netstack.
395    pub fn r#configure_interface(
396        &self,
397        mut payload: InterfaceOptions,
398    ) -> fidl::client::QueryResponseFut<
399        ConfigurableNetstackConfigureInterfaceResult,
400        fidl::encoding::DefaultFuchsiaResourceDialect,
401    > {
402        ConfigurableNetstackProxyInterface::r#configure_interface(self, payload)
403    }
404}
405
406impl ConfigurableNetstackProxyInterface for ConfigurableNetstackProxy {
407    type ConfigureInterfaceResponseFut = fidl::client::QueryResponseFut<
408        ConfigurableNetstackConfigureInterfaceResult,
409        fidl::encoding::DefaultFuchsiaResourceDialect,
410    >;
411    fn r#configure_interface(
412        &self,
413        mut payload: InterfaceOptions,
414    ) -> Self::ConfigureInterfaceResponseFut {
415        fn _decode(
416            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
417        ) -> Result<ConfigurableNetstackConfigureInterfaceResult, fidl::Error> {
418            let _response = fidl::client::decode_transaction_body::<
419                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, ConfigurationError>,
420                fidl::encoding::DefaultFuchsiaResourceDialect,
421                0x64db8deb981ee49,
422            >(_buf?)?;
423            Ok(_response.map(|x| x))
424        }
425        self.client.send_query_and_decode::<
426            InterfaceOptions,
427            ConfigurableNetstackConfigureInterfaceResult,
428        >(
429            &mut payload,
430            0x64db8deb981ee49,
431            fidl::encoding::DynamicFlags::empty(),
432            _decode,
433        )
434    }
435}
436
437pub struct ConfigurableNetstackEventStream {
438    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
439}
440
441impl std::marker::Unpin for ConfigurableNetstackEventStream {}
442
443impl futures::stream::FusedStream for ConfigurableNetstackEventStream {
444    fn is_terminated(&self) -> bool {
445        self.event_receiver.is_terminated()
446    }
447}
448
449impl futures::Stream for ConfigurableNetstackEventStream {
450    type Item = Result<ConfigurableNetstackEvent, fidl::Error>;
451
452    fn poll_next(
453        mut self: std::pin::Pin<&mut Self>,
454        cx: &mut std::task::Context<'_>,
455    ) -> std::task::Poll<Option<Self::Item>> {
456        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
457            &mut self.event_receiver,
458            cx
459        )?) {
460            Some(buf) => std::task::Poll::Ready(Some(ConfigurableNetstackEvent::decode(buf))),
461            None => std::task::Poll::Ready(None),
462        }
463    }
464}
465
466#[derive(Debug)]
467pub enum ConfigurableNetstackEvent {}
468
469impl ConfigurableNetstackEvent {
470    /// Decodes a message buffer as a [`ConfigurableNetstackEvent`].
471    fn decode(
472        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
473    ) -> Result<ConfigurableNetstackEvent, fidl::Error> {
474        let (bytes, _handles) = buf.split_mut();
475        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
476        debug_assert_eq!(tx_header.tx_id, 0);
477        match tx_header.ordinal {
478            _ => Err(fidl::Error::UnknownOrdinal {
479                ordinal: tx_header.ordinal,
480                protocol_name:
481                    <ConfigurableNetstackMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
482            }),
483        }
484    }
485}
486
487/// A Stream of incoming requests for fuchsia.netemul/ConfigurableNetstack.
488pub struct ConfigurableNetstackRequestStream {
489    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
490    is_terminated: bool,
491}
492
493impl std::marker::Unpin for ConfigurableNetstackRequestStream {}
494
495impl futures::stream::FusedStream for ConfigurableNetstackRequestStream {
496    fn is_terminated(&self) -> bool {
497        self.is_terminated
498    }
499}
500
501impl fidl::endpoints::RequestStream for ConfigurableNetstackRequestStream {
502    type Protocol = ConfigurableNetstackMarker;
503    type ControlHandle = ConfigurableNetstackControlHandle;
504
505    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
506        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
507    }
508
509    fn control_handle(&self) -> Self::ControlHandle {
510        ConfigurableNetstackControlHandle { inner: self.inner.clone() }
511    }
512
513    fn into_inner(
514        self,
515    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
516    {
517        (self.inner, self.is_terminated)
518    }
519
520    fn from_inner(
521        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
522        is_terminated: bool,
523    ) -> Self {
524        Self { inner, is_terminated }
525    }
526}
527
528impl futures::Stream for ConfigurableNetstackRequestStream {
529    type Item = Result<ConfigurableNetstackRequest, fidl::Error>;
530
531    fn poll_next(
532        mut self: std::pin::Pin<&mut Self>,
533        cx: &mut std::task::Context<'_>,
534    ) -> std::task::Poll<Option<Self::Item>> {
535        let this = &mut *self;
536        if this.inner.check_shutdown(cx) {
537            this.is_terminated = true;
538            return std::task::Poll::Ready(None);
539        }
540        if this.is_terminated {
541            panic!("polled ConfigurableNetstackRequestStream after completion");
542        }
543        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
544            |bytes, handles| {
545                match this.inner.channel().read_etc(cx, bytes, handles) {
546                    std::task::Poll::Ready(Ok(())) => {}
547                    std::task::Poll::Pending => return std::task::Poll::Pending,
548                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
549                        this.is_terminated = true;
550                        return std::task::Poll::Ready(None);
551                    }
552                    std::task::Poll::Ready(Err(e)) => {
553                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
554                            e.into(),
555                        ))));
556                    }
557                }
558
559                // A message has been received from the channel
560                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
561
562                std::task::Poll::Ready(Some(match header.ordinal {
563                0x64db8deb981ee49 => {
564                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
565                    let mut req = fidl::new_empty!(InterfaceOptions, fidl::encoding::DefaultFuchsiaResourceDialect);
566                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<InterfaceOptions>(&header, _body_bytes, handles, &mut req)?;
567                    let control_handle = ConfigurableNetstackControlHandle {
568                        inner: this.inner.clone(),
569                    };
570                    Ok(ConfigurableNetstackRequest::ConfigureInterface {payload: req,
571                        responder: ConfigurableNetstackConfigureInterfaceResponder {
572                            control_handle: std::mem::ManuallyDrop::new(control_handle),
573                            tx_id: header.tx_id,
574                        },
575                    })
576                }
577                _ => Err(fidl::Error::UnknownOrdinal {
578                    ordinal: header.ordinal,
579                    protocol_name: <ConfigurableNetstackMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
580                }),
581            }))
582            },
583        )
584    }
585}
586
587/// A test-friendly wrapper around Fuchsia's administrative netstack APIs.
588///
589/// This protocol provides a simplified interface to an underlying netstack that
590/// allows the caller to configure it for use in a test environment.
591#[derive(Debug)]
592pub enum ConfigurableNetstackRequest {
593    /// Installs a device in the netstack with the provided configuration.
594    ///
595    /// + request `options` configuration options on the interface.
596    ///
597    /// * error `INVALID_ARGS` if `options` is invalid, as validated by the
598    ///     configurable-netstack.
599    /// * error `REJECTED_BY_NETSTACK` if an error is returned from an operation
600    ///     on the netstack, e.g. attempting to add an invalid route.
601    /// * error `INTERNAL` if an unexpected error is encountered that is not
602    ///     caused by the client, e.g. an error communicating with the netstack.
603    ConfigureInterface {
604        payload: InterfaceOptions,
605        responder: ConfigurableNetstackConfigureInterfaceResponder,
606    },
607}
608
609impl ConfigurableNetstackRequest {
610    #[allow(irrefutable_let_patterns)]
611    pub fn into_configure_interface(
612        self,
613    ) -> Option<(InterfaceOptions, ConfigurableNetstackConfigureInterfaceResponder)> {
614        if let ConfigurableNetstackRequest::ConfigureInterface { payload, responder } = self {
615            Some((payload, responder))
616        } else {
617            None
618        }
619    }
620
621    /// Name of the method defined in FIDL
622    pub fn method_name(&self) -> &'static str {
623        match *self {
624            ConfigurableNetstackRequest::ConfigureInterface { .. } => "configure_interface",
625        }
626    }
627}
628
629#[derive(Debug, Clone)]
630pub struct ConfigurableNetstackControlHandle {
631    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
632}
633
634impl ConfigurableNetstackControlHandle {
635    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
636        self.inner.shutdown_with_epitaph(status.into())
637    }
638}
639
640impl fidl::endpoints::ControlHandle for ConfigurableNetstackControlHandle {
641    fn shutdown(&self) {
642        self.inner.shutdown()
643    }
644
645    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
646        self.inner.shutdown_with_epitaph(status)
647    }
648
649    fn is_closed(&self) -> bool {
650        self.inner.channel().is_closed()
651    }
652    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
653        self.inner.channel().on_closed()
654    }
655
656    #[cfg(target_os = "fuchsia")]
657    fn signal_peer(
658        &self,
659        clear_mask: zx::Signals,
660        set_mask: zx::Signals,
661    ) -> Result<(), zx_status::Status> {
662        use fidl::Peered;
663        self.inner.channel().signal_peer(clear_mask, set_mask)
664    }
665}
666
667impl ConfigurableNetstackControlHandle {}
668
669#[must_use = "FIDL methods require a response to be sent"]
670#[derive(Debug)]
671pub struct ConfigurableNetstackConfigureInterfaceResponder {
672    control_handle: std::mem::ManuallyDrop<ConfigurableNetstackControlHandle>,
673    tx_id: u32,
674}
675
676/// Set the the channel to be shutdown (see [`ConfigurableNetstackControlHandle::shutdown`])
677/// if the responder is dropped without sending a response, so that the client
678/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
679impl std::ops::Drop for ConfigurableNetstackConfigureInterfaceResponder {
680    fn drop(&mut self) {
681        self.control_handle.shutdown();
682        // Safety: drops once, never accessed again
683        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
684    }
685}
686
687impl fidl::endpoints::Responder for ConfigurableNetstackConfigureInterfaceResponder {
688    type ControlHandle = ConfigurableNetstackControlHandle;
689
690    fn control_handle(&self) -> &ConfigurableNetstackControlHandle {
691        &self.control_handle
692    }
693
694    fn drop_without_shutdown(mut self) {
695        // Safety: drops once, never accessed again due to mem::forget
696        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
697        // Prevent Drop from running (which would shut down the channel)
698        std::mem::forget(self);
699    }
700}
701
702impl ConfigurableNetstackConfigureInterfaceResponder {
703    /// Sends a response to the FIDL transaction.
704    ///
705    /// Sets the channel to shutdown if an error occurs.
706    pub fn send(self, mut result: Result<(), ConfigurationError>) -> Result<(), fidl::Error> {
707        let _result = self.send_raw(result);
708        if _result.is_err() {
709            self.control_handle.shutdown();
710        }
711        self.drop_without_shutdown();
712        _result
713    }
714
715    /// Similar to "send" but does not shutdown the channel if an error occurs.
716    pub fn send_no_shutdown_on_err(
717        self,
718        mut result: Result<(), ConfigurationError>,
719    ) -> Result<(), fidl::Error> {
720        let _result = self.send_raw(result);
721        self.drop_without_shutdown();
722        _result
723    }
724
725    fn send_raw(&self, mut result: Result<(), ConfigurationError>) -> Result<(), fidl::Error> {
726        self.control_handle.inner.send::<fidl::encoding::ResultType<
727            fidl::encoding::EmptyStruct,
728            ConfigurationError,
729        >>(
730            result,
731            self.tx_id,
732            0x64db8deb981ee49,
733            fidl::encoding::DynamicFlags::empty(),
734        )
735    }
736}
737
738#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
739pub struct CrashListenerMarker;
740
741impl fidl::endpoints::ProtocolMarker for CrashListenerMarker {
742    type Proxy = CrashListenerProxy;
743    type RequestStream = CrashListenerRequestStream;
744    #[cfg(target_os = "fuchsia")]
745    type SynchronousProxy = CrashListenerSynchronousProxy;
746
747    const DEBUG_NAME: &'static str = "(anonymous) CrashListener";
748}
749
750pub trait CrashListenerProxyInterface: Send + Sync {
751    type NextResponseFut: std::future::Future<Output = Result<Vec<String>, fidl::Error>> + Send;
752    fn r#next(&self) -> Self::NextResponseFut;
753}
754#[derive(Debug)]
755#[cfg(target_os = "fuchsia")]
756pub struct CrashListenerSynchronousProxy {
757    client: fidl::client::sync::Client,
758}
759
760#[cfg(target_os = "fuchsia")]
761impl fidl::endpoints::SynchronousProxy for CrashListenerSynchronousProxy {
762    type Proxy = CrashListenerProxy;
763    type Protocol = CrashListenerMarker;
764
765    fn from_channel(inner: fidl::Channel) -> Self {
766        Self::new(inner)
767    }
768
769    fn into_channel(self) -> fidl::Channel {
770        self.client.into_channel()
771    }
772
773    fn as_channel(&self) -> &fidl::Channel {
774        self.client.as_channel()
775    }
776}
777
778#[cfg(target_os = "fuchsia")]
779impl CrashListenerSynchronousProxy {
780    pub fn new(channel: fidl::Channel) -> Self {
781        Self { client: fidl::client::sync::Client::new(channel) }
782    }
783
784    pub fn into_channel(self) -> fidl::Channel {
785        self.client.into_channel()
786    }
787
788    /// Waits until an event arrives and returns it. It is safe for other
789    /// threads to make concurrent requests while waiting for an event.
790    pub fn wait_for_event(
791        &self,
792        deadline: zx::MonotonicInstant,
793    ) -> Result<CrashListenerEvent, fidl::Error> {
794        CrashListenerEvent::decode(self.client.wait_for_event::<CrashListenerMarker>(deadline)?)
795    }
796
797    /// A hanging get call that yields component monikers (relative to the
798    /// [`ManagedRealm`] root) that exited with dirty exit codes.
799    ///
800    /// Yields an empty vector when the realm itself has terminated. The
801    /// listener server end is closed after yielding the empty sentinel.
802    pub fn r#next(&self, ___deadline: zx::MonotonicInstant) -> Result<Vec<String>, fidl::Error> {
803        let _response = self.client.send_query::<
804            fidl::encoding::EmptyPayload,
805            CrashListenerNextResponse,
806            CrashListenerMarker,
807        >(
808            (),
809            0x4ad26b66c3a90dfb,
810            fidl::encoding::DynamicFlags::empty(),
811            ___deadline,
812        )?;
813        Ok(_response.crashed_monikers)
814    }
815}
816
817#[cfg(target_os = "fuchsia")]
818impl From<CrashListenerSynchronousProxy> for zx::NullableHandle {
819    fn from(value: CrashListenerSynchronousProxy) -> Self {
820        value.into_channel().into()
821    }
822}
823
824#[cfg(target_os = "fuchsia")]
825impl From<fidl::Channel> for CrashListenerSynchronousProxy {
826    fn from(value: fidl::Channel) -> Self {
827        Self::new(value)
828    }
829}
830
831#[cfg(target_os = "fuchsia")]
832impl fidl::endpoints::FromClient for CrashListenerSynchronousProxy {
833    type Protocol = CrashListenerMarker;
834
835    fn from_client(value: fidl::endpoints::ClientEnd<CrashListenerMarker>) -> Self {
836        Self::new(value.into_channel())
837    }
838}
839
840#[derive(Debug, Clone)]
841pub struct CrashListenerProxy {
842    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
843}
844
845impl fidl::endpoints::Proxy for CrashListenerProxy {
846    type Protocol = CrashListenerMarker;
847
848    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
849        Self::new(inner)
850    }
851
852    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
853        self.client.into_channel().map_err(|client| Self { client })
854    }
855
856    fn as_channel(&self) -> &::fidl::AsyncChannel {
857        self.client.as_channel()
858    }
859}
860
861impl CrashListenerProxy {
862    /// Create a new Proxy for fuchsia.netemul/CrashListener.
863    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
864        let protocol_name = <CrashListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
865        Self { client: fidl::client::Client::new(channel, protocol_name) }
866    }
867
868    /// Get a Stream of events from the remote end of the protocol.
869    ///
870    /// # Panics
871    ///
872    /// Panics if the event stream was already taken.
873    pub fn take_event_stream(&self) -> CrashListenerEventStream {
874        CrashListenerEventStream { event_receiver: self.client.take_event_receiver() }
875    }
876
877    /// A hanging get call that yields component monikers (relative to the
878    /// [`ManagedRealm`] root) that exited with dirty exit codes.
879    ///
880    /// Yields an empty vector when the realm itself has terminated. The
881    /// listener server end is closed after yielding the empty sentinel.
882    pub fn r#next(
883        &self,
884    ) -> fidl::client::QueryResponseFut<Vec<String>, fidl::encoding::DefaultFuchsiaResourceDialect>
885    {
886        CrashListenerProxyInterface::r#next(self)
887    }
888}
889
890impl CrashListenerProxyInterface for CrashListenerProxy {
891    type NextResponseFut =
892        fidl::client::QueryResponseFut<Vec<String>, fidl::encoding::DefaultFuchsiaResourceDialect>;
893    fn r#next(&self) -> Self::NextResponseFut {
894        fn _decode(
895            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
896        ) -> Result<Vec<String>, fidl::Error> {
897            let _response = fidl::client::decode_transaction_body::<
898                CrashListenerNextResponse,
899                fidl::encoding::DefaultFuchsiaResourceDialect,
900                0x4ad26b66c3a90dfb,
901            >(_buf?)?;
902            Ok(_response.crashed_monikers)
903        }
904        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, Vec<String>>(
905            (),
906            0x4ad26b66c3a90dfb,
907            fidl::encoding::DynamicFlags::empty(),
908            _decode,
909        )
910    }
911}
912
913pub struct CrashListenerEventStream {
914    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
915}
916
917impl std::marker::Unpin for CrashListenerEventStream {}
918
919impl futures::stream::FusedStream for CrashListenerEventStream {
920    fn is_terminated(&self) -> bool {
921        self.event_receiver.is_terminated()
922    }
923}
924
925impl futures::Stream for CrashListenerEventStream {
926    type Item = Result<CrashListenerEvent, 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(CrashListenerEvent::decode(buf))),
937            None => std::task::Poll::Ready(None),
938        }
939    }
940}
941
942#[derive(Debug)]
943pub enum CrashListenerEvent {}
944
945impl CrashListenerEvent {
946    /// Decodes a message buffer as a [`CrashListenerEvent`].
947    fn decode(
948        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
949    ) -> Result<CrashListenerEvent, 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: <CrashListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
957            }),
958        }
959    }
960}
961
962/// A Stream of incoming requests for fuchsia.netemul/CrashListener.
963pub struct CrashListenerRequestStream {
964    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
965    is_terminated: bool,
966}
967
968impl std::marker::Unpin for CrashListenerRequestStream {}
969
970impl futures::stream::FusedStream for CrashListenerRequestStream {
971    fn is_terminated(&self) -> bool {
972        self.is_terminated
973    }
974}
975
976impl fidl::endpoints::RequestStream for CrashListenerRequestStream {
977    type Protocol = CrashListenerMarker;
978    type ControlHandle = CrashListenerControlHandle;
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        CrashListenerControlHandle { 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 CrashListenerRequestStream {
1004    type Item = Result<CrashListenerRequest, 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 CrashListenerRequestStream 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                    0x4ad26b66c3a90dfb => {
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 =
1046                            CrashListenerControlHandle { inner: this.inner.clone() };
1047                        Ok(CrashListenerRequest::Next {
1048                            responder: CrashListenerNextResponder {
1049                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1050                                tx_id: header.tx_id,
1051                            },
1052                        })
1053                    }
1054                    _ => Err(fidl::Error::UnknownOrdinal {
1055                        ordinal: header.ordinal,
1056                        protocol_name:
1057                            <CrashListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1058                    }),
1059                }))
1060            },
1061        )
1062    }
1063}
1064
1065/// A listener that yields component monikers that have exited uncleanly.
1066///
1067/// `CrashListener` is always scoped to a [`ManagedRealm`].
1068#[derive(Debug)]
1069pub enum CrashListenerRequest {
1070    /// A hanging get call that yields component monikers (relative to the
1071    /// [`ManagedRealm`] root) that exited with dirty exit codes.
1072    ///
1073    /// Yields an empty vector when the realm itself has terminated. The
1074    /// listener server end is closed after yielding the empty sentinel.
1075    Next { responder: CrashListenerNextResponder },
1076}
1077
1078impl CrashListenerRequest {
1079    #[allow(irrefutable_let_patterns)]
1080    pub fn into_next(self) -> Option<(CrashListenerNextResponder)> {
1081        if let CrashListenerRequest::Next { responder } = self { Some((responder)) } else { None }
1082    }
1083
1084    /// Name of the method defined in FIDL
1085    pub fn method_name(&self) -> &'static str {
1086        match *self {
1087            CrashListenerRequest::Next { .. } => "next",
1088        }
1089    }
1090}
1091
1092#[derive(Debug, Clone)]
1093pub struct CrashListenerControlHandle {
1094    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1095}
1096
1097impl CrashListenerControlHandle {
1098    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1099        self.inner.shutdown_with_epitaph(status.into())
1100    }
1101}
1102
1103impl fidl::endpoints::ControlHandle for CrashListenerControlHandle {
1104    fn shutdown(&self) {
1105        self.inner.shutdown()
1106    }
1107
1108    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1109        self.inner.shutdown_with_epitaph(status)
1110    }
1111
1112    fn is_closed(&self) -> bool {
1113        self.inner.channel().is_closed()
1114    }
1115    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1116        self.inner.channel().on_closed()
1117    }
1118
1119    #[cfg(target_os = "fuchsia")]
1120    fn signal_peer(
1121        &self,
1122        clear_mask: zx::Signals,
1123        set_mask: zx::Signals,
1124    ) -> Result<(), zx_status::Status> {
1125        use fidl::Peered;
1126        self.inner.channel().signal_peer(clear_mask, set_mask)
1127    }
1128}
1129
1130impl CrashListenerControlHandle {}
1131
1132#[must_use = "FIDL methods require a response to be sent"]
1133#[derive(Debug)]
1134pub struct CrashListenerNextResponder {
1135    control_handle: std::mem::ManuallyDrop<CrashListenerControlHandle>,
1136    tx_id: u32,
1137}
1138
1139/// Set the the channel to be shutdown (see [`CrashListenerControlHandle::shutdown`])
1140/// if the responder is dropped without sending a response, so that the client
1141/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1142impl std::ops::Drop for CrashListenerNextResponder {
1143    fn drop(&mut self) {
1144        self.control_handle.shutdown();
1145        // Safety: drops once, never accessed again
1146        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1147    }
1148}
1149
1150impl fidl::endpoints::Responder for CrashListenerNextResponder {
1151    type ControlHandle = CrashListenerControlHandle;
1152
1153    fn control_handle(&self) -> &CrashListenerControlHandle {
1154        &self.control_handle
1155    }
1156
1157    fn drop_without_shutdown(mut self) {
1158        // Safety: drops once, never accessed again due to mem::forget
1159        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1160        // Prevent Drop from running (which would shut down the channel)
1161        std::mem::forget(self);
1162    }
1163}
1164
1165impl CrashListenerNextResponder {
1166    /// Sends a response to the FIDL transaction.
1167    ///
1168    /// Sets the channel to shutdown if an error occurs.
1169    pub fn send(self, mut crashed_monikers: &[String]) -> Result<(), fidl::Error> {
1170        let _result = self.send_raw(crashed_monikers);
1171        if _result.is_err() {
1172            self.control_handle.shutdown();
1173        }
1174        self.drop_without_shutdown();
1175        _result
1176    }
1177
1178    /// Similar to "send" but does not shutdown the channel if an error occurs.
1179    pub fn send_no_shutdown_on_err(
1180        self,
1181        mut crashed_monikers: &[String],
1182    ) -> Result<(), fidl::Error> {
1183        let _result = self.send_raw(crashed_monikers);
1184        self.drop_without_shutdown();
1185        _result
1186    }
1187
1188    fn send_raw(&self, mut crashed_monikers: &[String]) -> Result<(), fidl::Error> {
1189        self.control_handle.inner.send::<CrashListenerNextResponse>(
1190            (crashed_monikers,),
1191            self.tx_id,
1192            0x4ad26b66c3a90dfb,
1193            fidl::encoding::DynamicFlags::empty(),
1194        )
1195    }
1196}
1197
1198#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1199pub struct ManagedRealmMarker;
1200
1201impl fidl::endpoints::ProtocolMarker for ManagedRealmMarker {
1202    type Proxy = ManagedRealmProxy;
1203    type RequestStream = ManagedRealmRequestStream;
1204    #[cfg(target_os = "fuchsia")]
1205    type SynchronousProxy = ManagedRealmSynchronousProxy;
1206
1207    const DEBUG_NAME: &'static str = "(anonymous) ManagedRealm";
1208}
1209pub type ManagedRealmAddDeviceResult = Result<(), i32>;
1210pub type ManagedRealmRemoveDeviceResult = Result<(), i32>;
1211pub type ManagedRealmStartChildComponentResult = Result<(), i32>;
1212pub type ManagedRealmStopChildComponentResult = Result<(), i32>;
1213
1214pub trait ManagedRealmProxyInterface: Send + Sync {
1215    type GetMonikerResponseFut: std::future::Future<Output = Result<String, fidl::Error>> + Send;
1216    fn r#get_moniker(&self) -> Self::GetMonikerResponseFut;
1217    fn r#connect_to_protocol(
1218        &self,
1219        protocol_name: &str,
1220        child_name: Option<&str>,
1221        req: fidl::Channel,
1222    ) -> Result<(), fidl::Error>;
1223    fn r#connect_to_service(
1224        &self,
1225        service_name: &str,
1226        child_name: Option<&str>,
1227        req: fidl::Channel,
1228    ) -> Result<(), fidl::Error>;
1229    type AddDeviceResponseFut: std::future::Future<Output = Result<ManagedRealmAddDeviceResult, fidl::Error>>
1230        + Send;
1231    fn r#add_device(
1232        &self,
1233        path: &str,
1234        device: fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
1235    ) -> Self::AddDeviceResponseFut;
1236    type RemoveDeviceResponseFut: std::future::Future<Output = Result<ManagedRealmRemoveDeviceResult, fidl::Error>>
1237        + Send;
1238    fn r#remove_device(&self, path: &str) -> Self::RemoveDeviceResponseFut;
1239    fn r#get_devfs(
1240        &self,
1241        devfs: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1242    ) -> Result<(), fidl::Error>;
1243    type StartChildComponentResponseFut: std::future::Future<Output = Result<ManagedRealmStartChildComponentResult, fidl::Error>>
1244        + Send;
1245    fn r#start_child_component(&self, child_name: &str) -> Self::StartChildComponentResponseFut;
1246    type StopChildComponentResponseFut: std::future::Future<Output = Result<ManagedRealmStopChildComponentResult, fidl::Error>>
1247        + Send;
1248    fn r#stop_child_component(&self, child_name: &str) -> Self::StopChildComponentResponseFut;
1249    fn r#shutdown(&self) -> Result<(), fidl::Error>;
1250    fn r#open_diagnostics_directory(
1251        &self,
1252        child_name: &str,
1253        directory: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1254    ) -> Result<(), fidl::Error>;
1255    fn r#get_crash_listener(
1256        &self,
1257        listener: fidl::endpoints::ServerEnd<CrashListenerMarker>,
1258    ) -> Result<(), fidl::Error>;
1259}
1260#[derive(Debug)]
1261#[cfg(target_os = "fuchsia")]
1262pub struct ManagedRealmSynchronousProxy {
1263    client: fidl::client::sync::Client,
1264}
1265
1266#[cfg(target_os = "fuchsia")]
1267impl fidl::endpoints::SynchronousProxy for ManagedRealmSynchronousProxy {
1268    type Proxy = ManagedRealmProxy;
1269    type Protocol = ManagedRealmMarker;
1270
1271    fn from_channel(inner: fidl::Channel) -> Self {
1272        Self::new(inner)
1273    }
1274
1275    fn into_channel(self) -> fidl::Channel {
1276        self.client.into_channel()
1277    }
1278
1279    fn as_channel(&self) -> &fidl::Channel {
1280        self.client.as_channel()
1281    }
1282}
1283
1284#[cfg(target_os = "fuchsia")]
1285impl ManagedRealmSynchronousProxy {
1286    pub fn new(channel: fidl::Channel) -> Self {
1287        Self { client: fidl::client::sync::Client::new(channel) }
1288    }
1289
1290    pub fn into_channel(self) -> fidl::Channel {
1291        self.client.into_channel()
1292    }
1293
1294    /// Waits until an event arrives and returns it. It is safe for other
1295    /// threads to make concurrent requests while waiting for an event.
1296    pub fn wait_for_event(
1297        &self,
1298        deadline: zx::MonotonicInstant,
1299    ) -> Result<ManagedRealmEvent, fidl::Error> {
1300        ManagedRealmEvent::decode(self.client.wait_for_event::<ManagedRealmMarker>(deadline)?)
1301    }
1302
1303    /// Returns the moniker of the root of the managed realm.
1304    ///
1305    /// - response `moniker` the moniker of the root of the generated
1306    ///     topology that contains this realm's child components.
1307    pub fn r#get_moniker(&self, ___deadline: zx::MonotonicInstant) -> Result<String, fidl::Error> {
1308        let _response = self.client.send_query::<
1309            fidl::encoding::EmptyPayload,
1310            ManagedRealmGetMonikerResponse,
1311            ManagedRealmMarker,
1312        >(
1313            (),
1314            0xec8f2bf894ddc5f,
1315            fidl::encoding::DynamicFlags::empty(),
1316            ___deadline,
1317        )?;
1318        Ok(_response.moniker)
1319    }
1320
1321    /// Connects to a protocol named `protocol_name` provided by a child in this
1322    /// realm.
1323    ///
1324    /// If `child_name` is not provided, connects to the first child offering
1325    /// `protocol_name`.
1326    ///
1327    /// + request `protocol_name` the name of the protocol to connect to.
1328    /// + request `child_name` the name of the child component that is exposing
1329    ///     the requested protocol.
1330    /// + request `req` a channel to be bound to an implementation of the
1331    ///     protocol.
1332    pub fn r#connect_to_protocol(
1333        &self,
1334        mut protocol_name: &str,
1335        mut child_name: Option<&str>,
1336        mut req: fidl::Channel,
1337    ) -> Result<(), fidl::Error> {
1338        self.client.send::<ManagedRealmConnectToProtocolRequest>(
1339            (protocol_name, child_name, req),
1340            0x20865b728239813d,
1341            fidl::encoding::DynamicFlags::empty(),
1342        )
1343    }
1344
1345    /// Connects to a service named `service_name` provided by a child in this
1346    /// realm.
1347    ///
1348    /// If `child_name` is not provided, connects to the first child offering
1349    /// `service_name`.
1350    ///
1351    /// + request `service_name` the name of the service to connect to.
1352    /// + request `child_name` the name of the child component that is exposing
1353    ///     the requested service.
1354    /// + request `req` a channel to be bound to the service directory.
1355    pub fn r#connect_to_service(
1356        &self,
1357        mut service_name: &str,
1358        mut child_name: Option<&str>,
1359        mut req: fidl::Channel,
1360    ) -> Result<(), fidl::Error> {
1361        self.client.send::<ManagedRealmConnectToServiceRequest>(
1362            (service_name, child_name, req),
1363            0x1cfd66bc614daf6a,
1364            fidl::encoding::DynamicFlags::empty(),
1365        )
1366    }
1367
1368    /// Mounts new virtual device `device` on netemul's `devfs` instance within
1369    /// this realm.
1370    ///
1371    /// This `devfs` instance is available to components that have the
1372    /// [`Capability.netemul_devfs`] capability.
1373    ///
1374    /// + request `path` relative path from `devfs` root to the virtual device
1375    ///     to be added to the realm.
1376    /// + request `device` virtual device server.
1377    /// * error `ZX_ERR_ALREADY_EXISTS` if `device.path` is already in use.
1378    /// * error `ZX_ERR_INVALID_ARGS` if an element of `path` exceeds
1379    ///     [`fuchsia.io/MAX_FILENAME`] bytes in length.
1380    pub fn r#add_device(
1381        &self,
1382        mut path: &str,
1383        mut device: fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
1384        ___deadline: zx::MonotonicInstant,
1385    ) -> Result<ManagedRealmAddDeviceResult, fidl::Error> {
1386        let _response = self.client.send_query::<
1387            ManagedRealmAddDeviceRequest,
1388            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1389            ManagedRealmMarker,
1390        >(
1391            (path, device,),
1392            0x789925e6f5d47c07,
1393            fidl::encoding::DynamicFlags::empty(),
1394            ___deadline,
1395        )?;
1396        Ok(_response.map(|x| x))
1397    }
1398
1399    /// Removes virtual device mounted at `path`.
1400    ///
1401    /// + request `path` the path to virtual device to be removed from the
1402    ///     realm, relative to `devfs` root.
1403    /// * error `ZX_ERR_NOT_FOUND` if `path` is not currently bound to a device.
1404    /// * error `ZX_ERR_INVALID_ARGS` if an element of `path` exceeds
1405    ///     [`fuchsia.io/MAX_FILENAME`] bytes in length.
1406    pub fn r#remove_device(
1407        &self,
1408        mut path: &str,
1409        ___deadline: zx::MonotonicInstant,
1410    ) -> Result<ManagedRealmRemoveDeviceResult, fidl::Error> {
1411        let _response = self.client.send_query::<
1412            ManagedRealmRemoveDeviceRequest,
1413            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1414            ManagedRealmMarker,
1415        >(
1416            (path,),
1417            0x6cffbba70ac757cc,
1418            fidl::encoding::DynamicFlags::empty(),
1419            ___deadline,
1420        )?;
1421        Ok(_response.map(|x| x))
1422    }
1423
1424    /// Connects to netemul's `devfs` instance for this realm.
1425    ///
1426    /// + request `devfs` request handle to the `devfs` directory.
1427    pub fn r#get_devfs(
1428        &self,
1429        mut devfs: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1430    ) -> Result<(), fidl::Error> {
1431        self.client.send::<ManagedRealmGetDevfsRequest>(
1432            (devfs,),
1433            0x707e2b17f65fcadc,
1434            fidl::encoding::DynamicFlags::empty(),
1435        )
1436    }
1437
1438    /// Starts the specified child component in this realm. Starting an already
1439    /// running child component is a no-op and returns success.
1440    ///
1441    /// + request `child_name` the name of the child component to be started.
1442    /// * error `ZX_ERR_NOT_FOUND` if `child_name` is not a child component in
1443    ///     this realm.
1444    /// * error `ZX_ERR_INVALID_ARGS` if `child_name` cannot be composed into a
1445    ///     well-formed moniker.
1446    /// * error `ZX_ERR_INTERNAL` if the call to the service dependency fails.
1447    pub fn r#start_child_component(
1448        &self,
1449        mut child_name: &str,
1450        ___deadline: zx::MonotonicInstant,
1451    ) -> Result<ManagedRealmStartChildComponentResult, fidl::Error> {
1452        let _response = self.client.send_query::<
1453            ManagedRealmStartChildComponentRequest,
1454            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1455            ManagedRealmMarker,
1456        >(
1457            (child_name,),
1458            0x20dfa243752906a1,
1459            fidl::encoding::DynamicFlags::empty(),
1460            ___deadline,
1461        )?;
1462        Ok(_response.map(|x| x))
1463    }
1464
1465    /// Stops the specified child component in this realm. Stopping an already
1466    /// stopped child component is a no-op and returns success.
1467    ///
1468    /// + request `child_name` the name of the child component to be stopped.
1469    /// * error `ZX_ERR_NOT_FOUND` if `child_name` is not a child component in
1470    ///     this realm.
1471    /// * error `ZX_ERR_INVALID_ARGS` if `child_name` cannot be composed into a
1472    ///     well-formed moniker.
1473    /// * error `ZX_ERR_INTERNAL` if the call to the service dependency fails.
1474    pub fn r#stop_child_component(
1475        &self,
1476        mut child_name: &str,
1477        ___deadline: zx::MonotonicInstant,
1478    ) -> Result<ManagedRealmStopChildComponentResult, fidl::Error> {
1479        let _response = self.client.send_query::<
1480            ManagedRealmStopChildComponentRequest,
1481            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1482            ManagedRealmMarker,
1483        >(
1484            (child_name,),
1485            0x5ecfe48430aeeca7,
1486            fidl::encoding::DynamicFlags::empty(),
1487            ___deadline,
1488        )?;
1489        Ok(_response.map(|x| x))
1490    }
1491
1492    /// Request that the managed realm shut down.
1493    ///
1494    /// The realm will send an `OnShutdown` event when shutdown is complete and
1495    /// before closing the channel.
1496    pub fn r#shutdown(&self) -> Result<(), fidl::Error> {
1497        self.client.send::<fidl::encoding::EmptyPayload>(
1498            (),
1499            0x4750920f723fba9d,
1500            fidl::encoding::DynamicFlags::empty(),
1501        )
1502    }
1503
1504    /// Opens the diagnostics directory exposed by the component `child_name`.
1505    pub fn r#open_diagnostics_directory(
1506        &self,
1507        mut child_name: &str,
1508        mut directory: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1509    ) -> Result<(), fidl::Error> {
1510        self.client.send::<ManagedRealmOpenDiagnosticsDirectoryRequest>(
1511            (child_name, directory),
1512            0x7c5312484aa41c99,
1513            fidl::encoding::DynamicFlags::empty(),
1514        )
1515    }
1516
1517    /// Creates a new [`CrashListener`] instance scoped to this realm.
1518    pub fn r#get_crash_listener(
1519        &self,
1520        mut listener: fidl::endpoints::ServerEnd<CrashListenerMarker>,
1521    ) -> Result<(), fidl::Error> {
1522        self.client.send::<ManagedRealmGetCrashListenerRequest>(
1523            (listener,),
1524            0x407bab14357e8913,
1525            fidl::encoding::DynamicFlags::empty(),
1526        )
1527    }
1528}
1529
1530#[cfg(target_os = "fuchsia")]
1531impl From<ManagedRealmSynchronousProxy> for zx::NullableHandle {
1532    fn from(value: ManagedRealmSynchronousProxy) -> Self {
1533        value.into_channel().into()
1534    }
1535}
1536
1537#[cfg(target_os = "fuchsia")]
1538impl From<fidl::Channel> for ManagedRealmSynchronousProxy {
1539    fn from(value: fidl::Channel) -> Self {
1540        Self::new(value)
1541    }
1542}
1543
1544#[cfg(target_os = "fuchsia")]
1545impl fidl::endpoints::FromClient for ManagedRealmSynchronousProxy {
1546    type Protocol = ManagedRealmMarker;
1547
1548    fn from_client(value: fidl::endpoints::ClientEnd<ManagedRealmMarker>) -> Self {
1549        Self::new(value.into_channel())
1550    }
1551}
1552
1553#[derive(Debug, Clone)]
1554pub struct ManagedRealmProxy {
1555    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1556}
1557
1558impl fidl::endpoints::Proxy for ManagedRealmProxy {
1559    type Protocol = ManagedRealmMarker;
1560
1561    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1562        Self::new(inner)
1563    }
1564
1565    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1566        self.client.into_channel().map_err(|client| Self { client })
1567    }
1568
1569    fn as_channel(&self) -> &::fidl::AsyncChannel {
1570        self.client.as_channel()
1571    }
1572}
1573
1574impl ManagedRealmProxy {
1575    /// Create a new Proxy for fuchsia.netemul/ManagedRealm.
1576    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1577        let protocol_name = <ManagedRealmMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1578        Self { client: fidl::client::Client::new(channel, protocol_name) }
1579    }
1580
1581    /// Get a Stream of events from the remote end of the protocol.
1582    ///
1583    /// # Panics
1584    ///
1585    /// Panics if the event stream was already taken.
1586    pub fn take_event_stream(&self) -> ManagedRealmEventStream {
1587        ManagedRealmEventStream { event_receiver: self.client.take_event_receiver() }
1588    }
1589
1590    /// Returns the moniker of the root of the managed realm.
1591    ///
1592    /// - response `moniker` the moniker of the root of the generated
1593    ///     topology that contains this realm's child components.
1594    pub fn r#get_moniker(
1595        &self,
1596    ) -> fidl::client::QueryResponseFut<String, fidl::encoding::DefaultFuchsiaResourceDialect> {
1597        ManagedRealmProxyInterface::r#get_moniker(self)
1598    }
1599
1600    /// Connects to a protocol named `protocol_name` provided by a child in this
1601    /// realm.
1602    ///
1603    /// If `child_name` is not provided, connects to the first child offering
1604    /// `protocol_name`.
1605    ///
1606    /// + request `protocol_name` the name of the protocol to connect to.
1607    /// + request `child_name` the name of the child component that is exposing
1608    ///     the requested protocol.
1609    /// + request `req` a channel to be bound to an implementation of the
1610    ///     protocol.
1611    pub fn r#connect_to_protocol(
1612        &self,
1613        mut protocol_name: &str,
1614        mut child_name: Option<&str>,
1615        mut req: fidl::Channel,
1616    ) -> Result<(), fidl::Error> {
1617        ManagedRealmProxyInterface::r#connect_to_protocol(self, protocol_name, child_name, req)
1618    }
1619
1620    /// Connects to a service named `service_name` provided by a child in this
1621    /// realm.
1622    ///
1623    /// If `child_name` is not provided, connects to the first child offering
1624    /// `service_name`.
1625    ///
1626    /// + request `service_name` the name of the service to connect to.
1627    /// + request `child_name` the name of the child component that is exposing
1628    ///     the requested service.
1629    /// + request `req` a channel to be bound to the service directory.
1630    pub fn r#connect_to_service(
1631        &self,
1632        mut service_name: &str,
1633        mut child_name: Option<&str>,
1634        mut req: fidl::Channel,
1635    ) -> Result<(), fidl::Error> {
1636        ManagedRealmProxyInterface::r#connect_to_service(self, service_name, child_name, req)
1637    }
1638
1639    /// Mounts new virtual device `device` on netemul's `devfs` instance within
1640    /// this realm.
1641    ///
1642    /// This `devfs` instance is available to components that have the
1643    /// [`Capability.netemul_devfs`] capability.
1644    ///
1645    /// + request `path` relative path from `devfs` root to the virtual device
1646    ///     to be added to the realm.
1647    /// + request `device` virtual device server.
1648    /// * error `ZX_ERR_ALREADY_EXISTS` if `device.path` is already in use.
1649    /// * error `ZX_ERR_INVALID_ARGS` if an element of `path` exceeds
1650    ///     [`fuchsia.io/MAX_FILENAME`] bytes in length.
1651    pub fn r#add_device(
1652        &self,
1653        mut path: &str,
1654        mut device: fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
1655    ) -> fidl::client::QueryResponseFut<
1656        ManagedRealmAddDeviceResult,
1657        fidl::encoding::DefaultFuchsiaResourceDialect,
1658    > {
1659        ManagedRealmProxyInterface::r#add_device(self, path, device)
1660    }
1661
1662    /// Removes virtual device mounted at `path`.
1663    ///
1664    /// + request `path` the path to virtual device to be removed from the
1665    ///     realm, relative to `devfs` root.
1666    /// * error `ZX_ERR_NOT_FOUND` if `path` is not currently bound to a device.
1667    /// * error `ZX_ERR_INVALID_ARGS` if an element of `path` exceeds
1668    ///     [`fuchsia.io/MAX_FILENAME`] bytes in length.
1669    pub fn r#remove_device(
1670        &self,
1671        mut path: &str,
1672    ) -> fidl::client::QueryResponseFut<
1673        ManagedRealmRemoveDeviceResult,
1674        fidl::encoding::DefaultFuchsiaResourceDialect,
1675    > {
1676        ManagedRealmProxyInterface::r#remove_device(self, path)
1677    }
1678
1679    /// Connects to netemul's `devfs` instance for this realm.
1680    ///
1681    /// + request `devfs` request handle to the `devfs` directory.
1682    pub fn r#get_devfs(
1683        &self,
1684        mut devfs: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1685    ) -> Result<(), fidl::Error> {
1686        ManagedRealmProxyInterface::r#get_devfs(self, devfs)
1687    }
1688
1689    /// Starts the specified child component in this realm. Starting an already
1690    /// running child component is a no-op and returns success.
1691    ///
1692    /// + request `child_name` the name of the child component to be started.
1693    /// * error `ZX_ERR_NOT_FOUND` if `child_name` is not a child component in
1694    ///     this realm.
1695    /// * error `ZX_ERR_INVALID_ARGS` if `child_name` cannot be composed into a
1696    ///     well-formed moniker.
1697    /// * error `ZX_ERR_INTERNAL` if the call to the service dependency fails.
1698    pub fn r#start_child_component(
1699        &self,
1700        mut child_name: &str,
1701    ) -> fidl::client::QueryResponseFut<
1702        ManagedRealmStartChildComponentResult,
1703        fidl::encoding::DefaultFuchsiaResourceDialect,
1704    > {
1705        ManagedRealmProxyInterface::r#start_child_component(self, child_name)
1706    }
1707
1708    /// Stops the specified child component in this realm. Stopping an already
1709    /// stopped child component is a no-op and returns success.
1710    ///
1711    /// + request `child_name` the name of the child component to be stopped.
1712    /// * error `ZX_ERR_NOT_FOUND` if `child_name` is not a child component in
1713    ///     this realm.
1714    /// * error `ZX_ERR_INVALID_ARGS` if `child_name` cannot be composed into a
1715    ///     well-formed moniker.
1716    /// * error `ZX_ERR_INTERNAL` if the call to the service dependency fails.
1717    pub fn r#stop_child_component(
1718        &self,
1719        mut child_name: &str,
1720    ) -> fidl::client::QueryResponseFut<
1721        ManagedRealmStopChildComponentResult,
1722        fidl::encoding::DefaultFuchsiaResourceDialect,
1723    > {
1724        ManagedRealmProxyInterface::r#stop_child_component(self, child_name)
1725    }
1726
1727    /// Request that the managed realm shut down.
1728    ///
1729    /// The realm will send an `OnShutdown` event when shutdown is complete and
1730    /// before closing the channel.
1731    pub fn r#shutdown(&self) -> Result<(), fidl::Error> {
1732        ManagedRealmProxyInterface::r#shutdown(self)
1733    }
1734
1735    /// Opens the diagnostics directory exposed by the component `child_name`.
1736    pub fn r#open_diagnostics_directory(
1737        &self,
1738        mut child_name: &str,
1739        mut directory: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1740    ) -> Result<(), fidl::Error> {
1741        ManagedRealmProxyInterface::r#open_diagnostics_directory(self, child_name, directory)
1742    }
1743
1744    /// Creates a new [`CrashListener`] instance scoped to this realm.
1745    pub fn r#get_crash_listener(
1746        &self,
1747        mut listener: fidl::endpoints::ServerEnd<CrashListenerMarker>,
1748    ) -> Result<(), fidl::Error> {
1749        ManagedRealmProxyInterface::r#get_crash_listener(self, listener)
1750    }
1751}
1752
1753impl ManagedRealmProxyInterface for ManagedRealmProxy {
1754    type GetMonikerResponseFut =
1755        fidl::client::QueryResponseFut<String, fidl::encoding::DefaultFuchsiaResourceDialect>;
1756    fn r#get_moniker(&self) -> Self::GetMonikerResponseFut {
1757        fn _decode(
1758            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1759        ) -> Result<String, fidl::Error> {
1760            let _response = fidl::client::decode_transaction_body::<
1761                ManagedRealmGetMonikerResponse,
1762                fidl::encoding::DefaultFuchsiaResourceDialect,
1763                0xec8f2bf894ddc5f,
1764            >(_buf?)?;
1765            Ok(_response.moniker)
1766        }
1767        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, String>(
1768            (),
1769            0xec8f2bf894ddc5f,
1770            fidl::encoding::DynamicFlags::empty(),
1771            _decode,
1772        )
1773    }
1774
1775    fn r#connect_to_protocol(
1776        &self,
1777        mut protocol_name: &str,
1778        mut child_name: Option<&str>,
1779        mut req: fidl::Channel,
1780    ) -> Result<(), fidl::Error> {
1781        self.client.send::<ManagedRealmConnectToProtocolRequest>(
1782            (protocol_name, child_name, req),
1783            0x20865b728239813d,
1784            fidl::encoding::DynamicFlags::empty(),
1785        )
1786    }
1787
1788    fn r#connect_to_service(
1789        &self,
1790        mut service_name: &str,
1791        mut child_name: Option<&str>,
1792        mut req: fidl::Channel,
1793    ) -> Result<(), fidl::Error> {
1794        self.client.send::<ManagedRealmConnectToServiceRequest>(
1795            (service_name, child_name, req),
1796            0x1cfd66bc614daf6a,
1797            fidl::encoding::DynamicFlags::empty(),
1798        )
1799    }
1800
1801    type AddDeviceResponseFut = fidl::client::QueryResponseFut<
1802        ManagedRealmAddDeviceResult,
1803        fidl::encoding::DefaultFuchsiaResourceDialect,
1804    >;
1805    fn r#add_device(
1806        &self,
1807        mut path: &str,
1808        mut device: fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
1809    ) -> Self::AddDeviceResponseFut {
1810        fn _decode(
1811            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1812        ) -> Result<ManagedRealmAddDeviceResult, fidl::Error> {
1813            let _response = fidl::client::decode_transaction_body::<
1814                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1815                fidl::encoding::DefaultFuchsiaResourceDialect,
1816                0x789925e6f5d47c07,
1817            >(_buf?)?;
1818            Ok(_response.map(|x| x))
1819        }
1820        self.client
1821            .send_query_and_decode::<ManagedRealmAddDeviceRequest, ManagedRealmAddDeviceResult>(
1822                (path, device),
1823                0x789925e6f5d47c07,
1824                fidl::encoding::DynamicFlags::empty(),
1825                _decode,
1826            )
1827    }
1828
1829    type RemoveDeviceResponseFut = fidl::client::QueryResponseFut<
1830        ManagedRealmRemoveDeviceResult,
1831        fidl::encoding::DefaultFuchsiaResourceDialect,
1832    >;
1833    fn r#remove_device(&self, mut path: &str) -> Self::RemoveDeviceResponseFut {
1834        fn _decode(
1835            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1836        ) -> Result<ManagedRealmRemoveDeviceResult, fidl::Error> {
1837            let _response = fidl::client::decode_transaction_body::<
1838                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1839                fidl::encoding::DefaultFuchsiaResourceDialect,
1840                0x6cffbba70ac757cc,
1841            >(_buf?)?;
1842            Ok(_response.map(|x| x))
1843        }
1844        self.client.send_query_and_decode::<
1845            ManagedRealmRemoveDeviceRequest,
1846            ManagedRealmRemoveDeviceResult,
1847        >(
1848            (path,),
1849            0x6cffbba70ac757cc,
1850            fidl::encoding::DynamicFlags::empty(),
1851            _decode,
1852        )
1853    }
1854
1855    fn r#get_devfs(
1856        &self,
1857        mut devfs: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1858    ) -> Result<(), fidl::Error> {
1859        self.client.send::<ManagedRealmGetDevfsRequest>(
1860            (devfs,),
1861            0x707e2b17f65fcadc,
1862            fidl::encoding::DynamicFlags::empty(),
1863        )
1864    }
1865
1866    type StartChildComponentResponseFut = fidl::client::QueryResponseFut<
1867        ManagedRealmStartChildComponentResult,
1868        fidl::encoding::DefaultFuchsiaResourceDialect,
1869    >;
1870    fn r#start_child_component(
1871        &self,
1872        mut child_name: &str,
1873    ) -> Self::StartChildComponentResponseFut {
1874        fn _decode(
1875            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1876        ) -> Result<ManagedRealmStartChildComponentResult, fidl::Error> {
1877            let _response = fidl::client::decode_transaction_body::<
1878                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1879                fidl::encoding::DefaultFuchsiaResourceDialect,
1880                0x20dfa243752906a1,
1881            >(_buf?)?;
1882            Ok(_response.map(|x| x))
1883        }
1884        self.client.send_query_and_decode::<
1885            ManagedRealmStartChildComponentRequest,
1886            ManagedRealmStartChildComponentResult,
1887        >(
1888            (child_name,),
1889            0x20dfa243752906a1,
1890            fidl::encoding::DynamicFlags::empty(),
1891            _decode,
1892        )
1893    }
1894
1895    type StopChildComponentResponseFut = fidl::client::QueryResponseFut<
1896        ManagedRealmStopChildComponentResult,
1897        fidl::encoding::DefaultFuchsiaResourceDialect,
1898    >;
1899    fn r#stop_child_component(&self, mut child_name: &str) -> Self::StopChildComponentResponseFut {
1900        fn _decode(
1901            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1902        ) -> Result<ManagedRealmStopChildComponentResult, fidl::Error> {
1903            let _response = fidl::client::decode_transaction_body::<
1904                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
1905                fidl::encoding::DefaultFuchsiaResourceDialect,
1906                0x5ecfe48430aeeca7,
1907            >(_buf?)?;
1908            Ok(_response.map(|x| x))
1909        }
1910        self.client.send_query_and_decode::<
1911            ManagedRealmStopChildComponentRequest,
1912            ManagedRealmStopChildComponentResult,
1913        >(
1914            (child_name,),
1915            0x5ecfe48430aeeca7,
1916            fidl::encoding::DynamicFlags::empty(),
1917            _decode,
1918        )
1919    }
1920
1921    fn r#shutdown(&self) -> Result<(), fidl::Error> {
1922        self.client.send::<fidl::encoding::EmptyPayload>(
1923            (),
1924            0x4750920f723fba9d,
1925            fidl::encoding::DynamicFlags::empty(),
1926        )
1927    }
1928
1929    fn r#open_diagnostics_directory(
1930        &self,
1931        mut child_name: &str,
1932        mut directory: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
1933    ) -> Result<(), fidl::Error> {
1934        self.client.send::<ManagedRealmOpenDiagnosticsDirectoryRequest>(
1935            (child_name, directory),
1936            0x7c5312484aa41c99,
1937            fidl::encoding::DynamicFlags::empty(),
1938        )
1939    }
1940
1941    fn r#get_crash_listener(
1942        &self,
1943        mut listener: fidl::endpoints::ServerEnd<CrashListenerMarker>,
1944    ) -> Result<(), fidl::Error> {
1945        self.client.send::<ManagedRealmGetCrashListenerRequest>(
1946            (listener,),
1947            0x407bab14357e8913,
1948            fidl::encoding::DynamicFlags::empty(),
1949        )
1950    }
1951}
1952
1953pub struct ManagedRealmEventStream {
1954    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1955}
1956
1957impl std::marker::Unpin for ManagedRealmEventStream {}
1958
1959impl futures::stream::FusedStream for ManagedRealmEventStream {
1960    fn is_terminated(&self) -> bool {
1961        self.event_receiver.is_terminated()
1962    }
1963}
1964
1965impl futures::Stream for ManagedRealmEventStream {
1966    type Item = Result<ManagedRealmEvent, fidl::Error>;
1967
1968    fn poll_next(
1969        mut self: std::pin::Pin<&mut Self>,
1970        cx: &mut std::task::Context<'_>,
1971    ) -> std::task::Poll<Option<Self::Item>> {
1972        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1973            &mut self.event_receiver,
1974            cx
1975        )?) {
1976            Some(buf) => std::task::Poll::Ready(Some(ManagedRealmEvent::decode(buf))),
1977            None => std::task::Poll::Ready(None),
1978        }
1979    }
1980}
1981
1982#[derive(Debug)]
1983pub enum ManagedRealmEvent {
1984    OnShutdown {},
1985}
1986
1987impl ManagedRealmEvent {
1988    #[allow(irrefutable_let_patterns)]
1989    pub fn into_on_shutdown(self) -> Option<()> {
1990        if let ManagedRealmEvent::OnShutdown {} = self { Some(()) } else { None }
1991    }
1992
1993    /// Decodes a message buffer as a [`ManagedRealmEvent`].
1994    fn decode(
1995        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1996    ) -> Result<ManagedRealmEvent, fidl::Error> {
1997        let (bytes, _handles) = buf.split_mut();
1998        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1999        debug_assert_eq!(tx_header.tx_id, 0);
2000        match tx_header.ordinal {
2001            0x1dff0b58a5b546be => {
2002                let mut out = fidl::new_empty!(
2003                    fidl::encoding::EmptyPayload,
2004                    fidl::encoding::DefaultFuchsiaResourceDialect
2005                );
2006                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&tx_header, _body_bytes, _handles, &mut out)?;
2007                Ok((ManagedRealmEvent::OnShutdown {}))
2008            }
2009            _ => Err(fidl::Error::UnknownOrdinal {
2010                ordinal: tx_header.ordinal,
2011                protocol_name: <ManagedRealmMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2012            }),
2013        }
2014    }
2015}
2016
2017/// A Stream of incoming requests for fuchsia.netemul/ManagedRealm.
2018pub struct ManagedRealmRequestStream {
2019    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2020    is_terminated: bool,
2021}
2022
2023impl std::marker::Unpin for ManagedRealmRequestStream {}
2024
2025impl futures::stream::FusedStream for ManagedRealmRequestStream {
2026    fn is_terminated(&self) -> bool {
2027        self.is_terminated
2028    }
2029}
2030
2031impl fidl::endpoints::RequestStream for ManagedRealmRequestStream {
2032    type Protocol = ManagedRealmMarker;
2033    type ControlHandle = ManagedRealmControlHandle;
2034
2035    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2036        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2037    }
2038
2039    fn control_handle(&self) -> Self::ControlHandle {
2040        ManagedRealmControlHandle { inner: self.inner.clone() }
2041    }
2042
2043    fn into_inner(
2044        self,
2045    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2046    {
2047        (self.inner, self.is_terminated)
2048    }
2049
2050    fn from_inner(
2051        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2052        is_terminated: bool,
2053    ) -> Self {
2054        Self { inner, is_terminated }
2055    }
2056}
2057
2058impl futures::Stream for ManagedRealmRequestStream {
2059    type Item = Result<ManagedRealmRequest, fidl::Error>;
2060
2061    fn poll_next(
2062        mut self: std::pin::Pin<&mut Self>,
2063        cx: &mut std::task::Context<'_>,
2064    ) -> std::task::Poll<Option<Self::Item>> {
2065        let this = &mut *self;
2066        if this.inner.check_shutdown(cx) {
2067            this.is_terminated = true;
2068            return std::task::Poll::Ready(None);
2069        }
2070        if this.is_terminated {
2071            panic!("polled ManagedRealmRequestStream after completion");
2072        }
2073        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2074            |bytes, handles| {
2075                match this.inner.channel().read_etc(cx, bytes, handles) {
2076                    std::task::Poll::Ready(Ok(())) => {}
2077                    std::task::Poll::Pending => return std::task::Poll::Pending,
2078                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2079                        this.is_terminated = true;
2080                        return std::task::Poll::Ready(None);
2081                    }
2082                    std::task::Poll::Ready(Err(e)) => {
2083                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2084                            e.into(),
2085                        ))));
2086                    }
2087                }
2088
2089                // A message has been received from the channel
2090                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2091
2092                std::task::Poll::Ready(Some(match header.ordinal {
2093                    0xec8f2bf894ddc5f => {
2094                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2095                        let mut req = fidl::new_empty!(
2096                            fidl::encoding::EmptyPayload,
2097                            fidl::encoding::DefaultFuchsiaResourceDialect
2098                        );
2099                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
2100                        let control_handle =
2101                            ManagedRealmControlHandle { inner: this.inner.clone() };
2102                        Ok(ManagedRealmRequest::GetMoniker {
2103                            responder: ManagedRealmGetMonikerResponder {
2104                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2105                                tx_id: header.tx_id,
2106                            },
2107                        })
2108                    }
2109                    0x20865b728239813d => {
2110                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2111                        let mut req = fidl::new_empty!(
2112                            ManagedRealmConnectToProtocolRequest,
2113                            fidl::encoding::DefaultFuchsiaResourceDialect
2114                        );
2115                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmConnectToProtocolRequest>(&header, _body_bytes, handles, &mut req)?;
2116                        let control_handle =
2117                            ManagedRealmControlHandle { inner: this.inner.clone() };
2118                        Ok(ManagedRealmRequest::ConnectToProtocol {
2119                            protocol_name: req.protocol_name,
2120                            child_name: req.child_name,
2121                            req: req.req,
2122
2123                            control_handle,
2124                        })
2125                    }
2126                    0x1cfd66bc614daf6a => {
2127                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2128                        let mut req = fidl::new_empty!(
2129                            ManagedRealmConnectToServiceRequest,
2130                            fidl::encoding::DefaultFuchsiaResourceDialect
2131                        );
2132                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmConnectToServiceRequest>(&header, _body_bytes, handles, &mut req)?;
2133                        let control_handle =
2134                            ManagedRealmControlHandle { inner: this.inner.clone() };
2135                        Ok(ManagedRealmRequest::ConnectToService {
2136                            service_name: req.service_name,
2137                            child_name: req.child_name,
2138                            req: req.req,
2139
2140                            control_handle,
2141                        })
2142                    }
2143                    0x789925e6f5d47c07 => {
2144                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2145                        let mut req = fidl::new_empty!(
2146                            ManagedRealmAddDeviceRequest,
2147                            fidl::encoding::DefaultFuchsiaResourceDialect
2148                        );
2149                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmAddDeviceRequest>(&header, _body_bytes, handles, &mut req)?;
2150                        let control_handle =
2151                            ManagedRealmControlHandle { inner: this.inner.clone() };
2152                        Ok(ManagedRealmRequest::AddDevice {
2153                            path: req.path,
2154                            device: req.device,
2155
2156                            responder: ManagedRealmAddDeviceResponder {
2157                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2158                                tx_id: header.tx_id,
2159                            },
2160                        })
2161                    }
2162                    0x6cffbba70ac757cc => {
2163                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2164                        let mut req = fidl::new_empty!(
2165                            ManagedRealmRemoveDeviceRequest,
2166                            fidl::encoding::DefaultFuchsiaResourceDialect
2167                        );
2168                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmRemoveDeviceRequest>(&header, _body_bytes, handles, &mut req)?;
2169                        let control_handle =
2170                            ManagedRealmControlHandle { inner: this.inner.clone() };
2171                        Ok(ManagedRealmRequest::RemoveDevice {
2172                            path: req.path,
2173
2174                            responder: ManagedRealmRemoveDeviceResponder {
2175                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2176                                tx_id: header.tx_id,
2177                            },
2178                        })
2179                    }
2180                    0x707e2b17f65fcadc => {
2181                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2182                        let mut req = fidl::new_empty!(
2183                            ManagedRealmGetDevfsRequest,
2184                            fidl::encoding::DefaultFuchsiaResourceDialect
2185                        );
2186                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmGetDevfsRequest>(&header, _body_bytes, handles, &mut req)?;
2187                        let control_handle =
2188                            ManagedRealmControlHandle { inner: this.inner.clone() };
2189                        Ok(ManagedRealmRequest::GetDevfs { devfs: req.devfs, control_handle })
2190                    }
2191                    0x20dfa243752906a1 => {
2192                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2193                        let mut req = fidl::new_empty!(
2194                            ManagedRealmStartChildComponentRequest,
2195                            fidl::encoding::DefaultFuchsiaResourceDialect
2196                        );
2197                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmStartChildComponentRequest>(&header, _body_bytes, handles, &mut req)?;
2198                        let control_handle =
2199                            ManagedRealmControlHandle { inner: this.inner.clone() };
2200                        Ok(ManagedRealmRequest::StartChildComponent {
2201                            child_name: req.child_name,
2202
2203                            responder: ManagedRealmStartChildComponentResponder {
2204                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2205                                tx_id: header.tx_id,
2206                            },
2207                        })
2208                    }
2209                    0x5ecfe48430aeeca7 => {
2210                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2211                        let mut req = fidl::new_empty!(
2212                            ManagedRealmStopChildComponentRequest,
2213                            fidl::encoding::DefaultFuchsiaResourceDialect
2214                        );
2215                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmStopChildComponentRequest>(&header, _body_bytes, handles, &mut req)?;
2216                        let control_handle =
2217                            ManagedRealmControlHandle { inner: this.inner.clone() };
2218                        Ok(ManagedRealmRequest::StopChildComponent {
2219                            child_name: req.child_name,
2220
2221                            responder: ManagedRealmStopChildComponentResponder {
2222                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2223                                tx_id: header.tx_id,
2224                            },
2225                        })
2226                    }
2227                    0x4750920f723fba9d => {
2228                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2229                        let mut req = fidl::new_empty!(
2230                            fidl::encoding::EmptyPayload,
2231                            fidl::encoding::DefaultFuchsiaResourceDialect
2232                        );
2233                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
2234                        let control_handle =
2235                            ManagedRealmControlHandle { inner: this.inner.clone() };
2236                        Ok(ManagedRealmRequest::Shutdown { control_handle })
2237                    }
2238                    0x7c5312484aa41c99 => {
2239                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2240                        let mut req = fidl::new_empty!(
2241                            ManagedRealmOpenDiagnosticsDirectoryRequest,
2242                            fidl::encoding::DefaultFuchsiaResourceDialect
2243                        );
2244                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmOpenDiagnosticsDirectoryRequest>(&header, _body_bytes, handles, &mut req)?;
2245                        let control_handle =
2246                            ManagedRealmControlHandle { inner: this.inner.clone() };
2247                        Ok(ManagedRealmRequest::OpenDiagnosticsDirectory {
2248                            child_name: req.child_name,
2249                            directory: req.directory,
2250
2251                            control_handle,
2252                        })
2253                    }
2254                    0x407bab14357e8913 => {
2255                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2256                        let mut req = fidl::new_empty!(
2257                            ManagedRealmGetCrashListenerRequest,
2258                            fidl::encoding::DefaultFuchsiaResourceDialect
2259                        );
2260                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagedRealmGetCrashListenerRequest>(&header, _body_bytes, handles, &mut req)?;
2261                        let control_handle =
2262                            ManagedRealmControlHandle { inner: this.inner.clone() };
2263                        Ok(ManagedRealmRequest::GetCrashListener {
2264                            listener: req.listener,
2265
2266                            control_handle,
2267                        })
2268                    }
2269                    _ => Err(fidl::Error::UnknownOrdinal {
2270                        ordinal: header.ordinal,
2271                        protocol_name:
2272                            <ManagedRealmMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2273                    }),
2274                }))
2275            },
2276        )
2277    }
2278}
2279
2280/// `ManagedRealm` is a netemul-managed realm.
2281///
2282/// A `ManagedRealm` is hermetic with respect to capabilities except for
2283///  * netemul-provided capabilities to allow networking
2284///  * logging
2285///
2286/// `ManagedRealm` also provides a `devfs` instance: a directory standing for a
2287/// virtual device filesystem that can be controlled through the [`AddDevice`]
2288/// and [`RemoveDevice`] methods.
2289///
2290/// The lifetime of a `ManagedRealm` and all its children are tied to its
2291/// channel. Upon closure, all children of the realm will be destroyed.
2292#[derive(Debug)]
2293pub enum ManagedRealmRequest {
2294    /// Returns the moniker of the root of the managed realm.
2295    ///
2296    /// - response `moniker` the moniker of the root of the generated
2297    ///     topology that contains this realm's child components.
2298    GetMoniker { responder: ManagedRealmGetMonikerResponder },
2299    /// Connects to a protocol named `protocol_name` provided by a child in this
2300    /// realm.
2301    ///
2302    /// If `child_name` is not provided, connects to the first child offering
2303    /// `protocol_name`.
2304    ///
2305    /// + request `protocol_name` the name of the protocol to connect to.
2306    /// + request `child_name` the name of the child component that is exposing
2307    ///     the requested protocol.
2308    /// + request `req` a channel to be bound to an implementation of the
2309    ///     protocol.
2310    ConnectToProtocol {
2311        protocol_name: String,
2312        child_name: Option<String>,
2313        req: fidl::Channel,
2314        control_handle: ManagedRealmControlHandle,
2315    },
2316    /// Connects to a service named `service_name` provided by a child in this
2317    /// realm.
2318    ///
2319    /// If `child_name` is not provided, connects to the first child offering
2320    /// `service_name`.
2321    ///
2322    /// + request `service_name` the name of the service to connect to.
2323    /// + request `child_name` the name of the child component that is exposing
2324    ///     the requested service.
2325    /// + request `req` a channel to be bound to the service directory.
2326    ConnectToService {
2327        service_name: String,
2328        child_name: Option<String>,
2329        req: fidl::Channel,
2330        control_handle: ManagedRealmControlHandle,
2331    },
2332    /// Mounts new virtual device `device` on netemul's `devfs` instance within
2333    /// this realm.
2334    ///
2335    /// This `devfs` instance is available to components that have the
2336    /// [`Capability.netemul_devfs`] capability.
2337    ///
2338    /// + request `path` relative path from `devfs` root to the virtual device
2339    ///     to be added to the realm.
2340    /// + request `device` virtual device server.
2341    /// * error `ZX_ERR_ALREADY_EXISTS` if `device.path` is already in use.
2342    /// * error `ZX_ERR_INVALID_ARGS` if an element of `path` exceeds
2343    ///     [`fuchsia.io/MAX_FILENAME`] bytes in length.
2344    AddDevice {
2345        path: String,
2346        device: fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
2347        responder: ManagedRealmAddDeviceResponder,
2348    },
2349    /// Removes virtual device mounted at `path`.
2350    ///
2351    /// + request `path` the path to virtual device to be removed from the
2352    ///     realm, relative to `devfs` root.
2353    /// * error `ZX_ERR_NOT_FOUND` if `path` is not currently bound to a device.
2354    /// * error `ZX_ERR_INVALID_ARGS` if an element of `path` exceeds
2355    ///     [`fuchsia.io/MAX_FILENAME`] bytes in length.
2356    RemoveDevice { path: String, responder: ManagedRealmRemoveDeviceResponder },
2357    /// Connects to netemul's `devfs` instance for this realm.
2358    ///
2359    /// + request `devfs` request handle to the `devfs` directory.
2360    GetDevfs {
2361        devfs: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
2362        control_handle: ManagedRealmControlHandle,
2363    },
2364    /// Starts the specified child component in this realm. Starting an already
2365    /// running child component is a no-op and returns success.
2366    ///
2367    /// + request `child_name` the name of the child component to be started.
2368    /// * error `ZX_ERR_NOT_FOUND` if `child_name` is not a child component in
2369    ///     this realm.
2370    /// * error `ZX_ERR_INVALID_ARGS` if `child_name` cannot be composed into a
2371    ///     well-formed moniker.
2372    /// * error `ZX_ERR_INTERNAL` if the call to the service dependency fails.
2373    StartChildComponent { child_name: String, responder: ManagedRealmStartChildComponentResponder },
2374    /// Stops the specified child component in this realm. Stopping an already
2375    /// stopped child component is a no-op and returns success.
2376    ///
2377    /// + request `child_name` the name of the child component to be stopped.
2378    /// * error `ZX_ERR_NOT_FOUND` if `child_name` is not a child component in
2379    ///     this realm.
2380    /// * error `ZX_ERR_INVALID_ARGS` if `child_name` cannot be composed into a
2381    ///     well-formed moniker.
2382    /// * error `ZX_ERR_INTERNAL` if the call to the service dependency fails.
2383    StopChildComponent { child_name: String, responder: ManagedRealmStopChildComponentResponder },
2384    /// Request that the managed realm shut down.
2385    ///
2386    /// The realm will send an `OnShutdown` event when shutdown is complete and
2387    /// before closing the channel.
2388    Shutdown { control_handle: ManagedRealmControlHandle },
2389    /// Opens the diagnostics directory exposed by the component `child_name`.
2390    OpenDiagnosticsDirectory {
2391        child_name: String,
2392        directory: fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
2393        control_handle: ManagedRealmControlHandle,
2394    },
2395    /// Creates a new [`CrashListener`] instance scoped to this realm.
2396    GetCrashListener {
2397        listener: fidl::endpoints::ServerEnd<CrashListenerMarker>,
2398        control_handle: ManagedRealmControlHandle,
2399    },
2400}
2401
2402impl ManagedRealmRequest {
2403    #[allow(irrefutable_let_patterns)]
2404    pub fn into_get_moniker(self) -> Option<(ManagedRealmGetMonikerResponder)> {
2405        if let ManagedRealmRequest::GetMoniker { responder } = self {
2406            Some((responder))
2407        } else {
2408            None
2409        }
2410    }
2411
2412    #[allow(irrefutable_let_patterns)]
2413    pub fn into_connect_to_protocol(
2414        self,
2415    ) -> Option<(String, Option<String>, fidl::Channel, ManagedRealmControlHandle)> {
2416        if let ManagedRealmRequest::ConnectToProtocol {
2417            protocol_name,
2418            child_name,
2419            req,
2420            control_handle,
2421        } = self
2422        {
2423            Some((protocol_name, child_name, req, control_handle))
2424        } else {
2425            None
2426        }
2427    }
2428
2429    #[allow(irrefutable_let_patterns)]
2430    pub fn into_connect_to_service(
2431        self,
2432    ) -> Option<(String, Option<String>, fidl::Channel, ManagedRealmControlHandle)> {
2433        if let ManagedRealmRequest::ConnectToService {
2434            service_name,
2435            child_name,
2436            req,
2437            control_handle,
2438        } = self
2439        {
2440            Some((service_name, child_name, req, control_handle))
2441        } else {
2442            None
2443        }
2444    }
2445
2446    #[allow(irrefutable_let_patterns)]
2447    pub fn into_add_device(
2448        self,
2449    ) -> Option<(
2450        String,
2451        fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
2452        ManagedRealmAddDeviceResponder,
2453    )> {
2454        if let ManagedRealmRequest::AddDevice { path, device, responder } = self {
2455            Some((path, device, responder))
2456        } else {
2457            None
2458        }
2459    }
2460
2461    #[allow(irrefutable_let_patterns)]
2462    pub fn into_remove_device(self) -> Option<(String, ManagedRealmRemoveDeviceResponder)> {
2463        if let ManagedRealmRequest::RemoveDevice { path, responder } = self {
2464            Some((path, responder))
2465        } else {
2466            None
2467        }
2468    }
2469
2470    #[allow(irrefutable_let_patterns)]
2471    pub fn into_get_devfs(
2472        self,
2473    ) -> Option<(
2474        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
2475        ManagedRealmControlHandle,
2476    )> {
2477        if let ManagedRealmRequest::GetDevfs { devfs, control_handle } = self {
2478            Some((devfs, control_handle))
2479        } else {
2480            None
2481        }
2482    }
2483
2484    #[allow(irrefutable_let_patterns)]
2485    pub fn into_start_child_component(
2486        self,
2487    ) -> Option<(String, ManagedRealmStartChildComponentResponder)> {
2488        if let ManagedRealmRequest::StartChildComponent { child_name, responder } = self {
2489            Some((child_name, responder))
2490        } else {
2491            None
2492        }
2493    }
2494
2495    #[allow(irrefutable_let_patterns)]
2496    pub fn into_stop_child_component(
2497        self,
2498    ) -> Option<(String, ManagedRealmStopChildComponentResponder)> {
2499        if let ManagedRealmRequest::StopChildComponent { child_name, responder } = self {
2500            Some((child_name, responder))
2501        } else {
2502            None
2503        }
2504    }
2505
2506    #[allow(irrefutable_let_patterns)]
2507    pub fn into_shutdown(self) -> Option<(ManagedRealmControlHandle)> {
2508        if let ManagedRealmRequest::Shutdown { control_handle } = self {
2509            Some((control_handle))
2510        } else {
2511            None
2512        }
2513    }
2514
2515    #[allow(irrefutable_let_patterns)]
2516    pub fn into_open_diagnostics_directory(
2517        self,
2518    ) -> Option<(
2519        String,
2520        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
2521        ManagedRealmControlHandle,
2522    )> {
2523        if let ManagedRealmRequest::OpenDiagnosticsDirectory {
2524            child_name,
2525            directory,
2526            control_handle,
2527        } = self
2528        {
2529            Some((child_name, directory, control_handle))
2530        } else {
2531            None
2532        }
2533    }
2534
2535    #[allow(irrefutable_let_patterns)]
2536    pub fn into_get_crash_listener(
2537        self,
2538    ) -> Option<(fidl::endpoints::ServerEnd<CrashListenerMarker>, ManagedRealmControlHandle)> {
2539        if let ManagedRealmRequest::GetCrashListener { listener, control_handle } = self {
2540            Some((listener, control_handle))
2541        } else {
2542            None
2543        }
2544    }
2545
2546    /// Name of the method defined in FIDL
2547    pub fn method_name(&self) -> &'static str {
2548        match *self {
2549            ManagedRealmRequest::GetMoniker { .. } => "get_moniker",
2550            ManagedRealmRequest::ConnectToProtocol { .. } => "connect_to_protocol",
2551            ManagedRealmRequest::ConnectToService { .. } => "connect_to_service",
2552            ManagedRealmRequest::AddDevice { .. } => "add_device",
2553            ManagedRealmRequest::RemoveDevice { .. } => "remove_device",
2554            ManagedRealmRequest::GetDevfs { .. } => "get_devfs",
2555            ManagedRealmRequest::StartChildComponent { .. } => "start_child_component",
2556            ManagedRealmRequest::StopChildComponent { .. } => "stop_child_component",
2557            ManagedRealmRequest::Shutdown { .. } => "shutdown",
2558            ManagedRealmRequest::OpenDiagnosticsDirectory { .. } => "open_diagnostics_directory",
2559            ManagedRealmRequest::GetCrashListener { .. } => "get_crash_listener",
2560        }
2561    }
2562}
2563
2564#[derive(Debug, Clone)]
2565pub struct ManagedRealmControlHandle {
2566    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2567}
2568
2569impl ManagedRealmControlHandle {
2570    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
2571        self.inner.shutdown_with_epitaph(status.into())
2572    }
2573}
2574
2575impl fidl::endpoints::ControlHandle for ManagedRealmControlHandle {
2576    fn shutdown(&self) {
2577        self.inner.shutdown()
2578    }
2579
2580    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
2581        self.inner.shutdown_with_epitaph(status)
2582    }
2583
2584    fn is_closed(&self) -> bool {
2585        self.inner.channel().is_closed()
2586    }
2587    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2588        self.inner.channel().on_closed()
2589    }
2590
2591    #[cfg(target_os = "fuchsia")]
2592    fn signal_peer(
2593        &self,
2594        clear_mask: zx::Signals,
2595        set_mask: zx::Signals,
2596    ) -> Result<(), zx_status::Status> {
2597        use fidl::Peered;
2598        self.inner.channel().signal_peer(clear_mask, set_mask)
2599    }
2600}
2601
2602impl ManagedRealmControlHandle {
2603    pub fn send_on_shutdown(&self) -> Result<(), fidl::Error> {
2604        self.inner.send::<fidl::encoding::EmptyPayload>(
2605            (),
2606            0,
2607            0x1dff0b58a5b546be,
2608            fidl::encoding::DynamicFlags::empty(),
2609        )
2610    }
2611}
2612
2613#[must_use = "FIDL methods require a response to be sent"]
2614#[derive(Debug)]
2615pub struct ManagedRealmGetMonikerResponder {
2616    control_handle: std::mem::ManuallyDrop<ManagedRealmControlHandle>,
2617    tx_id: u32,
2618}
2619
2620/// Set the the channel to be shutdown (see [`ManagedRealmControlHandle::shutdown`])
2621/// if the responder is dropped without sending a response, so that the client
2622/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2623impl std::ops::Drop for ManagedRealmGetMonikerResponder {
2624    fn drop(&mut self) {
2625        self.control_handle.shutdown();
2626        // Safety: drops once, never accessed again
2627        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2628    }
2629}
2630
2631impl fidl::endpoints::Responder for ManagedRealmGetMonikerResponder {
2632    type ControlHandle = ManagedRealmControlHandle;
2633
2634    fn control_handle(&self) -> &ManagedRealmControlHandle {
2635        &self.control_handle
2636    }
2637
2638    fn drop_without_shutdown(mut self) {
2639        // Safety: drops once, never accessed again due to mem::forget
2640        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2641        // Prevent Drop from running (which would shut down the channel)
2642        std::mem::forget(self);
2643    }
2644}
2645
2646impl ManagedRealmGetMonikerResponder {
2647    /// Sends a response to the FIDL transaction.
2648    ///
2649    /// Sets the channel to shutdown if an error occurs.
2650    pub fn send(self, mut moniker: &str) -> Result<(), fidl::Error> {
2651        let _result = self.send_raw(moniker);
2652        if _result.is_err() {
2653            self.control_handle.shutdown();
2654        }
2655        self.drop_without_shutdown();
2656        _result
2657    }
2658
2659    /// Similar to "send" but does not shutdown the channel if an error occurs.
2660    pub fn send_no_shutdown_on_err(self, mut moniker: &str) -> Result<(), fidl::Error> {
2661        let _result = self.send_raw(moniker);
2662        self.drop_without_shutdown();
2663        _result
2664    }
2665
2666    fn send_raw(&self, mut moniker: &str) -> Result<(), fidl::Error> {
2667        self.control_handle.inner.send::<ManagedRealmGetMonikerResponse>(
2668            (moniker,),
2669            self.tx_id,
2670            0xec8f2bf894ddc5f,
2671            fidl::encoding::DynamicFlags::empty(),
2672        )
2673    }
2674}
2675
2676#[must_use = "FIDL methods require a response to be sent"]
2677#[derive(Debug)]
2678pub struct ManagedRealmAddDeviceResponder {
2679    control_handle: std::mem::ManuallyDrop<ManagedRealmControlHandle>,
2680    tx_id: u32,
2681}
2682
2683/// Set the the channel to be shutdown (see [`ManagedRealmControlHandle::shutdown`])
2684/// if the responder is dropped without sending a response, so that the client
2685/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2686impl std::ops::Drop for ManagedRealmAddDeviceResponder {
2687    fn drop(&mut self) {
2688        self.control_handle.shutdown();
2689        // Safety: drops once, never accessed again
2690        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2691    }
2692}
2693
2694impl fidl::endpoints::Responder for ManagedRealmAddDeviceResponder {
2695    type ControlHandle = ManagedRealmControlHandle;
2696
2697    fn control_handle(&self) -> &ManagedRealmControlHandle {
2698        &self.control_handle
2699    }
2700
2701    fn drop_without_shutdown(mut self) {
2702        // Safety: drops once, never accessed again due to mem::forget
2703        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2704        // Prevent Drop from running (which would shut down the channel)
2705        std::mem::forget(self);
2706    }
2707}
2708
2709impl ManagedRealmAddDeviceResponder {
2710    /// Sends a response to the FIDL transaction.
2711    ///
2712    /// Sets the channel to shutdown if an error occurs.
2713    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2714        let _result = self.send_raw(result);
2715        if _result.is_err() {
2716            self.control_handle.shutdown();
2717        }
2718        self.drop_without_shutdown();
2719        _result
2720    }
2721
2722    /// Similar to "send" but does not shutdown the channel if an error occurs.
2723    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2724        let _result = self.send_raw(result);
2725        self.drop_without_shutdown();
2726        _result
2727    }
2728
2729    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2730        self.control_handle
2731            .inner
2732            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
2733                result,
2734                self.tx_id,
2735                0x789925e6f5d47c07,
2736                fidl::encoding::DynamicFlags::empty(),
2737            )
2738    }
2739}
2740
2741#[must_use = "FIDL methods require a response to be sent"]
2742#[derive(Debug)]
2743pub struct ManagedRealmRemoveDeviceResponder {
2744    control_handle: std::mem::ManuallyDrop<ManagedRealmControlHandle>,
2745    tx_id: u32,
2746}
2747
2748/// Set the the channel to be shutdown (see [`ManagedRealmControlHandle::shutdown`])
2749/// if the responder is dropped without sending a response, so that the client
2750/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2751impl std::ops::Drop for ManagedRealmRemoveDeviceResponder {
2752    fn drop(&mut self) {
2753        self.control_handle.shutdown();
2754        // Safety: drops once, never accessed again
2755        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2756    }
2757}
2758
2759impl fidl::endpoints::Responder for ManagedRealmRemoveDeviceResponder {
2760    type ControlHandle = ManagedRealmControlHandle;
2761
2762    fn control_handle(&self) -> &ManagedRealmControlHandle {
2763        &self.control_handle
2764    }
2765
2766    fn drop_without_shutdown(mut self) {
2767        // Safety: drops once, never accessed again due to mem::forget
2768        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2769        // Prevent Drop from running (which would shut down the channel)
2770        std::mem::forget(self);
2771    }
2772}
2773
2774impl ManagedRealmRemoveDeviceResponder {
2775    /// Sends a response to the FIDL transaction.
2776    ///
2777    /// Sets the channel to shutdown if an error occurs.
2778    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2779        let _result = self.send_raw(result);
2780        if _result.is_err() {
2781            self.control_handle.shutdown();
2782        }
2783        self.drop_without_shutdown();
2784        _result
2785    }
2786
2787    /// Similar to "send" but does not shutdown the channel if an error occurs.
2788    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2789        let _result = self.send_raw(result);
2790        self.drop_without_shutdown();
2791        _result
2792    }
2793
2794    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2795        self.control_handle
2796            .inner
2797            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
2798                result,
2799                self.tx_id,
2800                0x6cffbba70ac757cc,
2801                fidl::encoding::DynamicFlags::empty(),
2802            )
2803    }
2804}
2805
2806#[must_use = "FIDL methods require a response to be sent"]
2807#[derive(Debug)]
2808pub struct ManagedRealmStartChildComponentResponder {
2809    control_handle: std::mem::ManuallyDrop<ManagedRealmControlHandle>,
2810    tx_id: u32,
2811}
2812
2813/// Set the the channel to be shutdown (see [`ManagedRealmControlHandle::shutdown`])
2814/// if the responder is dropped without sending a response, so that the client
2815/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2816impl std::ops::Drop for ManagedRealmStartChildComponentResponder {
2817    fn drop(&mut self) {
2818        self.control_handle.shutdown();
2819        // Safety: drops once, never accessed again
2820        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2821    }
2822}
2823
2824impl fidl::endpoints::Responder for ManagedRealmStartChildComponentResponder {
2825    type ControlHandle = ManagedRealmControlHandle;
2826
2827    fn control_handle(&self) -> &ManagedRealmControlHandle {
2828        &self.control_handle
2829    }
2830
2831    fn drop_without_shutdown(mut self) {
2832        // Safety: drops once, never accessed again due to mem::forget
2833        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2834        // Prevent Drop from running (which would shut down the channel)
2835        std::mem::forget(self);
2836    }
2837}
2838
2839impl ManagedRealmStartChildComponentResponder {
2840    /// Sends a response to the FIDL transaction.
2841    ///
2842    /// Sets the channel to shutdown if an error occurs.
2843    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2844        let _result = self.send_raw(result);
2845        if _result.is_err() {
2846            self.control_handle.shutdown();
2847        }
2848        self.drop_without_shutdown();
2849        _result
2850    }
2851
2852    /// Similar to "send" but does not shutdown the channel if an error occurs.
2853    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2854        let _result = self.send_raw(result);
2855        self.drop_without_shutdown();
2856        _result
2857    }
2858
2859    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2860        self.control_handle
2861            .inner
2862            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
2863                result,
2864                self.tx_id,
2865                0x20dfa243752906a1,
2866                fidl::encoding::DynamicFlags::empty(),
2867            )
2868    }
2869}
2870
2871#[must_use = "FIDL methods require a response to be sent"]
2872#[derive(Debug)]
2873pub struct ManagedRealmStopChildComponentResponder {
2874    control_handle: std::mem::ManuallyDrop<ManagedRealmControlHandle>,
2875    tx_id: u32,
2876}
2877
2878/// Set the the channel to be shutdown (see [`ManagedRealmControlHandle::shutdown`])
2879/// if the responder is dropped without sending a response, so that the client
2880/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2881impl std::ops::Drop for ManagedRealmStopChildComponentResponder {
2882    fn drop(&mut self) {
2883        self.control_handle.shutdown();
2884        // Safety: drops once, never accessed again
2885        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2886    }
2887}
2888
2889impl fidl::endpoints::Responder for ManagedRealmStopChildComponentResponder {
2890    type ControlHandle = ManagedRealmControlHandle;
2891
2892    fn control_handle(&self) -> &ManagedRealmControlHandle {
2893        &self.control_handle
2894    }
2895
2896    fn drop_without_shutdown(mut self) {
2897        // Safety: drops once, never accessed again due to mem::forget
2898        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2899        // Prevent Drop from running (which would shut down the channel)
2900        std::mem::forget(self);
2901    }
2902}
2903
2904impl ManagedRealmStopChildComponentResponder {
2905    /// Sends a response to the FIDL transaction.
2906    ///
2907    /// Sets the channel to shutdown if an error occurs.
2908    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2909        let _result = self.send_raw(result);
2910        if _result.is_err() {
2911            self.control_handle.shutdown();
2912        }
2913        self.drop_without_shutdown();
2914        _result
2915    }
2916
2917    /// Similar to "send" but does not shutdown the channel if an error occurs.
2918    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2919        let _result = self.send_raw(result);
2920        self.drop_without_shutdown();
2921        _result
2922    }
2923
2924    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2925        self.control_handle
2926            .inner
2927            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
2928                result,
2929                self.tx_id,
2930                0x5ecfe48430aeeca7,
2931                fidl::encoding::DynamicFlags::empty(),
2932            )
2933    }
2934}
2935
2936#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2937pub struct SandboxMarker;
2938
2939impl fidl::endpoints::ProtocolMarker for SandboxMarker {
2940    type Proxy = SandboxProxy;
2941    type RequestStream = SandboxRequestStream;
2942    #[cfg(target_os = "fuchsia")]
2943    type SynchronousProxy = SandboxSynchronousProxy;
2944
2945    const DEBUG_NAME: &'static str = "fuchsia.netemul.Sandbox";
2946}
2947impl fidl::endpoints::DiscoverableProtocolMarker for SandboxMarker {}
2948
2949pub trait SandboxProxyInterface: Send + Sync {
2950    fn r#create_realm(
2951        &self,
2952        realm: fidl::endpoints::ServerEnd<ManagedRealmMarker>,
2953        options: RealmOptions,
2954    ) -> Result<(), fidl::Error>;
2955    fn r#get_network_context(
2956        &self,
2957        network_context: fidl::endpoints::ServerEnd<
2958            fidl_fuchsia_netemul_network::NetworkContextMarker,
2959        >,
2960    ) -> Result<(), fidl::Error>;
2961}
2962#[derive(Debug)]
2963#[cfg(target_os = "fuchsia")]
2964pub struct SandboxSynchronousProxy {
2965    client: fidl::client::sync::Client,
2966}
2967
2968#[cfg(target_os = "fuchsia")]
2969impl fidl::endpoints::SynchronousProxy for SandboxSynchronousProxy {
2970    type Proxy = SandboxProxy;
2971    type Protocol = SandboxMarker;
2972
2973    fn from_channel(inner: fidl::Channel) -> Self {
2974        Self::new(inner)
2975    }
2976
2977    fn into_channel(self) -> fidl::Channel {
2978        self.client.into_channel()
2979    }
2980
2981    fn as_channel(&self) -> &fidl::Channel {
2982        self.client.as_channel()
2983    }
2984}
2985
2986#[cfg(target_os = "fuchsia")]
2987impl SandboxSynchronousProxy {
2988    pub fn new(channel: fidl::Channel) -> Self {
2989        Self { client: fidl::client::sync::Client::new(channel) }
2990    }
2991
2992    pub fn into_channel(self) -> fidl::Channel {
2993        self.client.into_channel()
2994    }
2995
2996    /// Waits until an event arrives and returns it. It is safe for other
2997    /// threads to make concurrent requests while waiting for an event.
2998    pub fn wait_for_event(
2999        &self,
3000        deadline: zx::MonotonicInstant,
3001    ) -> Result<SandboxEvent, fidl::Error> {
3002        SandboxEvent::decode(self.client.wait_for_event::<SandboxMarker>(deadline)?)
3003    }
3004
3005    /// Creates a new realm configured by `options`.
3006    ///
3007    /// + request `realm` request handle to the newly created managed realm.
3008    /// + request `options` configures the setup and child components of
3009    ///     `realm`. If `options` is invalid, `realm` will be closed.
3010    ///
3011    /// Errors are presented as an epitaph on the `realm` channel.
3012    /// * error `ZX_ERR_INVALID_ARGS` if `options` was invalid.
3013    /// * error `ZX_ERR_INTERNAL` for internal errors, including failures to
3014    ///     build the requested component topology.
3015    pub fn r#create_realm(
3016        &self,
3017        mut realm: fidl::endpoints::ServerEnd<ManagedRealmMarker>,
3018        mut options: RealmOptions,
3019    ) -> Result<(), fidl::Error> {
3020        self.client.send::<SandboxCreateRealmRequest>(
3021            (realm, &mut options),
3022            0x25d0bc5f1006a0c9,
3023            fidl::encoding::DynamicFlags::empty(),
3024        )
3025    }
3026
3027    /// Gets this sandbox's network context.
3028    ///
3029    /// + request `network_context` request handle to the network context.
3030    pub fn r#get_network_context(
3031        &self,
3032        mut network_context: fidl::endpoints::ServerEnd<
3033            fidl_fuchsia_netemul_network::NetworkContextMarker,
3034        >,
3035    ) -> Result<(), fidl::Error> {
3036        self.client.send::<SandboxGetNetworkContextRequest>(
3037            (network_context,),
3038            0x140cb104c2605970,
3039            fidl::encoding::DynamicFlags::empty(),
3040        )
3041    }
3042}
3043
3044#[cfg(target_os = "fuchsia")]
3045impl From<SandboxSynchronousProxy> for zx::NullableHandle {
3046    fn from(value: SandboxSynchronousProxy) -> Self {
3047        value.into_channel().into()
3048    }
3049}
3050
3051#[cfg(target_os = "fuchsia")]
3052impl From<fidl::Channel> for SandboxSynchronousProxy {
3053    fn from(value: fidl::Channel) -> Self {
3054        Self::new(value)
3055    }
3056}
3057
3058#[cfg(target_os = "fuchsia")]
3059impl fidl::endpoints::FromClient for SandboxSynchronousProxy {
3060    type Protocol = SandboxMarker;
3061
3062    fn from_client(value: fidl::endpoints::ClientEnd<SandboxMarker>) -> Self {
3063        Self::new(value.into_channel())
3064    }
3065}
3066
3067#[derive(Debug, Clone)]
3068pub struct SandboxProxy {
3069    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3070}
3071
3072impl fidl::endpoints::Proxy for SandboxProxy {
3073    type Protocol = SandboxMarker;
3074
3075    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3076        Self::new(inner)
3077    }
3078
3079    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3080        self.client.into_channel().map_err(|client| Self { client })
3081    }
3082
3083    fn as_channel(&self) -> &::fidl::AsyncChannel {
3084        self.client.as_channel()
3085    }
3086}
3087
3088impl SandboxProxy {
3089    /// Create a new Proxy for fuchsia.netemul/Sandbox.
3090    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3091        let protocol_name = <SandboxMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3092        Self { client: fidl::client::Client::new(channel, protocol_name) }
3093    }
3094
3095    /// Get a Stream of events from the remote end of the protocol.
3096    ///
3097    /// # Panics
3098    ///
3099    /// Panics if the event stream was already taken.
3100    pub fn take_event_stream(&self) -> SandboxEventStream {
3101        SandboxEventStream { event_receiver: self.client.take_event_receiver() }
3102    }
3103
3104    /// Creates a new realm configured by `options`.
3105    ///
3106    /// + request `realm` request handle to the newly created managed realm.
3107    /// + request `options` configures the setup and child components of
3108    ///     `realm`. If `options` is invalid, `realm` will be closed.
3109    ///
3110    /// Errors are presented as an epitaph on the `realm` channel.
3111    /// * error `ZX_ERR_INVALID_ARGS` if `options` was invalid.
3112    /// * error `ZX_ERR_INTERNAL` for internal errors, including failures to
3113    ///     build the requested component topology.
3114    pub fn r#create_realm(
3115        &self,
3116        mut realm: fidl::endpoints::ServerEnd<ManagedRealmMarker>,
3117        mut options: RealmOptions,
3118    ) -> Result<(), fidl::Error> {
3119        SandboxProxyInterface::r#create_realm(self, realm, options)
3120    }
3121
3122    /// Gets this sandbox's network context.
3123    ///
3124    /// + request `network_context` request handle to the network context.
3125    pub fn r#get_network_context(
3126        &self,
3127        mut network_context: fidl::endpoints::ServerEnd<
3128            fidl_fuchsia_netemul_network::NetworkContextMarker,
3129        >,
3130    ) -> Result<(), fidl::Error> {
3131        SandboxProxyInterface::r#get_network_context(self, network_context)
3132    }
3133}
3134
3135impl SandboxProxyInterface for SandboxProxy {
3136    fn r#create_realm(
3137        &self,
3138        mut realm: fidl::endpoints::ServerEnd<ManagedRealmMarker>,
3139        mut options: RealmOptions,
3140    ) -> Result<(), fidl::Error> {
3141        self.client.send::<SandboxCreateRealmRequest>(
3142            (realm, &mut options),
3143            0x25d0bc5f1006a0c9,
3144            fidl::encoding::DynamicFlags::empty(),
3145        )
3146    }
3147
3148    fn r#get_network_context(
3149        &self,
3150        mut network_context: fidl::endpoints::ServerEnd<
3151            fidl_fuchsia_netemul_network::NetworkContextMarker,
3152        >,
3153    ) -> Result<(), fidl::Error> {
3154        self.client.send::<SandboxGetNetworkContextRequest>(
3155            (network_context,),
3156            0x140cb104c2605970,
3157            fidl::encoding::DynamicFlags::empty(),
3158        )
3159    }
3160}
3161
3162pub struct SandboxEventStream {
3163    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3164}
3165
3166impl std::marker::Unpin for SandboxEventStream {}
3167
3168impl futures::stream::FusedStream for SandboxEventStream {
3169    fn is_terminated(&self) -> bool {
3170        self.event_receiver.is_terminated()
3171    }
3172}
3173
3174impl futures::Stream for SandboxEventStream {
3175    type Item = Result<SandboxEvent, fidl::Error>;
3176
3177    fn poll_next(
3178        mut self: std::pin::Pin<&mut Self>,
3179        cx: &mut std::task::Context<'_>,
3180    ) -> std::task::Poll<Option<Self::Item>> {
3181        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3182            &mut self.event_receiver,
3183            cx
3184        )?) {
3185            Some(buf) => std::task::Poll::Ready(Some(SandboxEvent::decode(buf))),
3186            None => std::task::Poll::Ready(None),
3187        }
3188    }
3189}
3190
3191#[derive(Debug)]
3192pub enum SandboxEvent {}
3193
3194impl SandboxEvent {
3195    /// Decodes a message buffer as a [`SandboxEvent`].
3196    fn decode(
3197        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3198    ) -> Result<SandboxEvent, fidl::Error> {
3199        let (bytes, _handles) = buf.split_mut();
3200        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3201        debug_assert_eq!(tx_header.tx_id, 0);
3202        match tx_header.ordinal {
3203            _ => Err(fidl::Error::UnknownOrdinal {
3204                ordinal: tx_header.ordinal,
3205                protocol_name: <SandboxMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3206            }),
3207        }
3208    }
3209}
3210
3211/// A Stream of incoming requests for fuchsia.netemul/Sandbox.
3212pub struct SandboxRequestStream {
3213    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3214    is_terminated: bool,
3215}
3216
3217impl std::marker::Unpin for SandboxRequestStream {}
3218
3219impl futures::stream::FusedStream for SandboxRequestStream {
3220    fn is_terminated(&self) -> bool {
3221        self.is_terminated
3222    }
3223}
3224
3225impl fidl::endpoints::RequestStream for SandboxRequestStream {
3226    type Protocol = SandboxMarker;
3227    type ControlHandle = SandboxControlHandle;
3228
3229    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3230        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3231    }
3232
3233    fn control_handle(&self) -> Self::ControlHandle {
3234        SandboxControlHandle { inner: self.inner.clone() }
3235    }
3236
3237    fn into_inner(
3238        self,
3239    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3240    {
3241        (self.inner, self.is_terminated)
3242    }
3243
3244    fn from_inner(
3245        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3246        is_terminated: bool,
3247    ) -> Self {
3248        Self { inner, is_terminated }
3249    }
3250}
3251
3252impl futures::Stream for SandboxRequestStream {
3253    type Item = Result<SandboxRequest, fidl::Error>;
3254
3255    fn poll_next(
3256        mut self: std::pin::Pin<&mut Self>,
3257        cx: &mut std::task::Context<'_>,
3258    ) -> std::task::Poll<Option<Self::Item>> {
3259        let this = &mut *self;
3260        if this.inner.check_shutdown(cx) {
3261            this.is_terminated = true;
3262            return std::task::Poll::Ready(None);
3263        }
3264        if this.is_terminated {
3265            panic!("polled SandboxRequestStream after completion");
3266        }
3267        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3268            |bytes, handles| {
3269                match this.inner.channel().read_etc(cx, bytes, handles) {
3270                    std::task::Poll::Ready(Ok(())) => {}
3271                    std::task::Poll::Pending => return std::task::Poll::Pending,
3272                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3273                        this.is_terminated = true;
3274                        return std::task::Poll::Ready(None);
3275                    }
3276                    std::task::Poll::Ready(Err(e)) => {
3277                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3278                            e.into(),
3279                        ))));
3280                    }
3281                }
3282
3283                // A message has been received from the channel
3284                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3285
3286                std::task::Poll::Ready(Some(match header.ordinal {
3287                    0x25d0bc5f1006a0c9 => {
3288                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
3289                        let mut req = fidl::new_empty!(
3290                            SandboxCreateRealmRequest,
3291                            fidl::encoding::DefaultFuchsiaResourceDialect
3292                        );
3293                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<SandboxCreateRealmRequest>(&header, _body_bytes, handles, &mut req)?;
3294                        let control_handle = SandboxControlHandle { inner: this.inner.clone() };
3295                        Ok(SandboxRequest::CreateRealm {
3296                            realm: req.realm,
3297                            options: req.options,
3298
3299                            control_handle,
3300                        })
3301                    }
3302                    0x140cb104c2605970 => {
3303                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
3304                        let mut req = fidl::new_empty!(
3305                            SandboxGetNetworkContextRequest,
3306                            fidl::encoding::DefaultFuchsiaResourceDialect
3307                        );
3308                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<SandboxGetNetworkContextRequest>(&header, _body_bytes, handles, &mut req)?;
3309                        let control_handle = SandboxControlHandle { inner: this.inner.clone() };
3310                        Ok(SandboxRequest::GetNetworkContext {
3311                            network_context: req.network_context,
3312
3313                            control_handle,
3314                        })
3315                    }
3316                    _ => Err(fidl::Error::UnknownOrdinal {
3317                        ordinal: header.ordinal,
3318                        protocol_name:
3319                            <SandboxMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3320                    }),
3321                }))
3322            },
3323        )
3324    }
3325}
3326
3327/// `Sandbox` is a hermetic container for network emulation testing.
3328///
3329/// Every connection to `Sandbox` represents a self-contained context where
3330/// [`fuchsia.netemul/ManagedRealm`]s can be created. The
3331/// [`fuchsia.netemul.network/NetworkContext`] instance offered by it is the
3332/// same that is exposed to any `ManagedRealm`s created by the `Sandbox`.
3333///
3334/// The lifetime of the created realms (and the context services) is bound to
3335/// the connection to the `Sandbox` protocol. If the channel is closed, all the
3336/// realms and the components created within them will be terminated.
3337#[derive(Debug)]
3338pub enum SandboxRequest {
3339    /// Creates a new realm configured by `options`.
3340    ///
3341    /// + request `realm` request handle to the newly created managed realm.
3342    /// + request `options` configures the setup and child components of
3343    ///     `realm`. If `options` is invalid, `realm` will be closed.
3344    ///
3345    /// Errors are presented as an epitaph on the `realm` channel.
3346    /// * error `ZX_ERR_INVALID_ARGS` if `options` was invalid.
3347    /// * error `ZX_ERR_INTERNAL` for internal errors, including failures to
3348    ///     build the requested component topology.
3349    CreateRealm {
3350        realm: fidl::endpoints::ServerEnd<ManagedRealmMarker>,
3351        options: RealmOptions,
3352        control_handle: SandboxControlHandle,
3353    },
3354    /// Gets this sandbox's network context.
3355    ///
3356    /// + request `network_context` request handle to the network context.
3357    GetNetworkContext {
3358        network_context:
3359            fidl::endpoints::ServerEnd<fidl_fuchsia_netemul_network::NetworkContextMarker>,
3360        control_handle: SandboxControlHandle,
3361    },
3362}
3363
3364impl SandboxRequest {
3365    #[allow(irrefutable_let_patterns)]
3366    pub fn into_create_realm(
3367        self,
3368    ) -> Option<(fidl::endpoints::ServerEnd<ManagedRealmMarker>, RealmOptions, SandboxControlHandle)>
3369    {
3370        if let SandboxRequest::CreateRealm { realm, options, control_handle } = self {
3371            Some((realm, options, control_handle))
3372        } else {
3373            None
3374        }
3375    }
3376
3377    #[allow(irrefutable_let_patterns)]
3378    pub fn into_get_network_context(
3379        self,
3380    ) -> Option<(
3381        fidl::endpoints::ServerEnd<fidl_fuchsia_netemul_network::NetworkContextMarker>,
3382        SandboxControlHandle,
3383    )> {
3384        if let SandboxRequest::GetNetworkContext { network_context, control_handle } = self {
3385            Some((network_context, control_handle))
3386        } else {
3387            None
3388        }
3389    }
3390
3391    /// Name of the method defined in FIDL
3392    pub fn method_name(&self) -> &'static str {
3393        match *self {
3394            SandboxRequest::CreateRealm { .. } => "create_realm",
3395            SandboxRequest::GetNetworkContext { .. } => "get_network_context",
3396        }
3397    }
3398}
3399
3400#[derive(Debug, Clone)]
3401pub struct SandboxControlHandle {
3402    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3403}
3404
3405impl SandboxControlHandle {
3406    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
3407        self.inner.shutdown_with_epitaph(status.into())
3408    }
3409}
3410
3411impl fidl::endpoints::ControlHandle for SandboxControlHandle {
3412    fn shutdown(&self) {
3413        self.inner.shutdown()
3414    }
3415
3416    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
3417        self.inner.shutdown_with_epitaph(status)
3418    }
3419
3420    fn is_closed(&self) -> bool {
3421        self.inner.channel().is_closed()
3422    }
3423    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3424        self.inner.channel().on_closed()
3425    }
3426
3427    #[cfg(target_os = "fuchsia")]
3428    fn signal_peer(
3429        &self,
3430        clear_mask: zx::Signals,
3431        set_mask: zx::Signals,
3432    ) -> Result<(), zx_status::Status> {
3433        use fidl::Peered;
3434        self.inner.channel().signal_peer(clear_mask, set_mask)
3435    }
3436}
3437
3438impl SandboxControlHandle {}
3439
3440mod internal {
3441    use super::*;
3442
3443    impl fidl::encoding::ResourceTypeMarker for ManagedRealmAddDeviceRequest {
3444        type Borrowed<'a> = &'a mut Self;
3445        fn take_or_borrow<'a>(
3446            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3447        ) -> Self::Borrowed<'a> {
3448            value
3449        }
3450    }
3451
3452    unsafe impl fidl::encoding::TypeMarker for ManagedRealmAddDeviceRequest {
3453        type Owned = Self;
3454
3455        #[inline(always)]
3456        fn inline_align(_context: fidl::encoding::Context) -> usize {
3457            8
3458        }
3459
3460        #[inline(always)]
3461        fn inline_size(_context: fidl::encoding::Context) -> usize {
3462            24
3463        }
3464    }
3465
3466    unsafe impl
3467        fidl::encoding::Encode<
3468            ManagedRealmAddDeviceRequest,
3469            fidl::encoding::DefaultFuchsiaResourceDialect,
3470        > for &mut ManagedRealmAddDeviceRequest
3471    {
3472        #[inline]
3473        unsafe fn encode(
3474            self,
3475            encoder: &mut fidl::encoding::Encoder<
3476                '_,
3477                fidl::encoding::DefaultFuchsiaResourceDialect,
3478            >,
3479            offset: usize,
3480            _depth: fidl::encoding::Depth,
3481        ) -> fidl::Result<()> {
3482            encoder.debug_check_bounds::<ManagedRealmAddDeviceRequest>(offset);
3483            // Delegate to tuple encoding.
3484            fidl::encoding::Encode::<
3485                ManagedRealmAddDeviceRequest,
3486                fidl::encoding::DefaultFuchsiaResourceDialect,
3487            >::encode(
3488                (
3489                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
3490                        &self.path,
3491                    ),
3492                    <fidl::encoding::Endpoint<
3493                        fidl::endpoints::ClientEnd<
3494                            fidl_fuchsia_netemul_network::DeviceProxy_Marker,
3495                        >,
3496                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3497                        &mut self.device
3498                    ),
3499                ),
3500                encoder,
3501                offset,
3502                _depth,
3503            )
3504        }
3505    }
3506    unsafe impl<
3507        T0: fidl::encoding::Encode<
3508                fidl::encoding::UnboundedString,
3509                fidl::encoding::DefaultFuchsiaResourceDialect,
3510            >,
3511        T1: fidl::encoding::Encode<
3512                fidl::encoding::Endpoint<
3513                    fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
3514                >,
3515                fidl::encoding::DefaultFuchsiaResourceDialect,
3516            >,
3517    >
3518        fidl::encoding::Encode<
3519            ManagedRealmAddDeviceRequest,
3520            fidl::encoding::DefaultFuchsiaResourceDialect,
3521        > for (T0, T1)
3522    {
3523        #[inline]
3524        unsafe fn encode(
3525            self,
3526            encoder: &mut fidl::encoding::Encoder<
3527                '_,
3528                fidl::encoding::DefaultFuchsiaResourceDialect,
3529            >,
3530            offset: usize,
3531            depth: fidl::encoding::Depth,
3532        ) -> fidl::Result<()> {
3533            encoder.debug_check_bounds::<ManagedRealmAddDeviceRequest>(offset);
3534            // Zero out padding regions. There's no need to apply masks
3535            // because the unmasked parts will be overwritten by fields.
3536            unsafe {
3537                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3538                (ptr as *mut u64).write_unaligned(0);
3539            }
3540            // Write the fields.
3541            self.0.encode(encoder, offset + 0, depth)?;
3542            self.1.encode(encoder, offset + 16, depth)?;
3543            Ok(())
3544        }
3545    }
3546
3547    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3548        for ManagedRealmAddDeviceRequest
3549    {
3550        #[inline(always)]
3551        fn new_empty() -> Self {
3552            Self {
3553                path: fidl::new_empty!(
3554                    fidl::encoding::UnboundedString,
3555                    fidl::encoding::DefaultFuchsiaResourceDialect
3556                ),
3557                device: fidl::new_empty!(
3558                    fidl::encoding::Endpoint<
3559                        fidl::endpoints::ClientEnd<
3560                            fidl_fuchsia_netemul_network::DeviceProxy_Marker,
3561                        >,
3562                    >,
3563                    fidl::encoding::DefaultFuchsiaResourceDialect
3564                ),
3565            }
3566        }
3567
3568        #[inline]
3569        unsafe fn decode(
3570            &mut self,
3571            decoder: &mut fidl::encoding::Decoder<
3572                '_,
3573                fidl::encoding::DefaultFuchsiaResourceDialect,
3574            >,
3575            offset: usize,
3576            _depth: fidl::encoding::Depth,
3577        ) -> fidl::Result<()> {
3578            decoder.debug_check_bounds::<Self>(offset);
3579            // Verify that padding bytes are zero.
3580            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3581            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3582            let mask = 0xffffffff00000000u64;
3583            let maskedval = padval & mask;
3584            if maskedval != 0 {
3585                return Err(fidl::Error::NonZeroPadding {
3586                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3587                });
3588            }
3589            fidl::decode!(
3590                fidl::encoding::UnboundedString,
3591                fidl::encoding::DefaultFuchsiaResourceDialect,
3592                &mut self.path,
3593                decoder,
3594                offset + 0,
3595                _depth
3596            )?;
3597            fidl::decode!(
3598                fidl::encoding::Endpoint<
3599                    fidl::endpoints::ClientEnd<fidl_fuchsia_netemul_network::DeviceProxy_Marker>,
3600                >,
3601                fidl::encoding::DefaultFuchsiaResourceDialect,
3602                &mut self.device,
3603                decoder,
3604                offset + 16,
3605                _depth
3606            )?;
3607            Ok(())
3608        }
3609    }
3610
3611    impl fidl::encoding::ResourceTypeMarker for ManagedRealmConnectToProtocolRequest {
3612        type Borrowed<'a> = &'a mut Self;
3613        fn take_or_borrow<'a>(
3614            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3615        ) -> Self::Borrowed<'a> {
3616            value
3617        }
3618    }
3619
3620    unsafe impl fidl::encoding::TypeMarker for ManagedRealmConnectToProtocolRequest {
3621        type Owned = Self;
3622
3623        #[inline(always)]
3624        fn inline_align(_context: fidl::encoding::Context) -> usize {
3625            8
3626        }
3627
3628        #[inline(always)]
3629        fn inline_size(_context: fidl::encoding::Context) -> usize {
3630            40
3631        }
3632    }
3633
3634    unsafe impl
3635        fidl::encoding::Encode<
3636            ManagedRealmConnectToProtocolRequest,
3637            fidl::encoding::DefaultFuchsiaResourceDialect,
3638        > for &mut ManagedRealmConnectToProtocolRequest
3639    {
3640        #[inline]
3641        unsafe fn encode(
3642            self,
3643            encoder: &mut fidl::encoding::Encoder<
3644                '_,
3645                fidl::encoding::DefaultFuchsiaResourceDialect,
3646            >,
3647            offset: usize,
3648            _depth: fidl::encoding::Depth,
3649        ) -> fidl::Result<()> {
3650            encoder.debug_check_bounds::<ManagedRealmConnectToProtocolRequest>(offset);
3651            // Delegate to tuple encoding.
3652            fidl::encoding::Encode::<ManagedRealmConnectToProtocolRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
3653                (
3654                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(&self.protocol_name),
3655                    <fidl::encoding::Optional<fidl::encoding::BoundedString<255>> as fidl::encoding::ValueTypeMarker>::borrow(&self.child_name),
3656                    <fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.req),
3657                ),
3658                encoder, offset, _depth
3659            )
3660        }
3661    }
3662    unsafe impl<
3663        T0: fidl::encoding::Encode<
3664                fidl::encoding::BoundedString<255>,
3665                fidl::encoding::DefaultFuchsiaResourceDialect,
3666            >,
3667        T1: fidl::encoding::Encode<
3668                fidl::encoding::Optional<fidl::encoding::BoundedString<255>>,
3669                fidl::encoding::DefaultFuchsiaResourceDialect,
3670            >,
3671        T2: fidl::encoding::Encode<
3672                fidl::encoding::HandleType<
3673                    fidl::Channel,
3674                    { fidl::ObjectType::CHANNEL.into_raw() },
3675                    2147483648,
3676                >,
3677                fidl::encoding::DefaultFuchsiaResourceDialect,
3678            >,
3679    >
3680        fidl::encoding::Encode<
3681            ManagedRealmConnectToProtocolRequest,
3682            fidl::encoding::DefaultFuchsiaResourceDialect,
3683        > for (T0, T1, T2)
3684    {
3685        #[inline]
3686        unsafe fn encode(
3687            self,
3688            encoder: &mut fidl::encoding::Encoder<
3689                '_,
3690                fidl::encoding::DefaultFuchsiaResourceDialect,
3691            >,
3692            offset: usize,
3693            depth: fidl::encoding::Depth,
3694        ) -> fidl::Result<()> {
3695            encoder.debug_check_bounds::<ManagedRealmConnectToProtocolRequest>(offset);
3696            // Zero out padding regions. There's no need to apply masks
3697            // because the unmasked parts will be overwritten by fields.
3698            unsafe {
3699                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
3700                (ptr as *mut u64).write_unaligned(0);
3701            }
3702            // Write the fields.
3703            self.0.encode(encoder, offset + 0, depth)?;
3704            self.1.encode(encoder, offset + 16, depth)?;
3705            self.2.encode(encoder, offset + 32, depth)?;
3706            Ok(())
3707        }
3708    }
3709
3710    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3711        for ManagedRealmConnectToProtocolRequest
3712    {
3713        #[inline(always)]
3714        fn new_empty() -> Self {
3715            Self {
3716                protocol_name: fidl::new_empty!(
3717                    fidl::encoding::BoundedString<255>,
3718                    fidl::encoding::DefaultFuchsiaResourceDialect
3719                ),
3720                child_name: fidl::new_empty!(
3721                    fidl::encoding::Optional<fidl::encoding::BoundedString<255>>,
3722                    fidl::encoding::DefaultFuchsiaResourceDialect
3723                ),
3724                req: fidl::new_empty!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
3725            }
3726        }
3727
3728        #[inline]
3729        unsafe fn decode(
3730            &mut self,
3731            decoder: &mut fidl::encoding::Decoder<
3732                '_,
3733                fidl::encoding::DefaultFuchsiaResourceDialect,
3734            >,
3735            offset: usize,
3736            _depth: fidl::encoding::Depth,
3737        ) -> fidl::Result<()> {
3738            decoder.debug_check_bounds::<Self>(offset);
3739            // Verify that padding bytes are zero.
3740            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
3741            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3742            let mask = 0xffffffff00000000u64;
3743            let maskedval = padval & mask;
3744            if maskedval != 0 {
3745                return Err(fidl::Error::NonZeroPadding {
3746                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
3747                });
3748            }
3749            fidl::decode!(
3750                fidl::encoding::BoundedString<255>,
3751                fidl::encoding::DefaultFuchsiaResourceDialect,
3752                &mut self.protocol_name,
3753                decoder,
3754                offset + 0,
3755                _depth
3756            )?;
3757            fidl::decode!(
3758                fidl::encoding::Optional<fidl::encoding::BoundedString<255>>,
3759                fidl::encoding::DefaultFuchsiaResourceDialect,
3760                &mut self.child_name,
3761                decoder,
3762                offset + 16,
3763                _depth
3764            )?;
3765            fidl::decode!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.req, decoder, offset + 32, _depth)?;
3766            Ok(())
3767        }
3768    }
3769
3770    impl fidl::encoding::ResourceTypeMarker for ManagedRealmConnectToServiceRequest {
3771        type Borrowed<'a> = &'a mut Self;
3772        fn take_or_borrow<'a>(
3773            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3774        ) -> Self::Borrowed<'a> {
3775            value
3776        }
3777    }
3778
3779    unsafe impl fidl::encoding::TypeMarker for ManagedRealmConnectToServiceRequest {
3780        type Owned = Self;
3781
3782        #[inline(always)]
3783        fn inline_align(_context: fidl::encoding::Context) -> usize {
3784            8
3785        }
3786
3787        #[inline(always)]
3788        fn inline_size(_context: fidl::encoding::Context) -> usize {
3789            40
3790        }
3791    }
3792
3793    unsafe impl
3794        fidl::encoding::Encode<
3795            ManagedRealmConnectToServiceRequest,
3796            fidl::encoding::DefaultFuchsiaResourceDialect,
3797        > for &mut ManagedRealmConnectToServiceRequest
3798    {
3799        #[inline]
3800        unsafe fn encode(
3801            self,
3802            encoder: &mut fidl::encoding::Encoder<
3803                '_,
3804                fidl::encoding::DefaultFuchsiaResourceDialect,
3805            >,
3806            offset: usize,
3807            _depth: fidl::encoding::Depth,
3808        ) -> fidl::Result<()> {
3809            encoder.debug_check_bounds::<ManagedRealmConnectToServiceRequest>(offset);
3810            // Delegate to tuple encoding.
3811            fidl::encoding::Encode::<ManagedRealmConnectToServiceRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
3812                (
3813                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(&self.service_name),
3814                    <fidl::encoding::Optional<fidl::encoding::BoundedString<255>> as fidl::encoding::ValueTypeMarker>::borrow(&self.child_name),
3815                    <fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.req),
3816                ),
3817                encoder, offset, _depth
3818            )
3819        }
3820    }
3821    unsafe impl<
3822        T0: fidl::encoding::Encode<
3823                fidl::encoding::BoundedString<255>,
3824                fidl::encoding::DefaultFuchsiaResourceDialect,
3825            >,
3826        T1: fidl::encoding::Encode<
3827                fidl::encoding::Optional<fidl::encoding::BoundedString<255>>,
3828                fidl::encoding::DefaultFuchsiaResourceDialect,
3829            >,
3830        T2: fidl::encoding::Encode<
3831                fidl::encoding::HandleType<
3832                    fidl::Channel,
3833                    { fidl::ObjectType::CHANNEL.into_raw() },
3834                    2147483648,
3835                >,
3836                fidl::encoding::DefaultFuchsiaResourceDialect,
3837            >,
3838    >
3839        fidl::encoding::Encode<
3840            ManagedRealmConnectToServiceRequest,
3841            fidl::encoding::DefaultFuchsiaResourceDialect,
3842        > for (T0, T1, T2)
3843    {
3844        #[inline]
3845        unsafe fn encode(
3846            self,
3847            encoder: &mut fidl::encoding::Encoder<
3848                '_,
3849                fidl::encoding::DefaultFuchsiaResourceDialect,
3850            >,
3851            offset: usize,
3852            depth: fidl::encoding::Depth,
3853        ) -> fidl::Result<()> {
3854            encoder.debug_check_bounds::<ManagedRealmConnectToServiceRequest>(offset);
3855            // Zero out padding regions. There's no need to apply masks
3856            // because the unmasked parts will be overwritten by fields.
3857            unsafe {
3858                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
3859                (ptr as *mut u64).write_unaligned(0);
3860            }
3861            // Write the fields.
3862            self.0.encode(encoder, offset + 0, depth)?;
3863            self.1.encode(encoder, offset + 16, depth)?;
3864            self.2.encode(encoder, offset + 32, depth)?;
3865            Ok(())
3866        }
3867    }
3868
3869    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3870        for ManagedRealmConnectToServiceRequest
3871    {
3872        #[inline(always)]
3873        fn new_empty() -> Self {
3874            Self {
3875                service_name: fidl::new_empty!(
3876                    fidl::encoding::BoundedString<255>,
3877                    fidl::encoding::DefaultFuchsiaResourceDialect
3878                ),
3879                child_name: fidl::new_empty!(
3880                    fidl::encoding::Optional<fidl::encoding::BoundedString<255>>,
3881                    fidl::encoding::DefaultFuchsiaResourceDialect
3882                ),
3883                req: fidl::new_empty!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
3884            }
3885        }
3886
3887        #[inline]
3888        unsafe fn decode(
3889            &mut self,
3890            decoder: &mut fidl::encoding::Decoder<
3891                '_,
3892                fidl::encoding::DefaultFuchsiaResourceDialect,
3893            >,
3894            offset: usize,
3895            _depth: fidl::encoding::Depth,
3896        ) -> fidl::Result<()> {
3897            decoder.debug_check_bounds::<Self>(offset);
3898            // Verify that padding bytes are zero.
3899            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
3900            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3901            let mask = 0xffffffff00000000u64;
3902            let maskedval = padval & mask;
3903            if maskedval != 0 {
3904                return Err(fidl::Error::NonZeroPadding {
3905                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
3906                });
3907            }
3908            fidl::decode!(
3909                fidl::encoding::BoundedString<255>,
3910                fidl::encoding::DefaultFuchsiaResourceDialect,
3911                &mut self.service_name,
3912                decoder,
3913                offset + 0,
3914                _depth
3915            )?;
3916            fidl::decode!(
3917                fidl::encoding::Optional<fidl::encoding::BoundedString<255>>,
3918                fidl::encoding::DefaultFuchsiaResourceDialect,
3919                &mut self.child_name,
3920                decoder,
3921                offset + 16,
3922                _depth
3923            )?;
3924            fidl::decode!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.req, decoder, offset + 32, _depth)?;
3925            Ok(())
3926        }
3927    }
3928
3929    impl fidl::encoding::ResourceTypeMarker for ManagedRealmGetCrashListenerRequest {
3930        type Borrowed<'a> = &'a mut Self;
3931        fn take_or_borrow<'a>(
3932            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3933        ) -> Self::Borrowed<'a> {
3934            value
3935        }
3936    }
3937
3938    unsafe impl fidl::encoding::TypeMarker for ManagedRealmGetCrashListenerRequest {
3939        type Owned = Self;
3940
3941        #[inline(always)]
3942        fn inline_align(_context: fidl::encoding::Context) -> usize {
3943            4
3944        }
3945
3946        #[inline(always)]
3947        fn inline_size(_context: fidl::encoding::Context) -> usize {
3948            4
3949        }
3950    }
3951
3952    unsafe impl
3953        fidl::encoding::Encode<
3954            ManagedRealmGetCrashListenerRequest,
3955            fidl::encoding::DefaultFuchsiaResourceDialect,
3956        > for &mut ManagedRealmGetCrashListenerRequest
3957    {
3958        #[inline]
3959        unsafe fn encode(
3960            self,
3961            encoder: &mut fidl::encoding::Encoder<
3962                '_,
3963                fidl::encoding::DefaultFuchsiaResourceDialect,
3964            >,
3965            offset: usize,
3966            _depth: fidl::encoding::Depth,
3967        ) -> fidl::Result<()> {
3968            encoder.debug_check_bounds::<ManagedRealmGetCrashListenerRequest>(offset);
3969            // Delegate to tuple encoding.
3970            fidl::encoding::Encode::<ManagedRealmGetCrashListenerRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
3971                (
3972                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<CrashListenerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.listener),
3973                ),
3974                encoder, offset, _depth
3975            )
3976        }
3977    }
3978    unsafe impl<
3979        T0: fidl::encoding::Encode<
3980                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<CrashListenerMarker>>,
3981                fidl::encoding::DefaultFuchsiaResourceDialect,
3982            >,
3983    >
3984        fidl::encoding::Encode<
3985            ManagedRealmGetCrashListenerRequest,
3986            fidl::encoding::DefaultFuchsiaResourceDialect,
3987        > for (T0,)
3988    {
3989        #[inline]
3990        unsafe fn encode(
3991            self,
3992            encoder: &mut fidl::encoding::Encoder<
3993                '_,
3994                fidl::encoding::DefaultFuchsiaResourceDialect,
3995            >,
3996            offset: usize,
3997            depth: fidl::encoding::Depth,
3998        ) -> fidl::Result<()> {
3999            encoder.debug_check_bounds::<ManagedRealmGetCrashListenerRequest>(offset);
4000            // Zero out padding regions. There's no need to apply masks
4001            // because the unmasked parts will be overwritten by fields.
4002            // Write the fields.
4003            self.0.encode(encoder, offset + 0, depth)?;
4004            Ok(())
4005        }
4006    }
4007
4008    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4009        for ManagedRealmGetCrashListenerRequest
4010    {
4011        #[inline(always)]
4012        fn new_empty() -> Self {
4013            Self {
4014                listener: fidl::new_empty!(
4015                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<CrashListenerMarker>>,
4016                    fidl::encoding::DefaultFuchsiaResourceDialect
4017                ),
4018            }
4019        }
4020
4021        #[inline]
4022        unsafe fn decode(
4023            &mut self,
4024            decoder: &mut fidl::encoding::Decoder<
4025                '_,
4026                fidl::encoding::DefaultFuchsiaResourceDialect,
4027            >,
4028            offset: usize,
4029            _depth: fidl::encoding::Depth,
4030        ) -> fidl::Result<()> {
4031            decoder.debug_check_bounds::<Self>(offset);
4032            // Verify that padding bytes are zero.
4033            fidl::decode!(
4034                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<CrashListenerMarker>>,
4035                fidl::encoding::DefaultFuchsiaResourceDialect,
4036                &mut self.listener,
4037                decoder,
4038                offset + 0,
4039                _depth
4040            )?;
4041            Ok(())
4042        }
4043    }
4044
4045    impl fidl::encoding::ResourceTypeMarker for ManagedRealmGetDevfsRequest {
4046        type Borrowed<'a> = &'a mut Self;
4047        fn take_or_borrow<'a>(
4048            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4049        ) -> Self::Borrowed<'a> {
4050            value
4051        }
4052    }
4053
4054    unsafe impl fidl::encoding::TypeMarker for ManagedRealmGetDevfsRequest {
4055        type Owned = Self;
4056
4057        #[inline(always)]
4058        fn inline_align(_context: fidl::encoding::Context) -> usize {
4059            4
4060        }
4061
4062        #[inline(always)]
4063        fn inline_size(_context: fidl::encoding::Context) -> usize {
4064            4
4065        }
4066    }
4067
4068    unsafe impl
4069        fidl::encoding::Encode<
4070            ManagedRealmGetDevfsRequest,
4071            fidl::encoding::DefaultFuchsiaResourceDialect,
4072        > for &mut ManagedRealmGetDevfsRequest
4073    {
4074        #[inline]
4075        unsafe fn encode(
4076            self,
4077            encoder: &mut fidl::encoding::Encoder<
4078                '_,
4079                fidl::encoding::DefaultFuchsiaResourceDialect,
4080            >,
4081            offset: usize,
4082            _depth: fidl::encoding::Depth,
4083        ) -> fidl::Result<()> {
4084            encoder.debug_check_bounds::<ManagedRealmGetDevfsRequest>(offset);
4085            // Delegate to tuple encoding.
4086            fidl::encoding::Encode::<
4087                ManagedRealmGetDevfsRequest,
4088                fidl::encoding::DefaultFuchsiaResourceDialect,
4089            >::encode(
4090                (<fidl::encoding::Endpoint<
4091                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4092                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4093                    &mut self.devfs
4094                ),),
4095                encoder,
4096                offset,
4097                _depth,
4098            )
4099        }
4100    }
4101    unsafe impl<
4102        T0: fidl::encoding::Encode<
4103                fidl::encoding::Endpoint<
4104                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4105                >,
4106                fidl::encoding::DefaultFuchsiaResourceDialect,
4107            >,
4108    >
4109        fidl::encoding::Encode<
4110            ManagedRealmGetDevfsRequest,
4111            fidl::encoding::DefaultFuchsiaResourceDialect,
4112        > for (T0,)
4113    {
4114        #[inline]
4115        unsafe fn encode(
4116            self,
4117            encoder: &mut fidl::encoding::Encoder<
4118                '_,
4119                fidl::encoding::DefaultFuchsiaResourceDialect,
4120            >,
4121            offset: usize,
4122            depth: fidl::encoding::Depth,
4123        ) -> fidl::Result<()> {
4124            encoder.debug_check_bounds::<ManagedRealmGetDevfsRequest>(offset);
4125            // Zero out padding regions. There's no need to apply masks
4126            // because the unmasked parts will be overwritten by fields.
4127            // Write the fields.
4128            self.0.encode(encoder, offset + 0, depth)?;
4129            Ok(())
4130        }
4131    }
4132
4133    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4134        for ManagedRealmGetDevfsRequest
4135    {
4136        #[inline(always)]
4137        fn new_empty() -> Self {
4138            Self {
4139                devfs: fidl::new_empty!(
4140                    fidl::encoding::Endpoint<
4141                        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4142                    >,
4143                    fidl::encoding::DefaultFuchsiaResourceDialect
4144                ),
4145            }
4146        }
4147
4148        #[inline]
4149        unsafe fn decode(
4150            &mut self,
4151            decoder: &mut fidl::encoding::Decoder<
4152                '_,
4153                fidl::encoding::DefaultFuchsiaResourceDialect,
4154            >,
4155            offset: usize,
4156            _depth: fidl::encoding::Depth,
4157        ) -> fidl::Result<()> {
4158            decoder.debug_check_bounds::<Self>(offset);
4159            // Verify that padding bytes are zero.
4160            fidl::decode!(
4161                fidl::encoding::Endpoint<
4162                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4163                >,
4164                fidl::encoding::DefaultFuchsiaResourceDialect,
4165                &mut self.devfs,
4166                decoder,
4167                offset + 0,
4168                _depth
4169            )?;
4170            Ok(())
4171        }
4172    }
4173
4174    impl fidl::encoding::ResourceTypeMarker for ManagedRealmOpenDiagnosticsDirectoryRequest {
4175        type Borrowed<'a> = &'a mut Self;
4176        fn take_or_borrow<'a>(
4177            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4178        ) -> Self::Borrowed<'a> {
4179            value
4180        }
4181    }
4182
4183    unsafe impl fidl::encoding::TypeMarker for ManagedRealmOpenDiagnosticsDirectoryRequest {
4184        type Owned = Self;
4185
4186        #[inline(always)]
4187        fn inline_align(_context: fidl::encoding::Context) -> usize {
4188            8
4189        }
4190
4191        #[inline(always)]
4192        fn inline_size(_context: fidl::encoding::Context) -> usize {
4193            24
4194        }
4195    }
4196
4197    unsafe impl
4198        fidl::encoding::Encode<
4199            ManagedRealmOpenDiagnosticsDirectoryRequest,
4200            fidl::encoding::DefaultFuchsiaResourceDialect,
4201        > for &mut ManagedRealmOpenDiagnosticsDirectoryRequest
4202    {
4203        #[inline]
4204        unsafe fn encode(
4205            self,
4206            encoder: &mut fidl::encoding::Encoder<
4207                '_,
4208                fidl::encoding::DefaultFuchsiaResourceDialect,
4209            >,
4210            offset: usize,
4211            _depth: fidl::encoding::Depth,
4212        ) -> fidl::Result<()> {
4213            encoder.debug_check_bounds::<ManagedRealmOpenDiagnosticsDirectoryRequest>(offset);
4214            // Delegate to tuple encoding.
4215            fidl::encoding::Encode::<
4216                ManagedRealmOpenDiagnosticsDirectoryRequest,
4217                fidl::encoding::DefaultFuchsiaResourceDialect,
4218            >::encode(
4219                (
4220                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(
4221                        &self.child_name,
4222                    ),
4223                    <fidl::encoding::Endpoint<
4224                        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4225                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4226                        &mut self.directory
4227                    ),
4228                ),
4229                encoder,
4230                offset,
4231                _depth,
4232            )
4233        }
4234    }
4235    unsafe impl<
4236        T0: fidl::encoding::Encode<
4237                fidl::encoding::BoundedString<255>,
4238                fidl::encoding::DefaultFuchsiaResourceDialect,
4239            >,
4240        T1: fidl::encoding::Encode<
4241                fidl::encoding::Endpoint<
4242                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4243                >,
4244                fidl::encoding::DefaultFuchsiaResourceDialect,
4245            >,
4246    >
4247        fidl::encoding::Encode<
4248            ManagedRealmOpenDiagnosticsDirectoryRequest,
4249            fidl::encoding::DefaultFuchsiaResourceDialect,
4250        > for (T0, T1)
4251    {
4252        #[inline]
4253        unsafe fn encode(
4254            self,
4255            encoder: &mut fidl::encoding::Encoder<
4256                '_,
4257                fidl::encoding::DefaultFuchsiaResourceDialect,
4258            >,
4259            offset: usize,
4260            depth: fidl::encoding::Depth,
4261        ) -> fidl::Result<()> {
4262            encoder.debug_check_bounds::<ManagedRealmOpenDiagnosticsDirectoryRequest>(offset);
4263            // Zero out padding regions. There's no need to apply masks
4264            // because the unmasked parts will be overwritten by fields.
4265            unsafe {
4266                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
4267                (ptr as *mut u64).write_unaligned(0);
4268            }
4269            // Write the fields.
4270            self.0.encode(encoder, offset + 0, depth)?;
4271            self.1.encode(encoder, offset + 16, depth)?;
4272            Ok(())
4273        }
4274    }
4275
4276    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4277        for ManagedRealmOpenDiagnosticsDirectoryRequest
4278    {
4279        #[inline(always)]
4280        fn new_empty() -> Self {
4281            Self {
4282                child_name: fidl::new_empty!(
4283                    fidl::encoding::BoundedString<255>,
4284                    fidl::encoding::DefaultFuchsiaResourceDialect
4285                ),
4286                directory: fidl::new_empty!(
4287                    fidl::encoding::Endpoint<
4288                        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4289                    >,
4290                    fidl::encoding::DefaultFuchsiaResourceDialect
4291                ),
4292            }
4293        }
4294
4295        #[inline]
4296        unsafe fn decode(
4297            &mut self,
4298            decoder: &mut fidl::encoding::Decoder<
4299                '_,
4300                fidl::encoding::DefaultFuchsiaResourceDialect,
4301            >,
4302            offset: usize,
4303            _depth: fidl::encoding::Depth,
4304        ) -> fidl::Result<()> {
4305            decoder.debug_check_bounds::<Self>(offset);
4306            // Verify that padding bytes are zero.
4307            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4308            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4309            let mask = 0xffffffff00000000u64;
4310            let maskedval = padval & mask;
4311            if maskedval != 0 {
4312                return Err(fidl::Error::NonZeroPadding {
4313                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4314                });
4315            }
4316            fidl::decode!(
4317                fidl::encoding::BoundedString<255>,
4318                fidl::encoding::DefaultFuchsiaResourceDialect,
4319                &mut self.child_name,
4320                decoder,
4321                offset + 0,
4322                _depth
4323            )?;
4324            fidl::decode!(
4325                fidl::encoding::Endpoint<
4326                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
4327                >,
4328                fidl::encoding::DefaultFuchsiaResourceDialect,
4329                &mut self.directory,
4330                decoder,
4331                offset + 16,
4332                _depth
4333            )?;
4334            Ok(())
4335        }
4336    }
4337
4338    impl fidl::encoding::ResourceTypeMarker for SandboxCreateRealmRequest {
4339        type Borrowed<'a> = &'a mut Self;
4340        fn take_or_borrow<'a>(
4341            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4342        ) -> Self::Borrowed<'a> {
4343            value
4344        }
4345    }
4346
4347    unsafe impl fidl::encoding::TypeMarker for SandboxCreateRealmRequest {
4348        type Owned = Self;
4349
4350        #[inline(always)]
4351        fn inline_align(_context: fidl::encoding::Context) -> usize {
4352            8
4353        }
4354
4355        #[inline(always)]
4356        fn inline_size(_context: fidl::encoding::Context) -> usize {
4357            24
4358        }
4359    }
4360
4361    unsafe impl
4362        fidl::encoding::Encode<
4363            SandboxCreateRealmRequest,
4364            fidl::encoding::DefaultFuchsiaResourceDialect,
4365        > for &mut SandboxCreateRealmRequest
4366    {
4367        #[inline]
4368        unsafe fn encode(
4369            self,
4370            encoder: &mut fidl::encoding::Encoder<
4371                '_,
4372                fidl::encoding::DefaultFuchsiaResourceDialect,
4373            >,
4374            offset: usize,
4375            _depth: fidl::encoding::Depth,
4376        ) -> fidl::Result<()> {
4377            encoder.debug_check_bounds::<SandboxCreateRealmRequest>(offset);
4378            // Delegate to tuple encoding.
4379            fidl::encoding::Encode::<SandboxCreateRealmRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
4380                (
4381                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ManagedRealmMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.realm),
4382                    <RealmOptions as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.options),
4383                ),
4384                encoder, offset, _depth
4385            )
4386        }
4387    }
4388    unsafe impl<
4389        T0: fidl::encoding::Encode<
4390                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ManagedRealmMarker>>,
4391                fidl::encoding::DefaultFuchsiaResourceDialect,
4392            >,
4393        T1: fidl::encoding::Encode<RealmOptions, fidl::encoding::DefaultFuchsiaResourceDialect>,
4394    >
4395        fidl::encoding::Encode<
4396            SandboxCreateRealmRequest,
4397            fidl::encoding::DefaultFuchsiaResourceDialect,
4398        > for (T0, T1)
4399    {
4400        #[inline]
4401        unsafe fn encode(
4402            self,
4403            encoder: &mut fidl::encoding::Encoder<
4404                '_,
4405                fidl::encoding::DefaultFuchsiaResourceDialect,
4406            >,
4407            offset: usize,
4408            depth: fidl::encoding::Depth,
4409        ) -> fidl::Result<()> {
4410            encoder.debug_check_bounds::<SandboxCreateRealmRequest>(offset);
4411            // Zero out padding regions. There's no need to apply masks
4412            // because the unmasked parts will be overwritten by fields.
4413            unsafe {
4414                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
4415                (ptr as *mut u64).write_unaligned(0);
4416            }
4417            // Write the fields.
4418            self.0.encode(encoder, offset + 0, depth)?;
4419            self.1.encode(encoder, offset + 8, depth)?;
4420            Ok(())
4421        }
4422    }
4423
4424    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4425        for SandboxCreateRealmRequest
4426    {
4427        #[inline(always)]
4428        fn new_empty() -> Self {
4429            Self {
4430                realm: fidl::new_empty!(
4431                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ManagedRealmMarker>>,
4432                    fidl::encoding::DefaultFuchsiaResourceDialect
4433                ),
4434                options: fidl::new_empty!(
4435                    RealmOptions,
4436                    fidl::encoding::DefaultFuchsiaResourceDialect
4437                ),
4438            }
4439        }
4440
4441        #[inline]
4442        unsafe fn decode(
4443            &mut self,
4444            decoder: &mut fidl::encoding::Decoder<
4445                '_,
4446                fidl::encoding::DefaultFuchsiaResourceDialect,
4447            >,
4448            offset: usize,
4449            _depth: fidl::encoding::Depth,
4450        ) -> fidl::Result<()> {
4451            decoder.debug_check_bounds::<Self>(offset);
4452            // Verify that padding bytes are zero.
4453            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
4454            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4455            let mask = 0xffffffff00000000u64;
4456            let maskedval = padval & mask;
4457            if maskedval != 0 {
4458                return Err(fidl::Error::NonZeroPadding {
4459                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
4460                });
4461            }
4462            fidl::decode!(
4463                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ManagedRealmMarker>>,
4464                fidl::encoding::DefaultFuchsiaResourceDialect,
4465                &mut self.realm,
4466                decoder,
4467                offset + 0,
4468                _depth
4469            )?;
4470            fidl::decode!(
4471                RealmOptions,
4472                fidl::encoding::DefaultFuchsiaResourceDialect,
4473                &mut self.options,
4474                decoder,
4475                offset + 8,
4476                _depth
4477            )?;
4478            Ok(())
4479        }
4480    }
4481
4482    impl fidl::encoding::ResourceTypeMarker for SandboxGetNetworkContextRequest {
4483        type Borrowed<'a> = &'a mut Self;
4484        fn take_or_borrow<'a>(
4485            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4486        ) -> Self::Borrowed<'a> {
4487            value
4488        }
4489    }
4490
4491    unsafe impl fidl::encoding::TypeMarker for SandboxGetNetworkContextRequest {
4492        type Owned = Self;
4493
4494        #[inline(always)]
4495        fn inline_align(_context: fidl::encoding::Context) -> usize {
4496            4
4497        }
4498
4499        #[inline(always)]
4500        fn inline_size(_context: fidl::encoding::Context) -> usize {
4501            4
4502        }
4503    }
4504
4505    unsafe impl
4506        fidl::encoding::Encode<
4507            SandboxGetNetworkContextRequest,
4508            fidl::encoding::DefaultFuchsiaResourceDialect,
4509        > for &mut SandboxGetNetworkContextRequest
4510    {
4511        #[inline]
4512        unsafe fn encode(
4513            self,
4514            encoder: &mut fidl::encoding::Encoder<
4515                '_,
4516                fidl::encoding::DefaultFuchsiaResourceDialect,
4517            >,
4518            offset: usize,
4519            _depth: fidl::encoding::Depth,
4520        ) -> fidl::Result<()> {
4521            encoder.debug_check_bounds::<SandboxGetNetworkContextRequest>(offset);
4522            // Delegate to tuple encoding.
4523            fidl::encoding::Encode::<
4524                SandboxGetNetworkContextRequest,
4525                fidl::encoding::DefaultFuchsiaResourceDialect,
4526            >::encode(
4527                (<fidl::encoding::Endpoint<
4528                    fidl::endpoints::ServerEnd<fidl_fuchsia_netemul_network::NetworkContextMarker>,
4529                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4530                    &mut self.network_context,
4531                ),),
4532                encoder,
4533                offset,
4534                _depth,
4535            )
4536        }
4537    }
4538    unsafe impl<
4539        T0: fidl::encoding::Encode<
4540                fidl::encoding::Endpoint<
4541                    fidl::endpoints::ServerEnd<fidl_fuchsia_netemul_network::NetworkContextMarker>,
4542                >,
4543                fidl::encoding::DefaultFuchsiaResourceDialect,
4544            >,
4545    >
4546        fidl::encoding::Encode<
4547            SandboxGetNetworkContextRequest,
4548            fidl::encoding::DefaultFuchsiaResourceDialect,
4549        > for (T0,)
4550    {
4551        #[inline]
4552        unsafe fn encode(
4553            self,
4554            encoder: &mut fidl::encoding::Encoder<
4555                '_,
4556                fidl::encoding::DefaultFuchsiaResourceDialect,
4557            >,
4558            offset: usize,
4559            depth: fidl::encoding::Depth,
4560        ) -> fidl::Result<()> {
4561            encoder.debug_check_bounds::<SandboxGetNetworkContextRequest>(offset);
4562            // Zero out padding regions. There's no need to apply masks
4563            // because the unmasked parts will be overwritten by fields.
4564            // Write the fields.
4565            self.0.encode(encoder, offset + 0, depth)?;
4566            Ok(())
4567        }
4568    }
4569
4570    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4571        for SandboxGetNetworkContextRequest
4572    {
4573        #[inline(always)]
4574        fn new_empty() -> Self {
4575            Self {
4576                network_context: fidl::new_empty!(
4577                    fidl::encoding::Endpoint<
4578                        fidl::endpoints::ServerEnd<
4579                            fidl_fuchsia_netemul_network::NetworkContextMarker,
4580                        >,
4581                    >,
4582                    fidl::encoding::DefaultFuchsiaResourceDialect
4583                ),
4584            }
4585        }
4586
4587        #[inline]
4588        unsafe fn decode(
4589            &mut self,
4590            decoder: &mut fidl::encoding::Decoder<
4591                '_,
4592                fidl::encoding::DefaultFuchsiaResourceDialect,
4593            >,
4594            offset: usize,
4595            _depth: fidl::encoding::Depth,
4596        ) -> fidl::Result<()> {
4597            decoder.debug_check_bounds::<Self>(offset);
4598            // Verify that padding bytes are zero.
4599            fidl::decode!(
4600                fidl::encoding::Endpoint<
4601                    fidl::endpoints::ServerEnd<fidl_fuchsia_netemul_network::NetworkContextMarker>,
4602                >,
4603                fidl::encoding::DefaultFuchsiaResourceDialect,
4604                &mut self.network_context,
4605                decoder,
4606                offset + 0,
4607                _depth
4608            )?;
4609            Ok(())
4610        }
4611    }
4612
4613    impl ChildDef {
4614        #[inline(always)]
4615        fn max_ordinal_present(&self) -> u64 {
4616            if let Some(_) = self.config_values {
4617                return 7;
4618            }
4619            if let Some(_) = self.eager {
4620                return 6;
4621            }
4622            if let Some(_) = self.program_args {
4623                return 5;
4624            }
4625            if let Some(_) = self.uses {
4626                return 4;
4627            }
4628            if let Some(_) = self.exposes {
4629                return 3;
4630            }
4631            if let Some(_) = self.name {
4632                return 2;
4633            }
4634            if let Some(_) = self.source {
4635                return 1;
4636            }
4637            0
4638        }
4639    }
4640
4641    impl fidl::encoding::ResourceTypeMarker for ChildDef {
4642        type Borrowed<'a> = &'a mut Self;
4643        fn take_or_borrow<'a>(
4644            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4645        ) -> Self::Borrowed<'a> {
4646            value
4647        }
4648    }
4649
4650    unsafe impl fidl::encoding::TypeMarker for ChildDef {
4651        type Owned = Self;
4652
4653        #[inline(always)]
4654        fn inline_align(_context: fidl::encoding::Context) -> usize {
4655            8
4656        }
4657
4658        #[inline(always)]
4659        fn inline_size(_context: fidl::encoding::Context) -> usize {
4660            16
4661        }
4662    }
4663
4664    unsafe impl fidl::encoding::Encode<ChildDef, fidl::encoding::DefaultFuchsiaResourceDialect>
4665        for &mut ChildDef
4666    {
4667        unsafe fn encode(
4668            self,
4669            encoder: &mut fidl::encoding::Encoder<
4670                '_,
4671                fidl::encoding::DefaultFuchsiaResourceDialect,
4672            >,
4673            offset: usize,
4674            mut depth: fidl::encoding::Depth,
4675        ) -> fidl::Result<()> {
4676            encoder.debug_check_bounds::<ChildDef>(offset);
4677            // Vector header
4678            let max_ordinal: u64 = self.max_ordinal_present();
4679            encoder.write_num(max_ordinal, offset);
4680            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4681            // Calling encoder.out_of_line_offset(0) is not allowed.
4682            if max_ordinal == 0 {
4683                return Ok(());
4684            }
4685            depth.increment()?;
4686            let envelope_size = 8;
4687            let bytes_len = max_ordinal as usize * envelope_size;
4688            #[allow(unused_variables)]
4689            let offset = encoder.out_of_line_offset(bytes_len);
4690            let mut _prev_end_offset: usize = 0;
4691            if 1 > max_ordinal {
4692                return Ok(());
4693            }
4694
4695            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4696            // are envelope_size bytes.
4697            let cur_offset: usize = (1 - 1) * envelope_size;
4698
4699            // Zero reserved fields.
4700            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4701
4702            // Safety:
4703            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4704            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4705            //   envelope_size bytes, there is always sufficient room.
4706            fidl::encoding::encode_in_envelope_optional::<
4707                ChildSource,
4708                fidl::encoding::DefaultFuchsiaResourceDialect,
4709            >(
4710                self.source
4711                    .as_mut()
4712                    .map(<ChildSource as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
4713                encoder,
4714                offset + cur_offset,
4715                depth,
4716            )?;
4717
4718            _prev_end_offset = cur_offset + envelope_size;
4719            if 2 > max_ordinal {
4720                return Ok(());
4721            }
4722
4723            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4724            // are envelope_size bytes.
4725            let cur_offset: usize = (2 - 1) * envelope_size;
4726
4727            // Zero reserved fields.
4728            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4729
4730            // Safety:
4731            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4732            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4733            //   envelope_size bytes, there is always sufficient room.
4734            fidl::encoding::encode_in_envelope_optional::<
4735                fidl::encoding::BoundedString<255>,
4736                fidl::encoding::DefaultFuchsiaResourceDialect,
4737            >(
4738                self.name.as_ref().map(
4739                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
4740                ),
4741                encoder,
4742                offset + cur_offset,
4743                depth,
4744            )?;
4745
4746            _prev_end_offset = cur_offset + envelope_size;
4747            if 3 > max_ordinal {
4748                return Ok(());
4749            }
4750
4751            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4752            // are envelope_size bytes.
4753            let cur_offset: usize = (3 - 1) * envelope_size;
4754
4755            // Zero reserved fields.
4756            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4757
4758            // Safety:
4759            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4760            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4761            //   envelope_size bytes, there is always sufficient room.
4762            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<255>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
4763            self.exposes.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<255>> as fidl::encoding::ValueTypeMarker>::borrow),
4764            encoder, offset + cur_offset, depth
4765        )?;
4766
4767            _prev_end_offset = cur_offset + envelope_size;
4768            if 4 > max_ordinal {
4769                return Ok(());
4770            }
4771
4772            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4773            // are envelope_size bytes.
4774            let cur_offset: usize = (4 - 1) * envelope_size;
4775
4776            // Zero reserved fields.
4777            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4778
4779            // Safety:
4780            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4781            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4782            //   envelope_size bytes, there is always sufficient room.
4783            fidl::encoding::encode_in_envelope_optional::<
4784                ChildUses,
4785                fidl::encoding::DefaultFuchsiaResourceDialect,
4786            >(
4787                self.uses.as_ref().map(<ChildUses as fidl::encoding::ValueTypeMarker>::borrow),
4788                encoder,
4789                offset + cur_offset,
4790                depth,
4791            )?;
4792
4793            _prev_end_offset = cur_offset + envelope_size;
4794            if 5 > max_ordinal {
4795                return Ok(());
4796            }
4797
4798            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4799            // are envelope_size bytes.
4800            let cur_offset: usize = (5 - 1) * envelope_size;
4801
4802            // Zero reserved fields.
4803            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4804
4805            // Safety:
4806            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4807            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4808            //   envelope_size bytes, there is always sufficient room.
4809            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>, fidl::encoding::DefaultFuchsiaResourceDialect>(
4810            self.program_args.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow),
4811            encoder, offset + cur_offset, depth
4812        )?;
4813
4814            _prev_end_offset = cur_offset + envelope_size;
4815            if 6 > max_ordinal {
4816                return Ok(());
4817            }
4818
4819            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4820            // are envelope_size bytes.
4821            let cur_offset: usize = (6 - 1) * envelope_size;
4822
4823            // Zero reserved fields.
4824            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4825
4826            // Safety:
4827            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4828            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4829            //   envelope_size bytes, there is always sufficient room.
4830            fidl::encoding::encode_in_envelope_optional::<
4831                bool,
4832                fidl::encoding::DefaultFuchsiaResourceDialect,
4833            >(
4834                self.eager.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4835                encoder,
4836                offset + cur_offset,
4837                depth,
4838            )?;
4839
4840            _prev_end_offset = cur_offset + envelope_size;
4841            if 7 > max_ordinal {
4842                return Ok(());
4843            }
4844
4845            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4846            // are envelope_size bytes.
4847            let cur_offset: usize = (7 - 1) * envelope_size;
4848
4849            // Zero reserved fields.
4850            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4851
4852            // Safety:
4853            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4854            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4855            //   envelope_size bytes, there is always sufficient room.
4856            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ChildConfigValue>, fidl::encoding::DefaultFuchsiaResourceDialect>(
4857            self.config_values.as_ref().map(<fidl::encoding::UnboundedVector<ChildConfigValue> as fidl::encoding::ValueTypeMarker>::borrow),
4858            encoder, offset + cur_offset, depth
4859        )?;
4860
4861            _prev_end_offset = cur_offset + envelope_size;
4862
4863            Ok(())
4864        }
4865    }
4866
4867    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for ChildDef {
4868        #[inline(always)]
4869        fn new_empty() -> Self {
4870            Self::default()
4871        }
4872
4873        unsafe fn decode(
4874            &mut self,
4875            decoder: &mut fidl::encoding::Decoder<
4876                '_,
4877                fidl::encoding::DefaultFuchsiaResourceDialect,
4878            >,
4879            offset: usize,
4880            mut depth: fidl::encoding::Depth,
4881        ) -> fidl::Result<()> {
4882            decoder.debug_check_bounds::<Self>(offset);
4883            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4884                None => return Err(fidl::Error::NotNullable),
4885                Some(len) => len,
4886            };
4887            // Calling decoder.out_of_line_offset(0) is not allowed.
4888            if len == 0 {
4889                return Ok(());
4890            };
4891            depth.increment()?;
4892            let envelope_size = 8;
4893            let bytes_len = len * envelope_size;
4894            let offset = decoder.out_of_line_offset(bytes_len)?;
4895            // Decode the envelope for each type.
4896            let mut _next_ordinal_to_read = 0;
4897            let mut next_offset = offset;
4898            let end_offset = offset + bytes_len;
4899            _next_ordinal_to_read += 1;
4900            if next_offset >= end_offset {
4901                return Ok(());
4902            }
4903
4904            // Decode unknown envelopes for gaps in ordinals.
4905            while _next_ordinal_to_read < 1 {
4906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4907                _next_ordinal_to_read += 1;
4908                next_offset += envelope_size;
4909            }
4910
4911            let next_out_of_line = decoder.next_out_of_line();
4912            let handles_before = decoder.remaining_handles();
4913            if let Some((inlined, num_bytes, num_handles)) =
4914                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4915            {
4916                let member_inline_size =
4917                    <ChildSource as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4918                if inlined != (member_inline_size <= 4) {
4919                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4920                }
4921                let inner_offset;
4922                let mut inner_depth = depth.clone();
4923                if inlined {
4924                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4925                    inner_offset = next_offset;
4926                } else {
4927                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4928                    inner_depth.increment()?;
4929                }
4930                let val_ref = self.source.get_or_insert_with(|| {
4931                    fidl::new_empty!(ChildSource, fidl::encoding::DefaultFuchsiaResourceDialect)
4932                });
4933                fidl::decode!(
4934                    ChildSource,
4935                    fidl::encoding::DefaultFuchsiaResourceDialect,
4936                    val_ref,
4937                    decoder,
4938                    inner_offset,
4939                    inner_depth
4940                )?;
4941                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4942                {
4943                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4944                }
4945                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4946                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4947                }
4948            }
4949
4950            next_offset += envelope_size;
4951            _next_ordinal_to_read += 1;
4952            if next_offset >= end_offset {
4953                return Ok(());
4954            }
4955
4956            // Decode unknown envelopes for gaps in ordinals.
4957            while _next_ordinal_to_read < 2 {
4958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4959                _next_ordinal_to_read += 1;
4960                next_offset += envelope_size;
4961            }
4962
4963            let next_out_of_line = decoder.next_out_of_line();
4964            let handles_before = decoder.remaining_handles();
4965            if let Some((inlined, num_bytes, num_handles)) =
4966                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4967            {
4968                let member_inline_size =
4969                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
4970                        decoder.context,
4971                    );
4972                if inlined != (member_inline_size <= 4) {
4973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4974                }
4975                let inner_offset;
4976                let mut inner_depth = depth.clone();
4977                if inlined {
4978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4979                    inner_offset = next_offset;
4980                } else {
4981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4982                    inner_depth.increment()?;
4983                }
4984                let val_ref = self.name.get_or_insert_with(|| {
4985                    fidl::new_empty!(
4986                        fidl::encoding::BoundedString<255>,
4987                        fidl::encoding::DefaultFuchsiaResourceDialect
4988                    )
4989                });
4990                fidl::decode!(
4991                    fidl::encoding::BoundedString<255>,
4992                    fidl::encoding::DefaultFuchsiaResourceDialect,
4993                    val_ref,
4994                    decoder,
4995                    inner_offset,
4996                    inner_depth
4997                )?;
4998                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4999                {
5000                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5001                }
5002                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5003                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5004                }
5005            }
5006
5007            next_offset += envelope_size;
5008            _next_ordinal_to_read += 1;
5009            if next_offset >= end_offset {
5010                return Ok(());
5011            }
5012
5013            // Decode unknown envelopes for gaps in ordinals.
5014            while _next_ordinal_to_read < 3 {
5015                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5016                _next_ordinal_to_read += 1;
5017                next_offset += envelope_size;
5018            }
5019
5020            let next_out_of_line = decoder.next_out_of_line();
5021            let handles_before = decoder.remaining_handles();
5022            if let Some((inlined, num_bytes, num_handles)) =
5023                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5024            {
5025                let member_inline_size = <fidl::encoding::UnboundedVector<
5026                    fidl::encoding::BoundedString<255>,
5027                > as fidl::encoding::TypeMarker>::inline_size(
5028                    decoder.context
5029                );
5030                if inlined != (member_inline_size <= 4) {
5031                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5032                }
5033                let inner_offset;
5034                let mut inner_depth = depth.clone();
5035                if inlined {
5036                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5037                    inner_offset = next_offset;
5038                } else {
5039                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5040                    inner_depth.increment()?;
5041                }
5042                let val_ref = self.exposes.get_or_insert_with(|| {
5043                    fidl::new_empty!(
5044                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<255>>,
5045                        fidl::encoding::DefaultFuchsiaResourceDialect
5046                    )
5047                });
5048                fidl::decode!(
5049                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<255>>,
5050                    fidl::encoding::DefaultFuchsiaResourceDialect,
5051                    val_ref,
5052                    decoder,
5053                    inner_offset,
5054                    inner_depth
5055                )?;
5056                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5057                {
5058                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5059                }
5060                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5061                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5062                }
5063            }
5064
5065            next_offset += envelope_size;
5066            _next_ordinal_to_read += 1;
5067            if next_offset >= end_offset {
5068                return Ok(());
5069            }
5070
5071            // Decode unknown envelopes for gaps in ordinals.
5072            while _next_ordinal_to_read < 4 {
5073                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5074                _next_ordinal_to_read += 1;
5075                next_offset += envelope_size;
5076            }
5077
5078            let next_out_of_line = decoder.next_out_of_line();
5079            let handles_before = decoder.remaining_handles();
5080            if let Some((inlined, num_bytes, num_handles)) =
5081                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5082            {
5083                let member_inline_size =
5084                    <ChildUses as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5085                if inlined != (member_inline_size <= 4) {
5086                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5087                }
5088                let inner_offset;
5089                let mut inner_depth = depth.clone();
5090                if inlined {
5091                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5092                    inner_offset = next_offset;
5093                } else {
5094                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5095                    inner_depth.increment()?;
5096                }
5097                let val_ref = self.uses.get_or_insert_with(|| {
5098                    fidl::new_empty!(ChildUses, fidl::encoding::DefaultFuchsiaResourceDialect)
5099                });
5100                fidl::decode!(
5101                    ChildUses,
5102                    fidl::encoding::DefaultFuchsiaResourceDialect,
5103                    val_ref,
5104                    decoder,
5105                    inner_offset,
5106                    inner_depth
5107                )?;
5108                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5109                {
5110                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5111                }
5112                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5113                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5114                }
5115            }
5116
5117            next_offset += envelope_size;
5118            _next_ordinal_to_read += 1;
5119            if next_offset >= end_offset {
5120                return Ok(());
5121            }
5122
5123            // Decode unknown envelopes for gaps in ordinals.
5124            while _next_ordinal_to_read < 5 {
5125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5126                _next_ordinal_to_read += 1;
5127                next_offset += envelope_size;
5128            }
5129
5130            let next_out_of_line = decoder.next_out_of_line();
5131            let handles_before = decoder.remaining_handles();
5132            if let Some((inlined, num_bytes, num_handles)) =
5133                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5134            {
5135                let member_inline_size = <fidl::encoding::UnboundedVector<
5136                    fidl::encoding::UnboundedString,
5137                > as fidl::encoding::TypeMarker>::inline_size(
5138                    decoder.context
5139                );
5140                if inlined != (member_inline_size <= 4) {
5141                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5142                }
5143                let inner_offset;
5144                let mut inner_depth = depth.clone();
5145                if inlined {
5146                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5147                    inner_offset = next_offset;
5148                } else {
5149                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5150                    inner_depth.increment()?;
5151                }
5152                let val_ref = self.program_args.get_or_insert_with(|| {
5153                    fidl::new_empty!(
5154                        fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
5155                        fidl::encoding::DefaultFuchsiaResourceDialect
5156                    )
5157                });
5158                fidl::decode!(
5159                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
5160                    fidl::encoding::DefaultFuchsiaResourceDialect,
5161                    val_ref,
5162                    decoder,
5163                    inner_offset,
5164                    inner_depth
5165                )?;
5166                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5167                {
5168                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5169                }
5170                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5171                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5172                }
5173            }
5174
5175            next_offset += envelope_size;
5176            _next_ordinal_to_read += 1;
5177            if next_offset >= end_offset {
5178                return Ok(());
5179            }
5180
5181            // Decode unknown envelopes for gaps in ordinals.
5182            while _next_ordinal_to_read < 6 {
5183                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5184                _next_ordinal_to_read += 1;
5185                next_offset += envelope_size;
5186            }
5187
5188            let next_out_of_line = decoder.next_out_of_line();
5189            let handles_before = decoder.remaining_handles();
5190            if let Some((inlined, num_bytes, num_handles)) =
5191                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5192            {
5193                let member_inline_size =
5194                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5195                if inlined != (member_inline_size <= 4) {
5196                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5197                }
5198                let inner_offset;
5199                let mut inner_depth = depth.clone();
5200                if inlined {
5201                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5202                    inner_offset = next_offset;
5203                } else {
5204                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5205                    inner_depth.increment()?;
5206                }
5207                let val_ref = self.eager.get_or_insert_with(|| {
5208                    fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
5209                });
5210                fidl::decode!(
5211                    bool,
5212                    fidl::encoding::DefaultFuchsiaResourceDialect,
5213                    val_ref,
5214                    decoder,
5215                    inner_offset,
5216                    inner_depth
5217                )?;
5218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5219                {
5220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5221                }
5222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5224                }
5225            }
5226
5227            next_offset += envelope_size;
5228            _next_ordinal_to_read += 1;
5229            if next_offset >= end_offset {
5230                return Ok(());
5231            }
5232
5233            // Decode unknown envelopes for gaps in ordinals.
5234            while _next_ordinal_to_read < 7 {
5235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5236                _next_ordinal_to_read += 1;
5237                next_offset += envelope_size;
5238            }
5239
5240            let next_out_of_line = decoder.next_out_of_line();
5241            let handles_before = decoder.remaining_handles();
5242            if let Some((inlined, num_bytes, num_handles)) =
5243                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5244            {
5245                let member_inline_size = <fidl::encoding::UnboundedVector<ChildConfigValue> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5246                if inlined != (member_inline_size <= 4) {
5247                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5248                }
5249                let inner_offset;
5250                let mut inner_depth = depth.clone();
5251                if inlined {
5252                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5253                    inner_offset = next_offset;
5254                } else {
5255                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5256                    inner_depth.increment()?;
5257                }
5258                let val_ref = self.config_values.get_or_insert_with(|| {
5259                    fidl::new_empty!(
5260                        fidl::encoding::UnboundedVector<ChildConfigValue>,
5261                        fidl::encoding::DefaultFuchsiaResourceDialect
5262                    )
5263                });
5264                fidl::decode!(
5265                    fidl::encoding::UnboundedVector<ChildConfigValue>,
5266                    fidl::encoding::DefaultFuchsiaResourceDialect,
5267                    val_ref,
5268                    decoder,
5269                    inner_offset,
5270                    inner_depth
5271                )?;
5272                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5273                {
5274                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5275                }
5276                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5277                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5278                }
5279            }
5280
5281            next_offset += envelope_size;
5282
5283            // Decode the remaining unknown envelopes.
5284            while next_offset < end_offset {
5285                _next_ordinal_to_read += 1;
5286                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5287                next_offset += envelope_size;
5288            }
5289
5290            Ok(())
5291        }
5292    }
5293
5294    impl InterfaceOptions {
5295        #[inline(always)]
5296        fn max_ordinal_present(&self) -> u64 {
5297            if let Some(_) = self.ipv6_multicast_neighbor_solicitations {
5298                return 9;
5299            }
5300            if let Some(_) = self.ipv4_multicast_neighbor_solicitations {
5301                return 8;
5302            }
5303            if let Some(_) = self.enable_ipv6_forwarding {
5304                return 7;
5305            }
5306            if let Some(_) = self.enable_ipv4_forwarding {
5307                return 6;
5308            }
5309            if let Some(_) = self.gateway {
5310                return 5;
5311            }
5312            if let Some(_) = self.static_ips {
5313                return 4;
5314            }
5315            if let Some(_) = self.without_autogenerated_addresses {
5316                return 3;
5317            }
5318            if let Some(_) = self.device {
5319                return 2;
5320            }
5321            if let Some(_) = self.name {
5322                return 1;
5323            }
5324            0
5325        }
5326    }
5327
5328    impl fidl::encoding::ResourceTypeMarker for InterfaceOptions {
5329        type Borrowed<'a> = &'a mut Self;
5330        fn take_or_borrow<'a>(
5331            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5332        ) -> Self::Borrowed<'a> {
5333            value
5334        }
5335    }
5336
5337    unsafe impl fidl::encoding::TypeMarker for InterfaceOptions {
5338        type Owned = Self;
5339
5340        #[inline(always)]
5341        fn inline_align(_context: fidl::encoding::Context) -> usize {
5342            8
5343        }
5344
5345        #[inline(always)]
5346        fn inline_size(_context: fidl::encoding::Context) -> usize {
5347            16
5348        }
5349    }
5350
5351    unsafe impl
5352        fidl::encoding::Encode<InterfaceOptions, fidl::encoding::DefaultFuchsiaResourceDialect>
5353        for &mut InterfaceOptions
5354    {
5355        unsafe fn encode(
5356            self,
5357            encoder: &mut fidl::encoding::Encoder<
5358                '_,
5359                fidl::encoding::DefaultFuchsiaResourceDialect,
5360            >,
5361            offset: usize,
5362            mut depth: fidl::encoding::Depth,
5363        ) -> fidl::Result<()> {
5364            encoder.debug_check_bounds::<InterfaceOptions>(offset);
5365            // Vector header
5366            let max_ordinal: u64 = self.max_ordinal_present();
5367            encoder.write_num(max_ordinal, offset);
5368            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5369            // Calling encoder.out_of_line_offset(0) is not allowed.
5370            if max_ordinal == 0 {
5371                return Ok(());
5372            }
5373            depth.increment()?;
5374            let envelope_size = 8;
5375            let bytes_len = max_ordinal as usize * envelope_size;
5376            #[allow(unused_variables)]
5377            let offset = encoder.out_of_line_offset(bytes_len);
5378            let mut _prev_end_offset: usize = 0;
5379            if 1 > max_ordinal {
5380                return Ok(());
5381            }
5382
5383            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5384            // are envelope_size bytes.
5385            let cur_offset: usize = (1 - 1) * envelope_size;
5386
5387            // Zero reserved fields.
5388            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5389
5390            // Safety:
5391            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5392            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5393            //   envelope_size bytes, there is always sufficient room.
5394            fidl::encoding::encode_in_envelope_optional::<
5395                fidl::encoding::UnboundedString,
5396                fidl::encoding::DefaultFuchsiaResourceDialect,
5397            >(
5398                self.name.as_ref().map(
5399                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
5400                ),
5401                encoder,
5402                offset + cur_offset,
5403                depth,
5404            )?;
5405
5406            _prev_end_offset = cur_offset + envelope_size;
5407            if 2 > max_ordinal {
5408                return Ok(());
5409            }
5410
5411            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5412            // are envelope_size bytes.
5413            let cur_offset: usize = (2 - 1) * envelope_size;
5414
5415            // Zero reserved fields.
5416            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5417
5418            // Safety:
5419            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5420            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5421            //   envelope_size bytes, there is always sufficient room.
5422            fidl::encoding::encode_in_envelope_optional::<
5423                fidl::encoding::Endpoint<
5424                    fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
5425                >,
5426                fidl::encoding::DefaultFuchsiaResourceDialect,
5427            >(
5428                self.device.as_mut().map(
5429                    <fidl::encoding::Endpoint<
5430                        fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
5431                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
5432                ),
5433                encoder,
5434                offset + cur_offset,
5435                depth,
5436            )?;
5437
5438            _prev_end_offset = cur_offset + envelope_size;
5439            if 3 > max_ordinal {
5440                return Ok(());
5441            }
5442
5443            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5444            // are envelope_size bytes.
5445            let cur_offset: usize = (3 - 1) * envelope_size;
5446
5447            // Zero reserved fields.
5448            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5449
5450            // Safety:
5451            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5452            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5453            //   envelope_size bytes, there is always sufficient room.
5454            fidl::encoding::encode_in_envelope_optional::<
5455                bool,
5456                fidl::encoding::DefaultFuchsiaResourceDialect,
5457            >(
5458                self.without_autogenerated_addresses
5459                    .as_ref()
5460                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5461                encoder,
5462                offset + cur_offset,
5463                depth,
5464            )?;
5465
5466            _prev_end_offset = cur_offset + envelope_size;
5467            if 4 > max_ordinal {
5468                return Ok(());
5469            }
5470
5471            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5472            // are envelope_size bytes.
5473            let cur_offset: usize = (4 - 1) * envelope_size;
5474
5475            // Zero reserved fields.
5476            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5477
5478            // Safety:
5479            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5480            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5481            //   envelope_size bytes, there is always sufficient room.
5482            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_net::Subnet>, fidl::encoding::DefaultFuchsiaResourceDialect>(
5483            self.static_ips.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_net::Subnet> as fidl::encoding::ValueTypeMarker>::borrow),
5484            encoder, offset + cur_offset, depth
5485        )?;
5486
5487            _prev_end_offset = cur_offset + envelope_size;
5488            if 5 > max_ordinal {
5489                return Ok(());
5490            }
5491
5492            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5493            // are envelope_size bytes.
5494            let cur_offset: usize = (5 - 1) * envelope_size;
5495
5496            // Zero reserved fields.
5497            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5498
5499            // Safety:
5500            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5501            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5502            //   envelope_size bytes, there is always sufficient room.
5503            fidl::encoding::encode_in_envelope_optional::<
5504                fidl_fuchsia_net::IpAddress,
5505                fidl::encoding::DefaultFuchsiaResourceDialect,
5506            >(
5507                self.gateway
5508                    .as_ref()
5509                    .map(<fidl_fuchsia_net::IpAddress as fidl::encoding::ValueTypeMarker>::borrow),
5510                encoder,
5511                offset + cur_offset,
5512                depth,
5513            )?;
5514
5515            _prev_end_offset = cur_offset + envelope_size;
5516            if 6 > max_ordinal {
5517                return Ok(());
5518            }
5519
5520            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5521            // are envelope_size bytes.
5522            let cur_offset: usize = (6 - 1) * envelope_size;
5523
5524            // Zero reserved fields.
5525            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5526
5527            // Safety:
5528            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5529            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5530            //   envelope_size bytes, there is always sufficient room.
5531            fidl::encoding::encode_in_envelope_optional::<
5532                bool,
5533                fidl::encoding::DefaultFuchsiaResourceDialect,
5534            >(
5535                self.enable_ipv4_forwarding
5536                    .as_ref()
5537                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5538                encoder,
5539                offset + cur_offset,
5540                depth,
5541            )?;
5542
5543            _prev_end_offset = cur_offset + envelope_size;
5544            if 7 > max_ordinal {
5545                return Ok(());
5546            }
5547
5548            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5549            // are envelope_size bytes.
5550            let cur_offset: usize = (7 - 1) * envelope_size;
5551
5552            // Zero reserved fields.
5553            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5554
5555            // Safety:
5556            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5557            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5558            //   envelope_size bytes, there is always sufficient room.
5559            fidl::encoding::encode_in_envelope_optional::<
5560                bool,
5561                fidl::encoding::DefaultFuchsiaResourceDialect,
5562            >(
5563                self.enable_ipv6_forwarding
5564                    .as_ref()
5565                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5566                encoder,
5567                offset + cur_offset,
5568                depth,
5569            )?;
5570
5571            _prev_end_offset = cur_offset + envelope_size;
5572            if 8 > max_ordinal {
5573                return Ok(());
5574            }
5575
5576            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5577            // are envelope_size bytes.
5578            let cur_offset: usize = (8 - 1) * envelope_size;
5579
5580            // Zero reserved fields.
5581            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5582
5583            // Safety:
5584            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5585            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5586            //   envelope_size bytes, there is always sufficient room.
5587            fidl::encoding::encode_in_envelope_optional::<
5588                u16,
5589                fidl::encoding::DefaultFuchsiaResourceDialect,
5590            >(
5591                self.ipv4_multicast_neighbor_solicitations
5592                    .as_ref()
5593                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5594                encoder,
5595                offset + cur_offset,
5596                depth,
5597            )?;
5598
5599            _prev_end_offset = cur_offset + envelope_size;
5600            if 9 > max_ordinal {
5601                return Ok(());
5602            }
5603
5604            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5605            // are envelope_size bytes.
5606            let cur_offset: usize = (9 - 1) * envelope_size;
5607
5608            // Zero reserved fields.
5609            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5610
5611            // Safety:
5612            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5613            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5614            //   envelope_size bytes, there is always sufficient room.
5615            fidl::encoding::encode_in_envelope_optional::<
5616                u16,
5617                fidl::encoding::DefaultFuchsiaResourceDialect,
5618            >(
5619                self.ipv6_multicast_neighbor_solicitations
5620                    .as_ref()
5621                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5622                encoder,
5623                offset + cur_offset,
5624                depth,
5625            )?;
5626
5627            _prev_end_offset = cur_offset + envelope_size;
5628
5629            Ok(())
5630        }
5631    }
5632
5633    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5634        for InterfaceOptions
5635    {
5636        #[inline(always)]
5637        fn new_empty() -> Self {
5638            Self::default()
5639        }
5640
5641        unsafe fn decode(
5642            &mut self,
5643            decoder: &mut fidl::encoding::Decoder<
5644                '_,
5645                fidl::encoding::DefaultFuchsiaResourceDialect,
5646            >,
5647            offset: usize,
5648            mut depth: fidl::encoding::Depth,
5649        ) -> fidl::Result<()> {
5650            decoder.debug_check_bounds::<Self>(offset);
5651            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5652                None => return Err(fidl::Error::NotNullable),
5653                Some(len) => len,
5654            };
5655            // Calling decoder.out_of_line_offset(0) is not allowed.
5656            if len == 0 {
5657                return Ok(());
5658            };
5659            depth.increment()?;
5660            let envelope_size = 8;
5661            let bytes_len = len * envelope_size;
5662            let offset = decoder.out_of_line_offset(bytes_len)?;
5663            // Decode the envelope for each type.
5664            let mut _next_ordinal_to_read = 0;
5665            let mut next_offset = offset;
5666            let end_offset = offset + bytes_len;
5667            _next_ordinal_to_read += 1;
5668            if next_offset >= end_offset {
5669                return Ok(());
5670            }
5671
5672            // Decode unknown envelopes for gaps in ordinals.
5673            while _next_ordinal_to_read < 1 {
5674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5675                _next_ordinal_to_read += 1;
5676                next_offset += envelope_size;
5677            }
5678
5679            let next_out_of_line = decoder.next_out_of_line();
5680            let handles_before = decoder.remaining_handles();
5681            if let Some((inlined, num_bytes, num_handles)) =
5682                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5683            {
5684                let member_inline_size =
5685                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
5686                        decoder.context,
5687                    );
5688                if inlined != (member_inline_size <= 4) {
5689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5690                }
5691                let inner_offset;
5692                let mut inner_depth = depth.clone();
5693                if inlined {
5694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5695                    inner_offset = next_offset;
5696                } else {
5697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5698                    inner_depth.increment()?;
5699                }
5700                let val_ref = self.name.get_or_insert_with(|| {
5701                    fidl::new_empty!(
5702                        fidl::encoding::UnboundedString,
5703                        fidl::encoding::DefaultFuchsiaResourceDialect
5704                    )
5705                });
5706                fidl::decode!(
5707                    fidl::encoding::UnboundedString,
5708                    fidl::encoding::DefaultFuchsiaResourceDialect,
5709                    val_ref,
5710                    decoder,
5711                    inner_offset,
5712                    inner_depth
5713                )?;
5714                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5715                {
5716                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5717                }
5718                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5719                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5720                }
5721            }
5722
5723            next_offset += envelope_size;
5724            _next_ordinal_to_read += 1;
5725            if next_offset >= end_offset {
5726                return Ok(());
5727            }
5728
5729            // Decode unknown envelopes for gaps in ordinals.
5730            while _next_ordinal_to_read < 2 {
5731                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5732                _next_ordinal_to_read += 1;
5733                next_offset += envelope_size;
5734            }
5735
5736            let next_out_of_line = decoder.next_out_of_line();
5737            let handles_before = decoder.remaining_handles();
5738            if let Some((inlined, num_bytes, num_handles)) =
5739                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5740            {
5741                let member_inline_size = <fidl::encoding::Endpoint<
5742                    fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
5743                > as fidl::encoding::TypeMarker>::inline_size(
5744                    decoder.context
5745                );
5746                if inlined != (member_inline_size <= 4) {
5747                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5748                }
5749                let inner_offset;
5750                let mut inner_depth = depth.clone();
5751                if inlined {
5752                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5753                    inner_offset = next_offset;
5754                } else {
5755                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5756                    inner_depth.increment()?;
5757                }
5758                let val_ref = self.device.get_or_insert_with(|| {
5759                    fidl::new_empty!(
5760                        fidl::encoding::Endpoint<
5761                            fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
5762                        >,
5763                        fidl::encoding::DefaultFuchsiaResourceDialect
5764                    )
5765                });
5766                fidl::decode!(
5767                    fidl::encoding::Endpoint<
5768                        fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_network::PortMarker>,
5769                    >,
5770                    fidl::encoding::DefaultFuchsiaResourceDialect,
5771                    val_ref,
5772                    decoder,
5773                    inner_offset,
5774                    inner_depth
5775                )?;
5776                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5777                {
5778                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5779                }
5780                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5781                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5782                }
5783            }
5784
5785            next_offset += envelope_size;
5786            _next_ordinal_to_read += 1;
5787            if next_offset >= end_offset {
5788                return Ok(());
5789            }
5790
5791            // Decode unknown envelopes for gaps in ordinals.
5792            while _next_ordinal_to_read < 3 {
5793                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5794                _next_ordinal_to_read += 1;
5795                next_offset += envelope_size;
5796            }
5797
5798            let next_out_of_line = decoder.next_out_of_line();
5799            let handles_before = decoder.remaining_handles();
5800            if let Some((inlined, num_bytes, num_handles)) =
5801                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5802            {
5803                let member_inline_size =
5804                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5805                if inlined != (member_inline_size <= 4) {
5806                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5807                }
5808                let inner_offset;
5809                let mut inner_depth = depth.clone();
5810                if inlined {
5811                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5812                    inner_offset = next_offset;
5813                } else {
5814                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5815                    inner_depth.increment()?;
5816                }
5817                let val_ref = self.without_autogenerated_addresses.get_or_insert_with(|| {
5818                    fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
5819                });
5820                fidl::decode!(
5821                    bool,
5822                    fidl::encoding::DefaultFuchsiaResourceDialect,
5823                    val_ref,
5824                    decoder,
5825                    inner_offset,
5826                    inner_depth
5827                )?;
5828                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5829                {
5830                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5831                }
5832                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5833                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5834                }
5835            }
5836
5837            next_offset += envelope_size;
5838            _next_ordinal_to_read += 1;
5839            if next_offset >= end_offset {
5840                return Ok(());
5841            }
5842
5843            // Decode unknown envelopes for gaps in ordinals.
5844            while _next_ordinal_to_read < 4 {
5845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5846                _next_ordinal_to_read += 1;
5847                next_offset += envelope_size;
5848            }
5849
5850            let next_out_of_line = decoder.next_out_of_line();
5851            let handles_before = decoder.remaining_handles();
5852            if let Some((inlined, num_bytes, num_handles)) =
5853                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5854            {
5855                let member_inline_size = <fidl::encoding::UnboundedVector<fidl_fuchsia_net::Subnet> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5856                if inlined != (member_inline_size <= 4) {
5857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5858                }
5859                let inner_offset;
5860                let mut inner_depth = depth.clone();
5861                if inlined {
5862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5863                    inner_offset = next_offset;
5864                } else {
5865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5866                    inner_depth.increment()?;
5867                }
5868                let val_ref = self.static_ips.get_or_insert_with(|| {
5869                    fidl::new_empty!(
5870                        fidl::encoding::UnboundedVector<fidl_fuchsia_net::Subnet>,
5871                        fidl::encoding::DefaultFuchsiaResourceDialect
5872                    )
5873                });
5874                fidl::decode!(
5875                    fidl::encoding::UnboundedVector<fidl_fuchsia_net::Subnet>,
5876                    fidl::encoding::DefaultFuchsiaResourceDialect,
5877                    val_ref,
5878                    decoder,
5879                    inner_offset,
5880                    inner_depth
5881                )?;
5882                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5883                {
5884                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5885                }
5886                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5887                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5888                }
5889            }
5890
5891            next_offset += envelope_size;
5892            _next_ordinal_to_read += 1;
5893            if next_offset >= end_offset {
5894                return Ok(());
5895            }
5896
5897            // Decode unknown envelopes for gaps in ordinals.
5898            while _next_ordinal_to_read < 5 {
5899                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5900                _next_ordinal_to_read += 1;
5901                next_offset += envelope_size;
5902            }
5903
5904            let next_out_of_line = decoder.next_out_of_line();
5905            let handles_before = decoder.remaining_handles();
5906            if let Some((inlined, num_bytes, num_handles)) =
5907                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5908            {
5909                let member_inline_size =
5910                    <fidl_fuchsia_net::IpAddress as fidl::encoding::TypeMarker>::inline_size(
5911                        decoder.context,
5912                    );
5913                if inlined != (member_inline_size <= 4) {
5914                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5915                }
5916                let inner_offset;
5917                let mut inner_depth = depth.clone();
5918                if inlined {
5919                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5920                    inner_offset = next_offset;
5921                } else {
5922                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5923                    inner_depth.increment()?;
5924                }
5925                let val_ref = self.gateway.get_or_insert_with(|| {
5926                    fidl::new_empty!(
5927                        fidl_fuchsia_net::IpAddress,
5928                        fidl::encoding::DefaultFuchsiaResourceDialect
5929                    )
5930                });
5931                fidl::decode!(
5932                    fidl_fuchsia_net::IpAddress,
5933                    fidl::encoding::DefaultFuchsiaResourceDialect,
5934                    val_ref,
5935                    decoder,
5936                    inner_offset,
5937                    inner_depth
5938                )?;
5939                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5940                {
5941                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5942                }
5943                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5944                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5945                }
5946            }
5947
5948            next_offset += envelope_size;
5949            _next_ordinal_to_read += 1;
5950            if next_offset >= end_offset {
5951                return Ok(());
5952            }
5953
5954            // Decode unknown envelopes for gaps in ordinals.
5955            while _next_ordinal_to_read < 6 {
5956                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5957                _next_ordinal_to_read += 1;
5958                next_offset += envelope_size;
5959            }
5960
5961            let next_out_of_line = decoder.next_out_of_line();
5962            let handles_before = decoder.remaining_handles();
5963            if let Some((inlined, num_bytes, num_handles)) =
5964                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5965            {
5966                let member_inline_size =
5967                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5968                if inlined != (member_inline_size <= 4) {
5969                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5970                }
5971                let inner_offset;
5972                let mut inner_depth = depth.clone();
5973                if inlined {
5974                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5975                    inner_offset = next_offset;
5976                } else {
5977                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5978                    inner_depth.increment()?;
5979                }
5980                let val_ref = self.enable_ipv4_forwarding.get_or_insert_with(|| {
5981                    fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
5982                });
5983                fidl::decode!(
5984                    bool,
5985                    fidl::encoding::DefaultFuchsiaResourceDialect,
5986                    val_ref,
5987                    decoder,
5988                    inner_offset,
5989                    inner_depth
5990                )?;
5991                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5992                {
5993                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5994                }
5995                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5996                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5997                }
5998            }
5999
6000            next_offset += envelope_size;
6001            _next_ordinal_to_read += 1;
6002            if next_offset >= end_offset {
6003                return Ok(());
6004            }
6005
6006            // Decode unknown envelopes for gaps in ordinals.
6007            while _next_ordinal_to_read < 7 {
6008                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6009                _next_ordinal_to_read += 1;
6010                next_offset += envelope_size;
6011            }
6012
6013            let next_out_of_line = decoder.next_out_of_line();
6014            let handles_before = decoder.remaining_handles();
6015            if let Some((inlined, num_bytes, num_handles)) =
6016                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6017            {
6018                let member_inline_size =
6019                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6020                if inlined != (member_inline_size <= 4) {
6021                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6022                }
6023                let inner_offset;
6024                let mut inner_depth = depth.clone();
6025                if inlined {
6026                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6027                    inner_offset = next_offset;
6028                } else {
6029                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6030                    inner_depth.increment()?;
6031                }
6032                let val_ref = self.enable_ipv6_forwarding.get_or_insert_with(|| {
6033                    fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
6034                });
6035                fidl::decode!(
6036                    bool,
6037                    fidl::encoding::DefaultFuchsiaResourceDialect,
6038                    val_ref,
6039                    decoder,
6040                    inner_offset,
6041                    inner_depth
6042                )?;
6043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6044                {
6045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6046                }
6047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6049                }
6050            }
6051
6052            next_offset += envelope_size;
6053            _next_ordinal_to_read += 1;
6054            if next_offset >= end_offset {
6055                return Ok(());
6056            }
6057
6058            // Decode unknown envelopes for gaps in ordinals.
6059            while _next_ordinal_to_read < 8 {
6060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6061                _next_ordinal_to_read += 1;
6062                next_offset += envelope_size;
6063            }
6064
6065            let next_out_of_line = decoder.next_out_of_line();
6066            let handles_before = decoder.remaining_handles();
6067            if let Some((inlined, num_bytes, num_handles)) =
6068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6069            {
6070                let member_inline_size =
6071                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6072                if inlined != (member_inline_size <= 4) {
6073                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6074                }
6075                let inner_offset;
6076                let mut inner_depth = depth.clone();
6077                if inlined {
6078                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6079                    inner_offset = next_offset;
6080                } else {
6081                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6082                    inner_depth.increment()?;
6083                }
6084                let val_ref = self.ipv4_multicast_neighbor_solicitations.get_or_insert_with(|| {
6085                    fidl::new_empty!(u16, fidl::encoding::DefaultFuchsiaResourceDialect)
6086                });
6087                fidl::decode!(
6088                    u16,
6089                    fidl::encoding::DefaultFuchsiaResourceDialect,
6090                    val_ref,
6091                    decoder,
6092                    inner_offset,
6093                    inner_depth
6094                )?;
6095                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6096                {
6097                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6098                }
6099                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6100                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6101                }
6102            }
6103
6104            next_offset += envelope_size;
6105            _next_ordinal_to_read += 1;
6106            if next_offset >= end_offset {
6107                return Ok(());
6108            }
6109
6110            // Decode unknown envelopes for gaps in ordinals.
6111            while _next_ordinal_to_read < 9 {
6112                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6113                _next_ordinal_to_read += 1;
6114                next_offset += envelope_size;
6115            }
6116
6117            let next_out_of_line = decoder.next_out_of_line();
6118            let handles_before = decoder.remaining_handles();
6119            if let Some((inlined, num_bytes, num_handles)) =
6120                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6121            {
6122                let member_inline_size =
6123                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6124                if inlined != (member_inline_size <= 4) {
6125                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6126                }
6127                let inner_offset;
6128                let mut inner_depth = depth.clone();
6129                if inlined {
6130                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6131                    inner_offset = next_offset;
6132                } else {
6133                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6134                    inner_depth.increment()?;
6135                }
6136                let val_ref = self.ipv6_multicast_neighbor_solicitations.get_or_insert_with(|| {
6137                    fidl::new_empty!(u16, fidl::encoding::DefaultFuchsiaResourceDialect)
6138                });
6139                fidl::decode!(
6140                    u16,
6141                    fidl::encoding::DefaultFuchsiaResourceDialect,
6142                    val_ref,
6143                    decoder,
6144                    inner_offset,
6145                    inner_depth
6146                )?;
6147                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6148                {
6149                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6150                }
6151                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6152                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6153                }
6154            }
6155
6156            next_offset += envelope_size;
6157
6158            // Decode the remaining unknown envelopes.
6159            while next_offset < end_offset {
6160                _next_ordinal_to_read += 1;
6161                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6162                next_offset += envelope_size;
6163            }
6164
6165            Ok(())
6166        }
6167    }
6168
6169    impl RealmOptions {
6170        #[inline(always)]
6171        fn max_ordinal_present(&self) -> u64 {
6172            if let Some(_) = self.children {
6173                return 2;
6174            }
6175            if let Some(_) = self.name {
6176                return 1;
6177            }
6178            0
6179        }
6180    }
6181
6182    impl fidl::encoding::ResourceTypeMarker for RealmOptions {
6183        type Borrowed<'a> = &'a mut Self;
6184        fn take_or_borrow<'a>(
6185            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6186        ) -> Self::Borrowed<'a> {
6187            value
6188        }
6189    }
6190
6191    unsafe impl fidl::encoding::TypeMarker for RealmOptions {
6192        type Owned = Self;
6193
6194        #[inline(always)]
6195        fn inline_align(_context: fidl::encoding::Context) -> usize {
6196            8
6197        }
6198
6199        #[inline(always)]
6200        fn inline_size(_context: fidl::encoding::Context) -> usize {
6201            16
6202        }
6203    }
6204
6205    unsafe impl fidl::encoding::Encode<RealmOptions, fidl::encoding::DefaultFuchsiaResourceDialect>
6206        for &mut RealmOptions
6207    {
6208        unsafe fn encode(
6209            self,
6210            encoder: &mut fidl::encoding::Encoder<
6211                '_,
6212                fidl::encoding::DefaultFuchsiaResourceDialect,
6213            >,
6214            offset: usize,
6215            mut depth: fidl::encoding::Depth,
6216        ) -> fidl::Result<()> {
6217            encoder.debug_check_bounds::<RealmOptions>(offset);
6218            // Vector header
6219            let max_ordinal: u64 = self.max_ordinal_present();
6220            encoder.write_num(max_ordinal, offset);
6221            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6222            // Calling encoder.out_of_line_offset(0) is not allowed.
6223            if max_ordinal == 0 {
6224                return Ok(());
6225            }
6226            depth.increment()?;
6227            let envelope_size = 8;
6228            let bytes_len = max_ordinal as usize * envelope_size;
6229            #[allow(unused_variables)]
6230            let offset = encoder.out_of_line_offset(bytes_len);
6231            let mut _prev_end_offset: usize = 0;
6232            if 1 > max_ordinal {
6233                return Ok(());
6234            }
6235
6236            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6237            // are envelope_size bytes.
6238            let cur_offset: usize = (1 - 1) * envelope_size;
6239
6240            // Zero reserved fields.
6241            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6242
6243            // Safety:
6244            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6245            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6246            //   envelope_size bytes, there is always sufficient room.
6247            fidl::encoding::encode_in_envelope_optional::<
6248                fidl::encoding::UnboundedString,
6249                fidl::encoding::DefaultFuchsiaResourceDialect,
6250            >(
6251                self.name.as_ref().map(
6252                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6253                ),
6254                encoder,
6255                offset + cur_offset,
6256                depth,
6257            )?;
6258
6259            _prev_end_offset = cur_offset + envelope_size;
6260            if 2 > max_ordinal {
6261                return Ok(());
6262            }
6263
6264            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6265            // are envelope_size bytes.
6266            let cur_offset: usize = (2 - 1) * envelope_size;
6267
6268            // Zero reserved fields.
6269            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6270
6271            // Safety:
6272            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6273            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6274            //   envelope_size bytes, there is always sufficient room.
6275            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ChildDef>, fidl::encoding::DefaultFuchsiaResourceDialect>(
6276            self.children.as_mut().map(<fidl::encoding::UnboundedVector<ChildDef> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
6277            encoder, offset + cur_offset, depth
6278        )?;
6279
6280            _prev_end_offset = cur_offset + envelope_size;
6281
6282            Ok(())
6283        }
6284    }
6285
6286    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for RealmOptions {
6287        #[inline(always)]
6288        fn new_empty() -> Self {
6289            Self::default()
6290        }
6291
6292        unsafe fn decode(
6293            &mut self,
6294            decoder: &mut fidl::encoding::Decoder<
6295                '_,
6296                fidl::encoding::DefaultFuchsiaResourceDialect,
6297            >,
6298            offset: usize,
6299            mut depth: fidl::encoding::Depth,
6300        ) -> fidl::Result<()> {
6301            decoder.debug_check_bounds::<Self>(offset);
6302            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6303                None => return Err(fidl::Error::NotNullable),
6304                Some(len) => len,
6305            };
6306            // Calling decoder.out_of_line_offset(0) is not allowed.
6307            if len == 0 {
6308                return Ok(());
6309            };
6310            depth.increment()?;
6311            let envelope_size = 8;
6312            let bytes_len = len * envelope_size;
6313            let offset = decoder.out_of_line_offset(bytes_len)?;
6314            // Decode the envelope for each type.
6315            let mut _next_ordinal_to_read = 0;
6316            let mut next_offset = offset;
6317            let end_offset = offset + bytes_len;
6318            _next_ordinal_to_read += 1;
6319            if next_offset >= end_offset {
6320                return Ok(());
6321            }
6322
6323            // Decode unknown envelopes for gaps in ordinals.
6324            while _next_ordinal_to_read < 1 {
6325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6326                _next_ordinal_to_read += 1;
6327                next_offset += envelope_size;
6328            }
6329
6330            let next_out_of_line = decoder.next_out_of_line();
6331            let handles_before = decoder.remaining_handles();
6332            if let Some((inlined, num_bytes, num_handles)) =
6333                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6334            {
6335                let member_inline_size =
6336                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
6337                        decoder.context,
6338                    );
6339                if inlined != (member_inline_size <= 4) {
6340                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6341                }
6342                let inner_offset;
6343                let mut inner_depth = depth.clone();
6344                if inlined {
6345                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6346                    inner_offset = next_offset;
6347                } else {
6348                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6349                    inner_depth.increment()?;
6350                }
6351                let val_ref = self.name.get_or_insert_with(|| {
6352                    fidl::new_empty!(
6353                        fidl::encoding::UnboundedString,
6354                        fidl::encoding::DefaultFuchsiaResourceDialect
6355                    )
6356                });
6357                fidl::decode!(
6358                    fidl::encoding::UnboundedString,
6359                    fidl::encoding::DefaultFuchsiaResourceDialect,
6360                    val_ref,
6361                    decoder,
6362                    inner_offset,
6363                    inner_depth
6364                )?;
6365                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6366                {
6367                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6368                }
6369                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6370                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6371                }
6372            }
6373
6374            next_offset += envelope_size;
6375            _next_ordinal_to_read += 1;
6376            if next_offset >= end_offset {
6377                return Ok(());
6378            }
6379
6380            // Decode unknown envelopes for gaps in ordinals.
6381            while _next_ordinal_to_read < 2 {
6382                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6383                _next_ordinal_to_read += 1;
6384                next_offset += envelope_size;
6385            }
6386
6387            let next_out_of_line = decoder.next_out_of_line();
6388            let handles_before = decoder.remaining_handles();
6389            if let Some((inlined, num_bytes, num_handles)) =
6390                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6391            {
6392                let member_inline_size = <fidl::encoding::UnboundedVector<ChildDef> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6393                if inlined != (member_inline_size <= 4) {
6394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6395                }
6396                let inner_offset;
6397                let mut inner_depth = depth.clone();
6398                if inlined {
6399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6400                    inner_offset = next_offset;
6401                } else {
6402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6403                    inner_depth.increment()?;
6404                }
6405                let val_ref = self.children.get_or_insert_with(|| {
6406                    fidl::new_empty!(
6407                        fidl::encoding::UnboundedVector<ChildDef>,
6408                        fidl::encoding::DefaultFuchsiaResourceDialect
6409                    )
6410                });
6411                fidl::decode!(
6412                    fidl::encoding::UnboundedVector<ChildDef>,
6413                    fidl::encoding::DefaultFuchsiaResourceDialect,
6414                    val_ref,
6415                    decoder,
6416                    inner_offset,
6417                    inner_depth
6418                )?;
6419                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6420                {
6421                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6422                }
6423                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6424                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6425                }
6426            }
6427
6428            next_offset += envelope_size;
6429
6430            // Decode the remaining unknown envelopes.
6431            while next_offset < end_offset {
6432                _next_ordinal_to_read += 1;
6433                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6434                next_offset += envelope_size;
6435            }
6436
6437            Ok(())
6438        }
6439    }
6440
6441    impl fidl::encoding::ResourceTypeMarker for ChildSource {
6442        type Borrowed<'a> = &'a mut Self;
6443        fn take_or_borrow<'a>(
6444            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6445        ) -> Self::Borrowed<'a> {
6446            value
6447        }
6448    }
6449
6450    unsafe impl fidl::encoding::TypeMarker for ChildSource {
6451        type Owned = Self;
6452
6453        #[inline(always)]
6454        fn inline_align(_context: fidl::encoding::Context) -> usize {
6455            8
6456        }
6457
6458        #[inline(always)]
6459        fn inline_size(_context: fidl::encoding::Context) -> usize {
6460            16
6461        }
6462    }
6463
6464    unsafe impl fidl::encoding::Encode<ChildSource, fidl::encoding::DefaultFuchsiaResourceDialect>
6465        for &mut ChildSource
6466    {
6467        #[inline]
6468        unsafe fn encode(
6469            self,
6470            encoder: &mut fidl::encoding::Encoder<
6471                '_,
6472                fidl::encoding::DefaultFuchsiaResourceDialect,
6473            >,
6474            offset: usize,
6475            _depth: fidl::encoding::Depth,
6476        ) -> fidl::Result<()> {
6477            encoder.debug_check_bounds::<ChildSource>(offset);
6478            encoder.write_num::<u64>(self.ordinal(), offset);
6479            match self {
6480            ChildSource::Component(ref val) => {
6481                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4096>, fidl::encoding::DefaultFuchsiaResourceDialect>(
6482                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(val),
6483                    encoder, offset + 8, _depth
6484                )
6485            }
6486            ChildSource::Mock(ref mut val) => {
6487                fidl::encoding::encode_in_envelope::<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
6488                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(val),
6489                    encoder, offset + 8, _depth
6490                )
6491            }
6492        }
6493        }
6494    }
6495
6496    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for ChildSource {
6497        #[inline(always)]
6498        fn new_empty() -> Self {
6499            Self::Component(fidl::new_empty!(
6500                fidl::encoding::BoundedString<4096>,
6501                fidl::encoding::DefaultFuchsiaResourceDialect
6502            ))
6503        }
6504
6505        #[inline]
6506        unsafe fn decode(
6507            &mut self,
6508            decoder: &mut fidl::encoding::Decoder<
6509                '_,
6510                fidl::encoding::DefaultFuchsiaResourceDialect,
6511            >,
6512            offset: usize,
6513            mut depth: fidl::encoding::Depth,
6514        ) -> fidl::Result<()> {
6515            decoder.debug_check_bounds::<Self>(offset);
6516            #[allow(unused_variables)]
6517            let next_out_of_line = decoder.next_out_of_line();
6518            let handles_before = decoder.remaining_handles();
6519            let (ordinal, inlined, num_bytes, num_handles) =
6520                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
6521
6522            let member_inline_size = match ordinal {
6523                1 => {
6524                    <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(
6525                        decoder.context,
6526                    )
6527                }
6528                2 => <fidl::encoding::Endpoint<
6529                    fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
6530                > as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6531                _ => return Err(fidl::Error::UnknownUnionTag),
6532            };
6533
6534            if inlined != (member_inline_size <= 4) {
6535                return Err(fidl::Error::InvalidInlineBitInEnvelope);
6536            }
6537            let _inner_offset;
6538            if inlined {
6539                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
6540                _inner_offset = offset + 8;
6541            } else {
6542                depth.increment()?;
6543                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6544            }
6545            match ordinal {
6546                1 => {
6547                    #[allow(irrefutable_let_patterns)]
6548                    if let ChildSource::Component(_) = self {
6549                        // Do nothing, read the value into the object
6550                    } else {
6551                        // Initialize `self` to the right variant
6552                        *self = ChildSource::Component(fidl::new_empty!(
6553                            fidl::encoding::BoundedString<4096>,
6554                            fidl::encoding::DefaultFuchsiaResourceDialect
6555                        ));
6556                    }
6557                    #[allow(irrefutable_let_patterns)]
6558                    if let ChildSource::Component(ref mut val) = self {
6559                        fidl::decode!(
6560                            fidl::encoding::BoundedString<4096>,
6561                            fidl::encoding::DefaultFuchsiaResourceDialect,
6562                            val,
6563                            decoder,
6564                            _inner_offset,
6565                            depth
6566                        )?;
6567                    } else {
6568                        unreachable!()
6569                    }
6570                }
6571                2 => {
6572                    #[allow(irrefutable_let_patterns)]
6573                    if let ChildSource::Mock(_) = self {
6574                        // Do nothing, read the value into the object
6575                    } else {
6576                        // Initialize `self` to the right variant
6577                        *self = ChildSource::Mock(fidl::new_empty!(
6578                            fidl::encoding::Endpoint<
6579                                fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
6580                            >,
6581                            fidl::encoding::DefaultFuchsiaResourceDialect
6582                        ));
6583                    }
6584                    #[allow(irrefutable_let_patterns)]
6585                    if let ChildSource::Mock(ref mut val) = self {
6586                        fidl::decode!(
6587                            fidl::encoding::Endpoint<
6588                                fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
6589                            >,
6590                            fidl::encoding::DefaultFuchsiaResourceDialect,
6591                            val,
6592                            decoder,
6593                            _inner_offset,
6594                            depth
6595                        )?;
6596                    } else {
6597                        unreachable!()
6598                    }
6599                }
6600                ordinal => panic!("unexpected ordinal {:?}", ordinal),
6601            }
6602            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
6603                return Err(fidl::Error::InvalidNumBytesInEnvelope);
6604            }
6605            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6606                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6607            }
6608            Ok(())
6609        }
6610    }
6611}