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