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