Skip to main content

fidl_fuchsia_netemul/
fidl_fuchsia_netemul.rs

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