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