Skip to main content

fidl_fuchsia_netemul/
fidl_fuchsia_netemul.rs

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