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