fidl_fuchsia_dash/
fidl_fuchsia_dash.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_dash_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct LauncherExploreComponentOverPtyRequest {
16    /// The moniker of the component that dash should be scoped to
17    pub moniker: String,
18    /// The PTY device that should be forwarded to the dash process
19    pub pty: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
20    /// A list of package URLs whose directories will also be loaded into the dash namespace.
21    /// The path preference is determined by the order of this vector.
22    pub tool_urls: Vec<String>,
23    /// An optional inline command to run
24    pub command: Option<String>,
25    /// The namespace layout to create for the dash process
26    pub ns_layout: DashNamespaceLayout,
27}
28
29impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
30    for LauncherExploreComponentOverPtyRequest
31{
32}
33
34#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
35pub struct LauncherExploreComponentOverSocketRequest {
36    /// The moniker of the component that dash should be scoped to
37    pub moniker: String,
38    /// The raw socket to connect to the dash process
39    pub socket: fidl::Socket,
40    /// A list of package URLs whose directories will also be loaded into the dash namespace.
41    /// The path preference is determined by the order of this vector.
42    pub tool_urls: Vec<String>,
43    /// An optional inline command to run
44    pub command: Option<String>,
45    /// The namespace layout to create for the dash process
46    pub ns_layout: DashNamespaceLayout,
47}
48
49impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
50    for LauncherExploreComponentOverSocketRequest
51{
52}
53
54#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
55pub struct LauncherExplorePackageOverSocket2Request {
56    /// The package resolver to use when resolving package URLs (both `url` and `tool_urls`)
57    /// that have the `fuchsia-pkg` scheme.
58    pub fuchsia_pkg_resolver: FuchsiaPkgResolver,
59    /// The absolute package URL to resolve.
60    /// If `subpackages` is empty the resolved package directory will be loaded into the dash
61    /// namespace at `/pkg`.
62    /// If `subpackages` is not empty, the package directory of the final subpackage of `url`
63    /// will be loaded into the namespace at `/pkg`.
64    pub url: String,
65    /// The chain of subpackages, if any, of `url` to resolve, in resolution order.
66    /// If `subpackages` is not empty, the package directory of the final subpackage will be
67    /// loaded into the dash namespace at `/pkg`.
68    pub subpackages: Vec<String>,
69    /// The raw socket to connect to the dash process
70    pub socket: fidl::Socket,
71    /// A list of package URLs whose directories will also be loaded into the dash namespace.
72    /// The path preference is determined by the order of this vector.
73    pub tool_urls: Vec<String>,
74    /// An optional inline command to run.
75    pub command: Option<String>,
76}
77
78impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
79    for LauncherExplorePackageOverSocket2Request
80{
81}
82
83#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
84pub struct LauncherExplorePackageOverSocketRequest {
85    /// The absolute package URL to resolve.
86    /// If `subpackages` is empty the resolved package directory will be loaded into the dash
87    /// namespace at `/pkg`.
88    /// If `subpackages` is not empty, the package directory of the final subpackage of `url`
89    /// will be loaded into the namespace at `/pkg`.
90    pub url: String,
91    /// The chain of subpackages, if any, of `url` to resolve, in resolution order.
92    /// If `subpackages` is not empty, the package directory of the final subpackage will be
93    /// loaded into the dash namespace at `/pkg`.
94    pub subpackages: Vec<String>,
95    /// The raw socket to connect to the dash process
96    pub socket: fidl::Socket,
97    /// A list of package URLs whose directories will also be loaded into the dash namespace.
98    /// The path preference is determined by the order of this vector.
99    pub tool_urls: Vec<String>,
100    /// An optional inline command to run.
101    pub command: Option<String>,
102}
103
104impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
105    for LauncherExplorePackageOverSocketRequest
106{
107}
108
109#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
110pub struct LauncherMarker;
111
112impl fidl::endpoints::ProtocolMarker for LauncherMarker {
113    type Proxy = LauncherProxy;
114    type RequestStream = LauncherRequestStream;
115    #[cfg(target_os = "fuchsia")]
116    type SynchronousProxy = LauncherSynchronousProxy;
117
118    const DEBUG_NAME: &'static str = "fuchsia.dash.Launcher";
119}
120impl fidl::endpoints::DiscoverableProtocolMarker for LauncherMarker {}
121pub type LauncherExploreComponentOverPtyResult = Result<(), LauncherError>;
122pub type LauncherExploreComponentOverSocketResult = Result<(), LauncherError>;
123pub type LauncherExplorePackageOverSocketResult = Result<(), LauncherError>;
124pub type LauncherExplorePackageOverSocket2Result = Result<(), LauncherError>;
125
126pub trait LauncherProxyInterface: Send + Sync {
127    type ExploreComponentOverPtyResponseFut: std::future::Future<Output = Result<LauncherExploreComponentOverPtyResult, fidl::Error>>
128        + Send;
129    fn r#explore_component_over_pty(
130        &self,
131        moniker: &str,
132        pty: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
133        tool_urls: &[String],
134        command: Option<&str>,
135        ns_layout: DashNamespaceLayout,
136    ) -> Self::ExploreComponentOverPtyResponseFut;
137    type ExploreComponentOverSocketResponseFut: std::future::Future<Output = Result<LauncherExploreComponentOverSocketResult, fidl::Error>>
138        + Send;
139    fn r#explore_component_over_socket(
140        &self,
141        moniker: &str,
142        socket: fidl::Socket,
143        tool_urls: &[String],
144        command: Option<&str>,
145        ns_layout: DashNamespaceLayout,
146    ) -> Self::ExploreComponentOverSocketResponseFut;
147    type ExplorePackageOverSocketResponseFut: std::future::Future<Output = Result<LauncherExplorePackageOverSocketResult, fidl::Error>>
148        + Send;
149    fn r#explore_package_over_socket(
150        &self,
151        url: &str,
152        subpackages: &[String],
153        socket: fidl::Socket,
154        tool_urls: &[String],
155        command: Option<&str>,
156    ) -> Self::ExplorePackageOverSocketResponseFut;
157    type ExplorePackageOverSocket2ResponseFut: std::future::Future<Output = Result<LauncherExplorePackageOverSocket2Result, fidl::Error>>
158        + Send;
159    fn r#explore_package_over_socket2(
160        &self,
161        fuchsia_pkg_resolver: FuchsiaPkgResolver,
162        url: &str,
163        subpackages: &[String],
164        socket: fidl::Socket,
165        tool_urls: &[String],
166        command: Option<&str>,
167    ) -> Self::ExplorePackageOverSocket2ResponseFut;
168}
169#[derive(Debug)]
170#[cfg(target_os = "fuchsia")]
171pub struct LauncherSynchronousProxy {
172    client: fidl::client::sync::Client,
173}
174
175#[cfg(target_os = "fuchsia")]
176impl fidl::endpoints::SynchronousProxy for LauncherSynchronousProxy {
177    type Proxy = LauncherProxy;
178    type Protocol = LauncherMarker;
179
180    fn from_channel(inner: fidl::Channel) -> Self {
181        Self::new(inner)
182    }
183
184    fn into_channel(self) -> fidl::Channel {
185        self.client.into_channel()
186    }
187
188    fn as_channel(&self) -> &fidl::Channel {
189        self.client.as_channel()
190    }
191}
192
193#[cfg(target_os = "fuchsia")]
194impl LauncherSynchronousProxy {
195    pub fn new(channel: fidl::Channel) -> Self {
196        let protocol_name = <LauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
197        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
198    }
199
200    pub fn into_channel(self) -> fidl::Channel {
201        self.client.into_channel()
202    }
203
204    /// Waits until an event arrives and returns it. It is safe for other
205    /// threads to make concurrent requests while waiting for an event.
206    pub fn wait_for_event(
207        &self,
208        deadline: zx::MonotonicInstant,
209    ) -> Result<LauncherEvent, fidl::Error> {
210        LauncherEvent::decode(self.client.wait_for_event(deadline)?)
211    }
212
213    /// Launch a dash process scoped to the component with the given moniker, forwarding the given
214    /// stdio PTY.
215    pub fn r#explore_component_over_pty(
216        &self,
217        mut moniker: &str,
218        mut pty: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
219        mut tool_urls: &[String],
220        mut command: Option<&str>,
221        mut ns_layout: DashNamespaceLayout,
222        ___deadline: zx::MonotonicInstant,
223    ) -> Result<LauncherExploreComponentOverPtyResult, fidl::Error> {
224        let _response = self.client.send_query::<
225            LauncherExploreComponentOverPtyRequest,
226            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
227        >(
228            (moniker, pty, tool_urls, command, ns_layout,),
229            0x22efaa9c12b8779f,
230            fidl::encoding::DynamicFlags::empty(),
231            ___deadline,
232        )?;
233        Ok(_response.map(|x| x))
234    }
235
236    /// Launch a dash process scoped to the component with the given moniker, forwarding the given
237    /// stdio socket.
238    ///
239    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
240    /// the socket.
241    pub fn r#explore_component_over_socket(
242        &self,
243        mut moniker: &str,
244        mut socket: fidl::Socket,
245        mut tool_urls: &[String],
246        mut command: Option<&str>,
247        mut ns_layout: DashNamespaceLayout,
248        ___deadline: zx::MonotonicInstant,
249    ) -> Result<LauncherExploreComponentOverSocketResult, fidl::Error> {
250        let _response = self.client.send_query::<
251            LauncherExploreComponentOverSocketRequest,
252            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
253        >(
254            (moniker, socket, tool_urls, command, ns_layout,),
255            0x233557fb2b70eb68,
256            fidl::encoding::DynamicFlags::empty(),
257            ___deadline,
258        )?;
259        Ok(_response.map(|x| x))
260    }
261
262    /// Launch a dash process with the indicated [sub]package loaded into the namespace at /pkg,
263    /// forwarding the given stdio socket.
264    ///
265    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
266    /// the socket.
267    ///
268    /// Always uses [`fuchsia.dash/FuchsiaPkgResolver.FULL`] to resolve package URLs with scheme
269    /// "fuchsia-pkg".
270    /// Use [`fuchsia.dash/Launcher.ExplorePackageOverSocket2`] instead to pick which resolver to
271    /// use with "fuchsia-pkg" URLs.
272    pub fn r#explore_package_over_socket(
273        &self,
274        mut url: &str,
275        mut subpackages: &[String],
276        mut socket: fidl::Socket,
277        mut tool_urls: &[String],
278        mut command: Option<&str>,
279        ___deadline: zx::MonotonicInstant,
280    ) -> Result<LauncherExplorePackageOverSocketResult, fidl::Error> {
281        let _response = self.client.send_query::<
282            LauncherExplorePackageOverSocketRequest,
283            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
284        >(
285            (url, subpackages, socket, tool_urls, command,),
286            0x8e536067655b5a2,
287            fidl::encoding::DynamicFlags::empty(),
288            ___deadline,
289        )?;
290        Ok(_response.map(|x| x))
291    }
292
293    /// Launch a dash process with the indicated [sub]package loaded into the namespace at /pkg,
294    /// forwarding the given stdio socket.
295    ///
296    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
297    /// the socket.
298    pub fn r#explore_package_over_socket2(
299        &self,
300        mut fuchsia_pkg_resolver: FuchsiaPkgResolver,
301        mut url: &str,
302        mut subpackages: &[String],
303        mut socket: fidl::Socket,
304        mut tool_urls: &[String],
305        mut command: Option<&str>,
306        ___deadline: zx::MonotonicInstant,
307    ) -> Result<LauncherExplorePackageOverSocket2Result, fidl::Error> {
308        let _response = self.client.send_query::<
309            LauncherExplorePackageOverSocket2Request,
310            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
311        >(
312            (fuchsia_pkg_resolver, url, subpackages, socket, tool_urls, command,),
313            0x3884e07c1fa8d20b,
314            fidl::encoding::DynamicFlags::empty(),
315            ___deadline,
316        )?;
317        Ok(_response.map(|x| x))
318    }
319}
320
321#[derive(Debug, Clone)]
322pub struct LauncherProxy {
323    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
324}
325
326impl fidl::endpoints::Proxy for LauncherProxy {
327    type Protocol = LauncherMarker;
328
329    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
330        Self::new(inner)
331    }
332
333    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
334        self.client.into_channel().map_err(|client| Self { client })
335    }
336
337    fn as_channel(&self) -> &::fidl::AsyncChannel {
338        self.client.as_channel()
339    }
340}
341
342impl LauncherProxy {
343    /// Create a new Proxy for fuchsia.dash/Launcher.
344    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
345        let protocol_name = <LauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
346        Self { client: fidl::client::Client::new(channel, protocol_name) }
347    }
348
349    /// Get a Stream of events from the remote end of the protocol.
350    ///
351    /// # Panics
352    ///
353    /// Panics if the event stream was already taken.
354    pub fn take_event_stream(&self) -> LauncherEventStream {
355        LauncherEventStream { event_receiver: self.client.take_event_receiver() }
356    }
357
358    /// Launch a dash process scoped to the component with the given moniker, forwarding the given
359    /// stdio PTY.
360    pub fn r#explore_component_over_pty(
361        &self,
362        mut moniker: &str,
363        mut pty: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
364        mut tool_urls: &[String],
365        mut command: Option<&str>,
366        mut ns_layout: DashNamespaceLayout,
367    ) -> fidl::client::QueryResponseFut<
368        LauncherExploreComponentOverPtyResult,
369        fidl::encoding::DefaultFuchsiaResourceDialect,
370    > {
371        LauncherProxyInterface::r#explore_component_over_pty(
372            self, moniker, pty, tool_urls, command, ns_layout,
373        )
374    }
375
376    /// Launch a dash process scoped to the component with the given moniker, forwarding the given
377    /// stdio socket.
378    ///
379    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
380    /// the socket.
381    pub fn r#explore_component_over_socket(
382        &self,
383        mut moniker: &str,
384        mut socket: fidl::Socket,
385        mut tool_urls: &[String],
386        mut command: Option<&str>,
387        mut ns_layout: DashNamespaceLayout,
388    ) -> fidl::client::QueryResponseFut<
389        LauncherExploreComponentOverSocketResult,
390        fidl::encoding::DefaultFuchsiaResourceDialect,
391    > {
392        LauncherProxyInterface::r#explore_component_over_socket(
393            self, moniker, socket, tool_urls, command, ns_layout,
394        )
395    }
396
397    /// Launch a dash process with the indicated [sub]package loaded into the namespace at /pkg,
398    /// forwarding the given stdio socket.
399    ///
400    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
401    /// the socket.
402    ///
403    /// Always uses [`fuchsia.dash/FuchsiaPkgResolver.FULL`] to resolve package URLs with scheme
404    /// "fuchsia-pkg".
405    /// Use [`fuchsia.dash/Launcher.ExplorePackageOverSocket2`] instead to pick which resolver to
406    /// use with "fuchsia-pkg" URLs.
407    pub fn r#explore_package_over_socket(
408        &self,
409        mut url: &str,
410        mut subpackages: &[String],
411        mut socket: fidl::Socket,
412        mut tool_urls: &[String],
413        mut command: Option<&str>,
414    ) -> fidl::client::QueryResponseFut<
415        LauncherExplorePackageOverSocketResult,
416        fidl::encoding::DefaultFuchsiaResourceDialect,
417    > {
418        LauncherProxyInterface::r#explore_package_over_socket(
419            self,
420            url,
421            subpackages,
422            socket,
423            tool_urls,
424            command,
425        )
426    }
427
428    /// Launch a dash process with the indicated [sub]package loaded into the namespace at /pkg,
429    /// forwarding the given stdio socket.
430    ///
431    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
432    /// the socket.
433    pub fn r#explore_package_over_socket2(
434        &self,
435        mut fuchsia_pkg_resolver: FuchsiaPkgResolver,
436        mut url: &str,
437        mut subpackages: &[String],
438        mut socket: fidl::Socket,
439        mut tool_urls: &[String],
440        mut command: Option<&str>,
441    ) -> fidl::client::QueryResponseFut<
442        LauncherExplorePackageOverSocket2Result,
443        fidl::encoding::DefaultFuchsiaResourceDialect,
444    > {
445        LauncherProxyInterface::r#explore_package_over_socket2(
446            self,
447            fuchsia_pkg_resolver,
448            url,
449            subpackages,
450            socket,
451            tool_urls,
452            command,
453        )
454    }
455}
456
457impl LauncherProxyInterface for LauncherProxy {
458    type ExploreComponentOverPtyResponseFut = fidl::client::QueryResponseFut<
459        LauncherExploreComponentOverPtyResult,
460        fidl::encoding::DefaultFuchsiaResourceDialect,
461    >;
462    fn r#explore_component_over_pty(
463        &self,
464        mut moniker: &str,
465        mut pty: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
466        mut tool_urls: &[String],
467        mut command: Option<&str>,
468        mut ns_layout: DashNamespaceLayout,
469    ) -> Self::ExploreComponentOverPtyResponseFut {
470        fn _decode(
471            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
472        ) -> Result<LauncherExploreComponentOverPtyResult, fidl::Error> {
473            let _response = fidl::client::decode_transaction_body::<
474                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
475                fidl::encoding::DefaultFuchsiaResourceDialect,
476                0x22efaa9c12b8779f,
477            >(_buf?)?;
478            Ok(_response.map(|x| x))
479        }
480        self.client.send_query_and_decode::<
481            LauncherExploreComponentOverPtyRequest,
482            LauncherExploreComponentOverPtyResult,
483        >(
484            (moniker, pty, tool_urls, command, ns_layout,),
485            0x22efaa9c12b8779f,
486            fidl::encoding::DynamicFlags::empty(),
487            _decode,
488        )
489    }
490
491    type ExploreComponentOverSocketResponseFut = fidl::client::QueryResponseFut<
492        LauncherExploreComponentOverSocketResult,
493        fidl::encoding::DefaultFuchsiaResourceDialect,
494    >;
495    fn r#explore_component_over_socket(
496        &self,
497        mut moniker: &str,
498        mut socket: fidl::Socket,
499        mut tool_urls: &[String],
500        mut command: Option<&str>,
501        mut ns_layout: DashNamespaceLayout,
502    ) -> Self::ExploreComponentOverSocketResponseFut {
503        fn _decode(
504            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
505        ) -> Result<LauncherExploreComponentOverSocketResult, fidl::Error> {
506            let _response = fidl::client::decode_transaction_body::<
507                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
508                fidl::encoding::DefaultFuchsiaResourceDialect,
509                0x233557fb2b70eb68,
510            >(_buf?)?;
511            Ok(_response.map(|x| x))
512        }
513        self.client.send_query_and_decode::<
514            LauncherExploreComponentOverSocketRequest,
515            LauncherExploreComponentOverSocketResult,
516        >(
517            (moniker, socket, tool_urls, command, ns_layout,),
518            0x233557fb2b70eb68,
519            fidl::encoding::DynamicFlags::empty(),
520            _decode,
521        )
522    }
523
524    type ExplorePackageOverSocketResponseFut = fidl::client::QueryResponseFut<
525        LauncherExplorePackageOverSocketResult,
526        fidl::encoding::DefaultFuchsiaResourceDialect,
527    >;
528    fn r#explore_package_over_socket(
529        &self,
530        mut url: &str,
531        mut subpackages: &[String],
532        mut socket: fidl::Socket,
533        mut tool_urls: &[String],
534        mut command: Option<&str>,
535    ) -> Self::ExplorePackageOverSocketResponseFut {
536        fn _decode(
537            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
538        ) -> Result<LauncherExplorePackageOverSocketResult, fidl::Error> {
539            let _response = fidl::client::decode_transaction_body::<
540                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
541                fidl::encoding::DefaultFuchsiaResourceDialect,
542                0x8e536067655b5a2,
543            >(_buf?)?;
544            Ok(_response.map(|x| x))
545        }
546        self.client.send_query_and_decode::<
547            LauncherExplorePackageOverSocketRequest,
548            LauncherExplorePackageOverSocketResult,
549        >(
550            (url, subpackages, socket, tool_urls, command,),
551            0x8e536067655b5a2,
552            fidl::encoding::DynamicFlags::empty(),
553            _decode,
554        )
555    }
556
557    type ExplorePackageOverSocket2ResponseFut = fidl::client::QueryResponseFut<
558        LauncherExplorePackageOverSocket2Result,
559        fidl::encoding::DefaultFuchsiaResourceDialect,
560    >;
561    fn r#explore_package_over_socket2(
562        &self,
563        mut fuchsia_pkg_resolver: FuchsiaPkgResolver,
564        mut url: &str,
565        mut subpackages: &[String],
566        mut socket: fidl::Socket,
567        mut tool_urls: &[String],
568        mut command: Option<&str>,
569    ) -> Self::ExplorePackageOverSocket2ResponseFut {
570        fn _decode(
571            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
572        ) -> Result<LauncherExplorePackageOverSocket2Result, fidl::Error> {
573            let _response = fidl::client::decode_transaction_body::<
574                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, LauncherError>,
575                fidl::encoding::DefaultFuchsiaResourceDialect,
576                0x3884e07c1fa8d20b,
577            >(_buf?)?;
578            Ok(_response.map(|x| x))
579        }
580        self.client.send_query_and_decode::<
581            LauncherExplorePackageOverSocket2Request,
582            LauncherExplorePackageOverSocket2Result,
583        >(
584            (fuchsia_pkg_resolver, url, subpackages, socket, tool_urls, command,),
585            0x3884e07c1fa8d20b,
586            fidl::encoding::DynamicFlags::empty(),
587            _decode,
588        )
589    }
590}
591
592pub struct LauncherEventStream {
593    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
594}
595
596impl std::marker::Unpin for LauncherEventStream {}
597
598impl futures::stream::FusedStream for LauncherEventStream {
599    fn is_terminated(&self) -> bool {
600        self.event_receiver.is_terminated()
601    }
602}
603
604impl futures::Stream for LauncherEventStream {
605    type Item = Result<LauncherEvent, fidl::Error>;
606
607    fn poll_next(
608        mut self: std::pin::Pin<&mut Self>,
609        cx: &mut std::task::Context<'_>,
610    ) -> std::task::Poll<Option<Self::Item>> {
611        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
612            &mut self.event_receiver,
613            cx
614        )?) {
615            Some(buf) => std::task::Poll::Ready(Some(LauncherEvent::decode(buf))),
616            None => std::task::Poll::Ready(None),
617        }
618    }
619}
620
621#[derive(Debug)]
622pub enum LauncherEvent {
623    OnTerminated { return_code: i32 },
624}
625
626impl LauncherEvent {
627    #[allow(irrefutable_let_patterns)]
628    pub fn into_on_terminated(self) -> Option<i32> {
629        if let LauncherEvent::OnTerminated { return_code } = self {
630            Some((return_code))
631        } else {
632            None
633        }
634    }
635
636    /// Decodes a message buffer as a [`LauncherEvent`].
637    fn decode(
638        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
639    ) -> Result<LauncherEvent, fidl::Error> {
640        let (bytes, _handles) = buf.split_mut();
641        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
642        debug_assert_eq!(tx_header.tx_id, 0);
643        match tx_header.ordinal {
644            0x6e5422dc5fe6b3f2 => {
645                let mut out = fidl::new_empty!(
646                    LauncherOnTerminatedRequest,
647                    fidl::encoding::DefaultFuchsiaResourceDialect
648                );
649                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LauncherOnTerminatedRequest>(&tx_header, _body_bytes, _handles, &mut out)?;
650                Ok((LauncherEvent::OnTerminated { return_code: out.return_code }))
651            }
652            _ => Err(fidl::Error::UnknownOrdinal {
653                ordinal: tx_header.ordinal,
654                protocol_name: <LauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
655            }),
656        }
657    }
658}
659
660/// A Stream of incoming requests for fuchsia.dash/Launcher.
661pub struct LauncherRequestStream {
662    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
663    is_terminated: bool,
664}
665
666impl std::marker::Unpin for LauncherRequestStream {}
667
668impl futures::stream::FusedStream for LauncherRequestStream {
669    fn is_terminated(&self) -> bool {
670        self.is_terminated
671    }
672}
673
674impl fidl::endpoints::RequestStream for LauncherRequestStream {
675    type Protocol = LauncherMarker;
676    type ControlHandle = LauncherControlHandle;
677
678    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
679        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
680    }
681
682    fn control_handle(&self) -> Self::ControlHandle {
683        LauncherControlHandle { inner: self.inner.clone() }
684    }
685
686    fn into_inner(
687        self,
688    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
689    {
690        (self.inner, self.is_terminated)
691    }
692
693    fn from_inner(
694        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
695        is_terminated: bool,
696    ) -> Self {
697        Self { inner, is_terminated }
698    }
699}
700
701impl futures::Stream for LauncherRequestStream {
702    type Item = Result<LauncherRequest, fidl::Error>;
703
704    fn poll_next(
705        mut self: std::pin::Pin<&mut Self>,
706        cx: &mut std::task::Context<'_>,
707    ) -> std::task::Poll<Option<Self::Item>> {
708        let this = &mut *self;
709        if this.inner.check_shutdown(cx) {
710            this.is_terminated = true;
711            return std::task::Poll::Ready(None);
712        }
713        if this.is_terminated {
714            panic!("polled LauncherRequestStream after completion");
715        }
716        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
717            |bytes, handles| {
718                match this.inner.channel().read_etc(cx, bytes, handles) {
719                    std::task::Poll::Ready(Ok(())) => {}
720                    std::task::Poll::Pending => return std::task::Poll::Pending,
721                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
722                        this.is_terminated = true;
723                        return std::task::Poll::Ready(None);
724                    }
725                    std::task::Poll::Ready(Err(e)) => {
726                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
727                            e.into(),
728                        ))))
729                    }
730                }
731
732                // A message has been received from the channel
733                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
734
735                std::task::Poll::Ready(Some(match header.ordinal {
736                    0x22efaa9c12b8779f => {
737                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
738                        let mut req = fidl::new_empty!(
739                            LauncherExploreComponentOverPtyRequest,
740                            fidl::encoding::DefaultFuchsiaResourceDialect
741                        );
742                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LauncherExploreComponentOverPtyRequest>(&header, _body_bytes, handles, &mut req)?;
743                        let control_handle = LauncherControlHandle { inner: this.inner.clone() };
744                        Ok(LauncherRequest::ExploreComponentOverPty {
745                            moniker: req.moniker,
746                            pty: req.pty,
747                            tool_urls: req.tool_urls,
748                            command: req.command,
749                            ns_layout: req.ns_layout,
750
751                            responder: LauncherExploreComponentOverPtyResponder {
752                                control_handle: std::mem::ManuallyDrop::new(control_handle),
753                                tx_id: header.tx_id,
754                            },
755                        })
756                    }
757                    0x233557fb2b70eb68 => {
758                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
759                        let mut req = fidl::new_empty!(
760                            LauncherExploreComponentOverSocketRequest,
761                            fidl::encoding::DefaultFuchsiaResourceDialect
762                        );
763                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LauncherExploreComponentOverSocketRequest>(&header, _body_bytes, handles, &mut req)?;
764                        let control_handle = LauncherControlHandle { inner: this.inner.clone() };
765                        Ok(LauncherRequest::ExploreComponentOverSocket {
766                            moniker: req.moniker,
767                            socket: req.socket,
768                            tool_urls: req.tool_urls,
769                            command: req.command,
770                            ns_layout: req.ns_layout,
771
772                            responder: LauncherExploreComponentOverSocketResponder {
773                                control_handle: std::mem::ManuallyDrop::new(control_handle),
774                                tx_id: header.tx_id,
775                            },
776                        })
777                    }
778                    0x8e536067655b5a2 => {
779                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
780                        let mut req = fidl::new_empty!(
781                            LauncherExplorePackageOverSocketRequest,
782                            fidl::encoding::DefaultFuchsiaResourceDialect
783                        );
784                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LauncherExplorePackageOverSocketRequest>(&header, _body_bytes, handles, &mut req)?;
785                        let control_handle = LauncherControlHandle { inner: this.inner.clone() };
786                        Ok(LauncherRequest::ExplorePackageOverSocket {
787                            url: req.url,
788                            subpackages: req.subpackages,
789                            socket: req.socket,
790                            tool_urls: req.tool_urls,
791                            command: req.command,
792
793                            responder: LauncherExplorePackageOverSocketResponder {
794                                control_handle: std::mem::ManuallyDrop::new(control_handle),
795                                tx_id: header.tx_id,
796                            },
797                        })
798                    }
799                    0x3884e07c1fa8d20b => {
800                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
801                        let mut req = fidl::new_empty!(
802                            LauncherExplorePackageOverSocket2Request,
803                            fidl::encoding::DefaultFuchsiaResourceDialect
804                        );
805                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LauncherExplorePackageOverSocket2Request>(&header, _body_bytes, handles, &mut req)?;
806                        let control_handle = LauncherControlHandle { inner: this.inner.clone() };
807                        Ok(LauncherRequest::ExplorePackageOverSocket2 {
808                            fuchsia_pkg_resolver: req.fuchsia_pkg_resolver,
809                            url: req.url,
810                            subpackages: req.subpackages,
811                            socket: req.socket,
812                            tool_urls: req.tool_urls,
813                            command: req.command,
814
815                            responder: LauncherExplorePackageOverSocket2Responder {
816                                control_handle: std::mem::ManuallyDrop::new(control_handle),
817                                tx_id: header.tx_id,
818                            },
819                        })
820                    }
821                    _ => Err(fidl::Error::UnknownOrdinal {
822                        ordinal: header.ordinal,
823                        protocol_name:
824                            <LauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
825                    }),
826                }))
827            },
828        )
829    }
830}
831
832#[derive(Debug)]
833pub enum LauncherRequest {
834    /// Launch a dash process scoped to the component with the given moniker, forwarding the given
835    /// stdio PTY.
836    ExploreComponentOverPty {
837        moniker: String,
838        pty: fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
839        tool_urls: Vec<String>,
840        command: Option<String>,
841        ns_layout: DashNamespaceLayout,
842        responder: LauncherExploreComponentOverPtyResponder,
843    },
844    /// Launch a dash process scoped to the component with the given moniker, forwarding the given
845    /// stdio socket.
846    ///
847    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
848    /// the socket.
849    ExploreComponentOverSocket {
850        moniker: String,
851        socket: fidl::Socket,
852        tool_urls: Vec<String>,
853        command: Option<String>,
854        ns_layout: DashNamespaceLayout,
855        responder: LauncherExploreComponentOverSocketResponder,
856    },
857    /// Launch a dash process with the indicated [sub]package loaded into the namespace at /pkg,
858    /// forwarding the given stdio socket.
859    ///
860    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
861    /// the socket.
862    ///
863    /// Always uses [`fuchsia.dash/FuchsiaPkgResolver.FULL`] to resolve package URLs with scheme
864    /// "fuchsia-pkg".
865    /// Use [`fuchsia.dash/Launcher.ExplorePackageOverSocket2`] instead to pick which resolver to
866    /// use with "fuchsia-pkg" URLs.
867    ExplorePackageOverSocket {
868        url: String,
869        subpackages: Vec<String>,
870        socket: fidl::Socket,
871        tool_urls: Vec<String>,
872        command: Option<String>,
873        responder: LauncherExplorePackageOverSocketResponder,
874    },
875    /// Launch a dash process with the indicated [sub]package loaded into the namespace at /pkg,
876    /// forwarding the given stdio socket.
877    ///
878    /// The dash launcher will implicitly create a PTY and transfer bytes between the PTY and
879    /// the socket.
880    ExplorePackageOverSocket2 {
881        fuchsia_pkg_resolver: FuchsiaPkgResolver,
882        url: String,
883        subpackages: Vec<String>,
884        socket: fidl::Socket,
885        tool_urls: Vec<String>,
886        command: Option<String>,
887        responder: LauncherExplorePackageOverSocket2Responder,
888    },
889}
890
891impl LauncherRequest {
892    #[allow(irrefutable_let_patterns)]
893    pub fn into_explore_component_over_pty(
894        self,
895    ) -> Option<(
896        String,
897        fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
898        Vec<String>,
899        Option<String>,
900        DashNamespaceLayout,
901        LauncherExploreComponentOverPtyResponder,
902    )> {
903        if let LauncherRequest::ExploreComponentOverPty {
904            moniker,
905            pty,
906            tool_urls,
907            command,
908            ns_layout,
909            responder,
910        } = self
911        {
912            Some((moniker, pty, tool_urls, command, ns_layout, responder))
913        } else {
914            None
915        }
916    }
917
918    #[allow(irrefutable_let_patterns)]
919    pub fn into_explore_component_over_socket(
920        self,
921    ) -> Option<(
922        String,
923        fidl::Socket,
924        Vec<String>,
925        Option<String>,
926        DashNamespaceLayout,
927        LauncherExploreComponentOverSocketResponder,
928    )> {
929        if let LauncherRequest::ExploreComponentOverSocket {
930            moniker,
931            socket,
932            tool_urls,
933            command,
934            ns_layout,
935            responder,
936        } = self
937        {
938            Some((moniker, socket, tool_urls, command, ns_layout, responder))
939        } else {
940            None
941        }
942    }
943
944    #[allow(irrefutable_let_patterns)]
945    pub fn into_explore_package_over_socket(
946        self,
947    ) -> Option<(
948        String,
949        Vec<String>,
950        fidl::Socket,
951        Vec<String>,
952        Option<String>,
953        LauncherExplorePackageOverSocketResponder,
954    )> {
955        if let LauncherRequest::ExplorePackageOverSocket {
956            url,
957            subpackages,
958            socket,
959            tool_urls,
960            command,
961            responder,
962        } = self
963        {
964            Some((url, subpackages, socket, tool_urls, command, responder))
965        } else {
966            None
967        }
968    }
969
970    #[allow(irrefutable_let_patterns)]
971    pub fn into_explore_package_over_socket2(
972        self,
973    ) -> Option<(
974        FuchsiaPkgResolver,
975        String,
976        Vec<String>,
977        fidl::Socket,
978        Vec<String>,
979        Option<String>,
980        LauncherExplorePackageOverSocket2Responder,
981    )> {
982        if let LauncherRequest::ExplorePackageOverSocket2 {
983            fuchsia_pkg_resolver,
984            url,
985            subpackages,
986            socket,
987            tool_urls,
988            command,
989            responder,
990        } = self
991        {
992            Some((fuchsia_pkg_resolver, url, subpackages, socket, tool_urls, command, responder))
993        } else {
994            None
995        }
996    }
997
998    /// Name of the method defined in FIDL
999    pub fn method_name(&self) -> &'static str {
1000        match *self {
1001            LauncherRequest::ExploreComponentOverPty { .. } => "explore_component_over_pty",
1002            LauncherRequest::ExploreComponentOverSocket { .. } => "explore_component_over_socket",
1003            LauncherRequest::ExplorePackageOverSocket { .. } => "explore_package_over_socket",
1004            LauncherRequest::ExplorePackageOverSocket2 { .. } => "explore_package_over_socket2",
1005        }
1006    }
1007}
1008
1009#[derive(Debug, Clone)]
1010pub struct LauncherControlHandle {
1011    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1012}
1013
1014impl fidl::endpoints::ControlHandle for LauncherControlHandle {
1015    fn shutdown(&self) {
1016        self.inner.shutdown()
1017    }
1018    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1019        self.inner.shutdown_with_epitaph(status)
1020    }
1021
1022    fn is_closed(&self) -> bool {
1023        self.inner.channel().is_closed()
1024    }
1025    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1026        self.inner.channel().on_closed()
1027    }
1028
1029    #[cfg(target_os = "fuchsia")]
1030    fn signal_peer(
1031        &self,
1032        clear_mask: zx::Signals,
1033        set_mask: zx::Signals,
1034    ) -> Result<(), zx_status::Status> {
1035        use fidl::Peered;
1036        self.inner.channel().signal_peer(clear_mask, set_mask)
1037    }
1038}
1039
1040impl LauncherControlHandle {
1041    pub fn send_on_terminated(&self, mut return_code: i32) -> Result<(), fidl::Error> {
1042        self.inner.send::<LauncherOnTerminatedRequest>(
1043            (return_code,),
1044            0,
1045            0x6e5422dc5fe6b3f2,
1046            fidl::encoding::DynamicFlags::empty(),
1047        )
1048    }
1049}
1050
1051#[must_use = "FIDL methods require a response to be sent"]
1052#[derive(Debug)]
1053pub struct LauncherExploreComponentOverPtyResponder {
1054    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1055    tx_id: u32,
1056}
1057
1058/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1059/// if the responder is dropped without sending a response, so that the client
1060/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1061impl std::ops::Drop for LauncherExploreComponentOverPtyResponder {
1062    fn drop(&mut self) {
1063        self.control_handle.shutdown();
1064        // Safety: drops once, never accessed again
1065        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1066    }
1067}
1068
1069impl fidl::endpoints::Responder for LauncherExploreComponentOverPtyResponder {
1070    type ControlHandle = LauncherControlHandle;
1071
1072    fn control_handle(&self) -> &LauncherControlHandle {
1073        &self.control_handle
1074    }
1075
1076    fn drop_without_shutdown(mut self) {
1077        // Safety: drops once, never accessed again due to mem::forget
1078        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1079        // Prevent Drop from running (which would shut down the channel)
1080        std::mem::forget(self);
1081    }
1082}
1083
1084impl LauncherExploreComponentOverPtyResponder {
1085    /// Sends a response to the FIDL transaction.
1086    ///
1087    /// Sets the channel to shutdown if an error occurs.
1088    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1089        let _result = self.send_raw(result);
1090        if _result.is_err() {
1091            self.control_handle.shutdown();
1092        }
1093        self.drop_without_shutdown();
1094        _result
1095    }
1096
1097    /// Similar to "send" but does not shutdown the channel if an error occurs.
1098    pub fn send_no_shutdown_on_err(
1099        self,
1100        mut result: Result<(), LauncherError>,
1101    ) -> Result<(), fidl::Error> {
1102        let _result = self.send_raw(result);
1103        self.drop_without_shutdown();
1104        _result
1105    }
1106
1107    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1108        self.control_handle.inner.send::<fidl::encoding::ResultType<
1109            fidl::encoding::EmptyStruct,
1110            LauncherError,
1111        >>(
1112            result,
1113            self.tx_id,
1114            0x22efaa9c12b8779f,
1115            fidl::encoding::DynamicFlags::empty(),
1116        )
1117    }
1118}
1119
1120#[must_use = "FIDL methods require a response to be sent"]
1121#[derive(Debug)]
1122pub struct LauncherExploreComponentOverSocketResponder {
1123    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1124    tx_id: u32,
1125}
1126
1127/// Set the the channel to be shutdown (see [`LauncherControlHandle::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 LauncherExploreComponentOverSocketResponder {
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 LauncherExploreComponentOverSocketResponder {
1139    type ControlHandle = LauncherControlHandle;
1140
1141    fn control_handle(&self) -> &LauncherControlHandle {
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 LauncherExploreComponentOverSocketResponder {
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 result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1158        let _result = self.send_raw(result);
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 result: Result<(), LauncherError>,
1170    ) -> Result<(), fidl::Error> {
1171        let _result = self.send_raw(result);
1172        self.drop_without_shutdown();
1173        _result
1174    }
1175
1176    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1177        self.control_handle.inner.send::<fidl::encoding::ResultType<
1178            fidl::encoding::EmptyStruct,
1179            LauncherError,
1180        >>(
1181            result,
1182            self.tx_id,
1183            0x233557fb2b70eb68,
1184            fidl::encoding::DynamicFlags::empty(),
1185        )
1186    }
1187}
1188
1189#[must_use = "FIDL methods require a response to be sent"]
1190#[derive(Debug)]
1191pub struct LauncherExplorePackageOverSocketResponder {
1192    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1193    tx_id: u32,
1194}
1195
1196/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1197/// if the responder is dropped without sending a response, so that the client
1198/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1199impl std::ops::Drop for LauncherExplorePackageOverSocketResponder {
1200    fn drop(&mut self) {
1201        self.control_handle.shutdown();
1202        // Safety: drops once, never accessed again
1203        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1204    }
1205}
1206
1207impl fidl::endpoints::Responder for LauncherExplorePackageOverSocketResponder {
1208    type ControlHandle = LauncherControlHandle;
1209
1210    fn control_handle(&self) -> &LauncherControlHandle {
1211        &self.control_handle
1212    }
1213
1214    fn drop_without_shutdown(mut self) {
1215        // Safety: drops once, never accessed again due to mem::forget
1216        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1217        // Prevent Drop from running (which would shut down the channel)
1218        std::mem::forget(self);
1219    }
1220}
1221
1222impl LauncherExplorePackageOverSocketResponder {
1223    /// Sends a response to the FIDL transaction.
1224    ///
1225    /// Sets the channel to shutdown if an error occurs.
1226    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1227        let _result = self.send_raw(result);
1228        if _result.is_err() {
1229            self.control_handle.shutdown();
1230        }
1231        self.drop_without_shutdown();
1232        _result
1233    }
1234
1235    /// Similar to "send" but does not shutdown the channel if an error occurs.
1236    pub fn send_no_shutdown_on_err(
1237        self,
1238        mut result: Result<(), LauncherError>,
1239    ) -> Result<(), fidl::Error> {
1240        let _result = self.send_raw(result);
1241        self.drop_without_shutdown();
1242        _result
1243    }
1244
1245    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1246        self.control_handle.inner.send::<fidl::encoding::ResultType<
1247            fidl::encoding::EmptyStruct,
1248            LauncherError,
1249        >>(
1250            result,
1251            self.tx_id,
1252            0x8e536067655b5a2,
1253            fidl::encoding::DynamicFlags::empty(),
1254        )
1255    }
1256}
1257
1258#[must_use = "FIDL methods require a response to be sent"]
1259#[derive(Debug)]
1260pub struct LauncherExplorePackageOverSocket2Responder {
1261    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1262    tx_id: u32,
1263}
1264
1265/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1266/// if the responder is dropped without sending a response, so that the client
1267/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1268impl std::ops::Drop for LauncherExplorePackageOverSocket2Responder {
1269    fn drop(&mut self) {
1270        self.control_handle.shutdown();
1271        // Safety: drops once, never accessed again
1272        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1273    }
1274}
1275
1276impl fidl::endpoints::Responder for LauncherExplorePackageOverSocket2Responder {
1277    type ControlHandle = LauncherControlHandle;
1278
1279    fn control_handle(&self) -> &LauncherControlHandle {
1280        &self.control_handle
1281    }
1282
1283    fn drop_without_shutdown(mut self) {
1284        // Safety: drops once, never accessed again due to mem::forget
1285        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1286        // Prevent Drop from running (which would shut down the channel)
1287        std::mem::forget(self);
1288    }
1289}
1290
1291impl LauncherExplorePackageOverSocket2Responder {
1292    /// Sends a response to the FIDL transaction.
1293    ///
1294    /// Sets the channel to shutdown if an error occurs.
1295    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1296        let _result = self.send_raw(result);
1297        if _result.is_err() {
1298            self.control_handle.shutdown();
1299        }
1300        self.drop_without_shutdown();
1301        _result
1302    }
1303
1304    /// Similar to "send" but does not shutdown the channel if an error occurs.
1305    pub fn send_no_shutdown_on_err(
1306        self,
1307        mut result: Result<(), LauncherError>,
1308    ) -> Result<(), fidl::Error> {
1309        let _result = self.send_raw(result);
1310        self.drop_without_shutdown();
1311        _result
1312    }
1313
1314    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1315        self.control_handle.inner.send::<fidl::encoding::ResultType<
1316            fidl::encoding::EmptyStruct,
1317            LauncherError,
1318        >>(
1319            result,
1320            self.tx_id,
1321            0x3884e07c1fa8d20b,
1322            fidl::encoding::DynamicFlags::empty(),
1323        )
1324    }
1325}
1326
1327mod internal {
1328    use super::*;
1329
1330    impl fidl::encoding::ResourceTypeMarker for LauncherExploreComponentOverPtyRequest {
1331        type Borrowed<'a> = &'a mut Self;
1332        fn take_or_borrow<'a>(
1333            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1334        ) -> Self::Borrowed<'a> {
1335            value
1336        }
1337    }
1338
1339    unsafe impl fidl::encoding::TypeMarker for LauncherExploreComponentOverPtyRequest {
1340        type Owned = Self;
1341
1342        #[inline(always)]
1343        fn inline_align(_context: fidl::encoding::Context) -> usize {
1344            8
1345        }
1346
1347        #[inline(always)]
1348        fn inline_size(_context: fidl::encoding::Context) -> usize {
1349            64
1350        }
1351    }
1352
1353    unsafe impl
1354        fidl::encoding::Encode<
1355            LauncherExploreComponentOverPtyRequest,
1356            fidl::encoding::DefaultFuchsiaResourceDialect,
1357        > for &mut LauncherExploreComponentOverPtyRequest
1358    {
1359        #[inline]
1360        unsafe fn encode(
1361            self,
1362            encoder: &mut fidl::encoding::Encoder<
1363                '_,
1364                fidl::encoding::DefaultFuchsiaResourceDialect,
1365            >,
1366            offset: usize,
1367            _depth: fidl::encoding::Depth,
1368        ) -> fidl::Result<()> {
1369            encoder.debug_check_bounds::<LauncherExploreComponentOverPtyRequest>(offset);
1370            // Delegate to tuple encoding.
1371            fidl::encoding::Encode::<LauncherExploreComponentOverPtyRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1372                (
1373                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.moniker),
1374                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.pty),
1375                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
1376                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
1377                    <DashNamespaceLayout as fidl::encoding::ValueTypeMarker>::borrow(&self.ns_layout),
1378                ),
1379                encoder, offset, _depth
1380            )
1381        }
1382    }
1383    unsafe impl<
1384            T0: fidl::encoding::Encode<
1385                fidl::encoding::UnboundedString,
1386                fidl::encoding::DefaultFuchsiaResourceDialect,
1387            >,
1388            T1: fidl::encoding::Encode<
1389                fidl::encoding::Endpoint<
1390                    fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
1391                >,
1392                fidl::encoding::DefaultFuchsiaResourceDialect,
1393            >,
1394            T2: fidl::encoding::Encode<
1395                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1396                fidl::encoding::DefaultFuchsiaResourceDialect,
1397            >,
1398            T3: fidl::encoding::Encode<
1399                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1400                fidl::encoding::DefaultFuchsiaResourceDialect,
1401            >,
1402            T4: fidl::encoding::Encode<
1403                DashNamespaceLayout,
1404                fidl::encoding::DefaultFuchsiaResourceDialect,
1405            >,
1406        >
1407        fidl::encoding::Encode<
1408            LauncherExploreComponentOverPtyRequest,
1409            fidl::encoding::DefaultFuchsiaResourceDialect,
1410        > for (T0, T1, T2, T3, T4)
1411    {
1412        #[inline]
1413        unsafe fn encode(
1414            self,
1415            encoder: &mut fidl::encoding::Encoder<
1416                '_,
1417                fidl::encoding::DefaultFuchsiaResourceDialect,
1418            >,
1419            offset: usize,
1420            depth: fidl::encoding::Depth,
1421        ) -> fidl::Result<()> {
1422            encoder.debug_check_bounds::<LauncherExploreComponentOverPtyRequest>(offset);
1423            // Zero out padding regions. There's no need to apply masks
1424            // because the unmasked parts will be overwritten by fields.
1425            unsafe {
1426                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1427                (ptr as *mut u64).write_unaligned(0);
1428            }
1429            unsafe {
1430                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(56);
1431                (ptr as *mut u64).write_unaligned(0);
1432            }
1433            // Write the fields.
1434            self.0.encode(encoder, offset + 0, depth)?;
1435            self.1.encode(encoder, offset + 16, depth)?;
1436            self.2.encode(encoder, offset + 24, depth)?;
1437            self.3.encode(encoder, offset + 40, depth)?;
1438            self.4.encode(encoder, offset + 56, depth)?;
1439            Ok(())
1440        }
1441    }
1442
1443    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1444        for LauncherExploreComponentOverPtyRequest
1445    {
1446        #[inline(always)]
1447        fn new_empty() -> Self {
1448            Self {
1449                moniker: fidl::new_empty!(
1450                    fidl::encoding::UnboundedString,
1451                    fidl::encoding::DefaultFuchsiaResourceDialect
1452                ),
1453                pty: fidl::new_empty!(
1454                    fidl::encoding::Endpoint<
1455                        fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
1456                    >,
1457                    fidl::encoding::DefaultFuchsiaResourceDialect
1458                ),
1459                tool_urls: fidl::new_empty!(
1460                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1461                    fidl::encoding::DefaultFuchsiaResourceDialect
1462                ),
1463                command: fidl::new_empty!(
1464                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1465                    fidl::encoding::DefaultFuchsiaResourceDialect
1466                ),
1467                ns_layout: fidl::new_empty!(
1468                    DashNamespaceLayout,
1469                    fidl::encoding::DefaultFuchsiaResourceDialect
1470                ),
1471            }
1472        }
1473
1474        #[inline]
1475        unsafe fn decode(
1476            &mut self,
1477            decoder: &mut fidl::encoding::Decoder<
1478                '_,
1479                fidl::encoding::DefaultFuchsiaResourceDialect,
1480            >,
1481            offset: usize,
1482            _depth: fidl::encoding::Depth,
1483        ) -> fidl::Result<()> {
1484            decoder.debug_check_bounds::<Self>(offset);
1485            // Verify that padding bytes are zero.
1486            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1487            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1488            let mask = 0xffffffff00000000u64;
1489            let maskedval = padval & mask;
1490            if maskedval != 0 {
1491                return Err(fidl::Error::NonZeroPadding {
1492                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1493                });
1494            }
1495            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(56) };
1496            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1497            let mask = 0xffffffff00000000u64;
1498            let maskedval = padval & mask;
1499            if maskedval != 0 {
1500                return Err(fidl::Error::NonZeroPadding {
1501                    padding_start: offset + 56 + ((mask as u64).trailing_zeros() / 8) as usize,
1502                });
1503            }
1504            fidl::decode!(
1505                fidl::encoding::UnboundedString,
1506                fidl::encoding::DefaultFuchsiaResourceDialect,
1507                &mut self.moniker,
1508                decoder,
1509                offset + 0,
1510                _depth
1511            )?;
1512            fidl::decode!(
1513                fidl::encoding::Endpoint<
1514                    fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
1515                >,
1516                fidl::encoding::DefaultFuchsiaResourceDialect,
1517                &mut self.pty,
1518                decoder,
1519                offset + 16,
1520                _depth
1521            )?;
1522            fidl::decode!(
1523                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1524                fidl::encoding::DefaultFuchsiaResourceDialect,
1525                &mut self.tool_urls,
1526                decoder,
1527                offset + 24,
1528                _depth
1529            )?;
1530            fidl::decode!(
1531                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1532                fidl::encoding::DefaultFuchsiaResourceDialect,
1533                &mut self.command,
1534                decoder,
1535                offset + 40,
1536                _depth
1537            )?;
1538            fidl::decode!(
1539                DashNamespaceLayout,
1540                fidl::encoding::DefaultFuchsiaResourceDialect,
1541                &mut self.ns_layout,
1542                decoder,
1543                offset + 56,
1544                _depth
1545            )?;
1546            Ok(())
1547        }
1548    }
1549
1550    impl fidl::encoding::ResourceTypeMarker for LauncherExploreComponentOverSocketRequest {
1551        type Borrowed<'a> = &'a mut Self;
1552        fn take_or_borrow<'a>(
1553            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1554        ) -> Self::Borrowed<'a> {
1555            value
1556        }
1557    }
1558
1559    unsafe impl fidl::encoding::TypeMarker for LauncherExploreComponentOverSocketRequest {
1560        type Owned = Self;
1561
1562        #[inline(always)]
1563        fn inline_align(_context: fidl::encoding::Context) -> usize {
1564            8
1565        }
1566
1567        #[inline(always)]
1568        fn inline_size(_context: fidl::encoding::Context) -> usize {
1569            64
1570        }
1571    }
1572
1573    unsafe impl
1574        fidl::encoding::Encode<
1575            LauncherExploreComponentOverSocketRequest,
1576            fidl::encoding::DefaultFuchsiaResourceDialect,
1577        > for &mut LauncherExploreComponentOverSocketRequest
1578    {
1579        #[inline]
1580        unsafe fn encode(
1581            self,
1582            encoder: &mut fidl::encoding::Encoder<
1583                '_,
1584                fidl::encoding::DefaultFuchsiaResourceDialect,
1585            >,
1586            offset: usize,
1587            _depth: fidl::encoding::Depth,
1588        ) -> fidl::Result<()> {
1589            encoder.debug_check_bounds::<LauncherExploreComponentOverSocketRequest>(offset);
1590            // Delegate to tuple encoding.
1591            fidl::encoding::Encode::<LauncherExploreComponentOverSocketRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1592                (
1593                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.moniker),
1594                    <fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.socket),
1595                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
1596                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
1597                    <DashNamespaceLayout as fidl::encoding::ValueTypeMarker>::borrow(&self.ns_layout),
1598                ),
1599                encoder, offset, _depth
1600            )
1601        }
1602    }
1603    unsafe impl<
1604            T0: fidl::encoding::Encode<
1605                fidl::encoding::UnboundedString,
1606                fidl::encoding::DefaultFuchsiaResourceDialect,
1607            >,
1608            T1: fidl::encoding::Encode<
1609                fidl::encoding::HandleType<
1610                    fidl::Socket,
1611                    { fidl::ObjectType::SOCKET.into_raw() },
1612                    2147483648,
1613                >,
1614                fidl::encoding::DefaultFuchsiaResourceDialect,
1615            >,
1616            T2: fidl::encoding::Encode<
1617                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1618                fidl::encoding::DefaultFuchsiaResourceDialect,
1619            >,
1620            T3: fidl::encoding::Encode<
1621                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1622                fidl::encoding::DefaultFuchsiaResourceDialect,
1623            >,
1624            T4: fidl::encoding::Encode<
1625                DashNamespaceLayout,
1626                fidl::encoding::DefaultFuchsiaResourceDialect,
1627            >,
1628        >
1629        fidl::encoding::Encode<
1630            LauncherExploreComponentOverSocketRequest,
1631            fidl::encoding::DefaultFuchsiaResourceDialect,
1632        > for (T0, T1, T2, T3, T4)
1633    {
1634        #[inline]
1635        unsafe fn encode(
1636            self,
1637            encoder: &mut fidl::encoding::Encoder<
1638                '_,
1639                fidl::encoding::DefaultFuchsiaResourceDialect,
1640            >,
1641            offset: usize,
1642            depth: fidl::encoding::Depth,
1643        ) -> fidl::Result<()> {
1644            encoder.debug_check_bounds::<LauncherExploreComponentOverSocketRequest>(offset);
1645            // Zero out padding regions. There's no need to apply masks
1646            // because the unmasked parts will be overwritten by fields.
1647            unsafe {
1648                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1649                (ptr as *mut u64).write_unaligned(0);
1650            }
1651            unsafe {
1652                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(56);
1653                (ptr as *mut u64).write_unaligned(0);
1654            }
1655            // Write the fields.
1656            self.0.encode(encoder, offset + 0, depth)?;
1657            self.1.encode(encoder, offset + 16, depth)?;
1658            self.2.encode(encoder, offset + 24, depth)?;
1659            self.3.encode(encoder, offset + 40, depth)?;
1660            self.4.encode(encoder, offset + 56, depth)?;
1661            Ok(())
1662        }
1663    }
1664
1665    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1666        for LauncherExploreComponentOverSocketRequest
1667    {
1668        #[inline(always)]
1669        fn new_empty() -> Self {
1670            Self {
1671                moniker: fidl::new_empty!(
1672                    fidl::encoding::UnboundedString,
1673                    fidl::encoding::DefaultFuchsiaResourceDialect
1674                ),
1675                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
1676                tool_urls: fidl::new_empty!(
1677                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1678                    fidl::encoding::DefaultFuchsiaResourceDialect
1679                ),
1680                command: fidl::new_empty!(
1681                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1682                    fidl::encoding::DefaultFuchsiaResourceDialect
1683                ),
1684                ns_layout: fidl::new_empty!(
1685                    DashNamespaceLayout,
1686                    fidl::encoding::DefaultFuchsiaResourceDialect
1687                ),
1688            }
1689        }
1690
1691        #[inline]
1692        unsafe fn decode(
1693            &mut self,
1694            decoder: &mut fidl::encoding::Decoder<
1695                '_,
1696                fidl::encoding::DefaultFuchsiaResourceDialect,
1697            >,
1698            offset: usize,
1699            _depth: fidl::encoding::Depth,
1700        ) -> fidl::Result<()> {
1701            decoder.debug_check_bounds::<Self>(offset);
1702            // Verify that padding bytes are zero.
1703            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1704            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1705            let mask = 0xffffffff00000000u64;
1706            let maskedval = padval & mask;
1707            if maskedval != 0 {
1708                return Err(fidl::Error::NonZeroPadding {
1709                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1710                });
1711            }
1712            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(56) };
1713            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1714            let mask = 0xffffffff00000000u64;
1715            let maskedval = padval & mask;
1716            if maskedval != 0 {
1717                return Err(fidl::Error::NonZeroPadding {
1718                    padding_start: offset + 56 + ((mask as u64).trailing_zeros() / 8) as usize,
1719                });
1720            }
1721            fidl::decode!(
1722                fidl::encoding::UnboundedString,
1723                fidl::encoding::DefaultFuchsiaResourceDialect,
1724                &mut self.moniker,
1725                decoder,
1726                offset + 0,
1727                _depth
1728            )?;
1729            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 16, _depth)?;
1730            fidl::decode!(
1731                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1732                fidl::encoding::DefaultFuchsiaResourceDialect,
1733                &mut self.tool_urls,
1734                decoder,
1735                offset + 24,
1736                _depth
1737            )?;
1738            fidl::decode!(
1739                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1740                fidl::encoding::DefaultFuchsiaResourceDialect,
1741                &mut self.command,
1742                decoder,
1743                offset + 40,
1744                _depth
1745            )?;
1746            fidl::decode!(
1747                DashNamespaceLayout,
1748                fidl::encoding::DefaultFuchsiaResourceDialect,
1749                &mut self.ns_layout,
1750                decoder,
1751                offset + 56,
1752                _depth
1753            )?;
1754            Ok(())
1755        }
1756    }
1757
1758    impl fidl::encoding::ResourceTypeMarker for LauncherExplorePackageOverSocket2Request {
1759        type Borrowed<'a> = &'a mut Self;
1760        fn take_or_borrow<'a>(
1761            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1762        ) -> Self::Borrowed<'a> {
1763            value
1764        }
1765    }
1766
1767    unsafe impl fidl::encoding::TypeMarker for LauncherExplorePackageOverSocket2Request {
1768        type Owned = Self;
1769
1770        #[inline(always)]
1771        fn inline_align(_context: fidl::encoding::Context) -> usize {
1772            8
1773        }
1774
1775        #[inline(always)]
1776        fn inline_size(_context: fidl::encoding::Context) -> usize {
1777            80
1778        }
1779    }
1780
1781    unsafe impl
1782        fidl::encoding::Encode<
1783            LauncherExplorePackageOverSocket2Request,
1784            fidl::encoding::DefaultFuchsiaResourceDialect,
1785        > for &mut LauncherExplorePackageOverSocket2Request
1786    {
1787        #[inline]
1788        unsafe fn encode(
1789            self,
1790            encoder: &mut fidl::encoding::Encoder<
1791                '_,
1792                fidl::encoding::DefaultFuchsiaResourceDialect,
1793            >,
1794            offset: usize,
1795            _depth: fidl::encoding::Depth,
1796        ) -> fidl::Result<()> {
1797            encoder.debug_check_bounds::<LauncherExplorePackageOverSocket2Request>(offset);
1798            // Delegate to tuple encoding.
1799            fidl::encoding::Encode::<LauncherExplorePackageOverSocket2Request, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1800                (
1801                    <FuchsiaPkgResolver as fidl::encoding::ValueTypeMarker>::borrow(&self.fuchsia_pkg_resolver),
1802                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.url),
1803                    <fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.subpackages),
1804                    <fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.socket),
1805                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
1806                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
1807                ),
1808                encoder, offset, _depth
1809            )
1810        }
1811    }
1812    unsafe impl<
1813            T0: fidl::encoding::Encode<
1814                FuchsiaPkgResolver,
1815                fidl::encoding::DefaultFuchsiaResourceDialect,
1816            >,
1817            T1: fidl::encoding::Encode<
1818                fidl::encoding::UnboundedString,
1819                fidl::encoding::DefaultFuchsiaResourceDialect,
1820            >,
1821            T2: fidl::encoding::Encode<
1822                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
1823                fidl::encoding::DefaultFuchsiaResourceDialect,
1824            >,
1825            T3: fidl::encoding::Encode<
1826                fidl::encoding::HandleType<
1827                    fidl::Socket,
1828                    { fidl::ObjectType::SOCKET.into_raw() },
1829                    2147483648,
1830                >,
1831                fidl::encoding::DefaultFuchsiaResourceDialect,
1832            >,
1833            T4: fidl::encoding::Encode<
1834                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1835                fidl::encoding::DefaultFuchsiaResourceDialect,
1836            >,
1837            T5: fidl::encoding::Encode<
1838                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1839                fidl::encoding::DefaultFuchsiaResourceDialect,
1840            >,
1841        >
1842        fidl::encoding::Encode<
1843            LauncherExplorePackageOverSocket2Request,
1844            fidl::encoding::DefaultFuchsiaResourceDialect,
1845        > for (T0, T1, T2, T3, T4, T5)
1846    {
1847        #[inline]
1848        unsafe fn encode(
1849            self,
1850            encoder: &mut fidl::encoding::Encoder<
1851                '_,
1852                fidl::encoding::DefaultFuchsiaResourceDialect,
1853            >,
1854            offset: usize,
1855            depth: fidl::encoding::Depth,
1856        ) -> fidl::Result<()> {
1857            encoder.debug_check_bounds::<LauncherExplorePackageOverSocket2Request>(offset);
1858            // Zero out padding regions. There's no need to apply masks
1859            // because the unmasked parts will be overwritten by fields.
1860            unsafe {
1861                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1862                (ptr as *mut u64).write_unaligned(0);
1863            }
1864            unsafe {
1865                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
1866                (ptr as *mut u64).write_unaligned(0);
1867            }
1868            // Write the fields.
1869            self.0.encode(encoder, offset + 0, depth)?;
1870            self.1.encode(encoder, offset + 8, depth)?;
1871            self.2.encode(encoder, offset + 24, depth)?;
1872            self.3.encode(encoder, offset + 40, depth)?;
1873            self.4.encode(encoder, offset + 48, depth)?;
1874            self.5.encode(encoder, offset + 64, depth)?;
1875            Ok(())
1876        }
1877    }
1878
1879    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1880        for LauncherExplorePackageOverSocket2Request
1881    {
1882        #[inline(always)]
1883        fn new_empty() -> Self {
1884            Self {
1885                fuchsia_pkg_resolver: fidl::new_empty!(
1886                    FuchsiaPkgResolver,
1887                    fidl::encoding::DefaultFuchsiaResourceDialect
1888                ),
1889                url: fidl::new_empty!(
1890                    fidl::encoding::UnboundedString,
1891                    fidl::encoding::DefaultFuchsiaResourceDialect
1892                ),
1893                subpackages: fidl::new_empty!(
1894                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
1895                    fidl::encoding::DefaultFuchsiaResourceDialect
1896                ),
1897                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
1898                tool_urls: fidl::new_empty!(
1899                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1900                    fidl::encoding::DefaultFuchsiaResourceDialect
1901                ),
1902                command: fidl::new_empty!(
1903                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1904                    fidl::encoding::DefaultFuchsiaResourceDialect
1905                ),
1906            }
1907        }
1908
1909        #[inline]
1910        unsafe fn decode(
1911            &mut self,
1912            decoder: &mut fidl::encoding::Decoder<
1913                '_,
1914                fidl::encoding::DefaultFuchsiaResourceDialect,
1915            >,
1916            offset: usize,
1917            _depth: fidl::encoding::Depth,
1918        ) -> fidl::Result<()> {
1919            decoder.debug_check_bounds::<Self>(offset);
1920            // Verify that padding bytes are zero.
1921            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1922            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1923            let mask = 0xffffffff00000000u64;
1924            let maskedval = padval & mask;
1925            if maskedval != 0 {
1926                return Err(fidl::Error::NonZeroPadding {
1927                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1928                });
1929            }
1930            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
1931            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1932            let mask = 0xffffffff00000000u64;
1933            let maskedval = padval & mask;
1934            if maskedval != 0 {
1935                return Err(fidl::Error::NonZeroPadding {
1936                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
1937                });
1938            }
1939            fidl::decode!(
1940                FuchsiaPkgResolver,
1941                fidl::encoding::DefaultFuchsiaResourceDialect,
1942                &mut self.fuchsia_pkg_resolver,
1943                decoder,
1944                offset + 0,
1945                _depth
1946            )?;
1947            fidl::decode!(
1948                fidl::encoding::UnboundedString,
1949                fidl::encoding::DefaultFuchsiaResourceDialect,
1950                &mut self.url,
1951                decoder,
1952                offset + 8,
1953                _depth
1954            )?;
1955            fidl::decode!(
1956                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
1957                fidl::encoding::DefaultFuchsiaResourceDialect,
1958                &mut self.subpackages,
1959                decoder,
1960                offset + 24,
1961                _depth
1962            )?;
1963            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 40, _depth)?;
1964            fidl::decode!(
1965                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1966                fidl::encoding::DefaultFuchsiaResourceDialect,
1967                &mut self.tool_urls,
1968                decoder,
1969                offset + 48,
1970                _depth
1971            )?;
1972            fidl::decode!(
1973                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1974                fidl::encoding::DefaultFuchsiaResourceDialect,
1975                &mut self.command,
1976                decoder,
1977                offset + 64,
1978                _depth
1979            )?;
1980            Ok(())
1981        }
1982    }
1983
1984    impl fidl::encoding::ResourceTypeMarker for LauncherExplorePackageOverSocketRequest {
1985        type Borrowed<'a> = &'a mut Self;
1986        fn take_or_borrow<'a>(
1987            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1988        ) -> Self::Borrowed<'a> {
1989            value
1990        }
1991    }
1992
1993    unsafe impl fidl::encoding::TypeMarker for LauncherExplorePackageOverSocketRequest {
1994        type Owned = Self;
1995
1996        #[inline(always)]
1997        fn inline_align(_context: fidl::encoding::Context) -> usize {
1998            8
1999        }
2000
2001        #[inline(always)]
2002        fn inline_size(_context: fidl::encoding::Context) -> usize {
2003            72
2004        }
2005    }
2006
2007    unsafe impl
2008        fidl::encoding::Encode<
2009            LauncherExplorePackageOverSocketRequest,
2010            fidl::encoding::DefaultFuchsiaResourceDialect,
2011        > for &mut LauncherExplorePackageOverSocketRequest
2012    {
2013        #[inline]
2014        unsafe fn encode(
2015            self,
2016            encoder: &mut fidl::encoding::Encoder<
2017                '_,
2018                fidl::encoding::DefaultFuchsiaResourceDialect,
2019            >,
2020            offset: usize,
2021            _depth: fidl::encoding::Depth,
2022        ) -> fidl::Result<()> {
2023            encoder.debug_check_bounds::<LauncherExplorePackageOverSocketRequest>(offset);
2024            // Delegate to tuple encoding.
2025            fidl::encoding::Encode::<LauncherExplorePackageOverSocketRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2026                (
2027                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.url),
2028                    <fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.subpackages),
2029                    <fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.socket),
2030                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
2031                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
2032                ),
2033                encoder, offset, _depth
2034            )
2035        }
2036    }
2037    unsafe impl<
2038            T0: fidl::encoding::Encode<
2039                fidl::encoding::UnboundedString,
2040                fidl::encoding::DefaultFuchsiaResourceDialect,
2041            >,
2042            T1: fidl::encoding::Encode<
2043                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2044                fidl::encoding::DefaultFuchsiaResourceDialect,
2045            >,
2046            T2: fidl::encoding::Encode<
2047                fidl::encoding::HandleType<
2048                    fidl::Socket,
2049                    { fidl::ObjectType::SOCKET.into_raw() },
2050                    2147483648,
2051                >,
2052                fidl::encoding::DefaultFuchsiaResourceDialect,
2053            >,
2054            T3: fidl::encoding::Encode<
2055                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
2056                fidl::encoding::DefaultFuchsiaResourceDialect,
2057            >,
2058            T4: fidl::encoding::Encode<
2059                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2060                fidl::encoding::DefaultFuchsiaResourceDialect,
2061            >,
2062        >
2063        fidl::encoding::Encode<
2064            LauncherExplorePackageOverSocketRequest,
2065            fidl::encoding::DefaultFuchsiaResourceDialect,
2066        > for (T0, T1, T2, T3, T4)
2067    {
2068        #[inline]
2069        unsafe fn encode(
2070            self,
2071            encoder: &mut fidl::encoding::Encoder<
2072                '_,
2073                fidl::encoding::DefaultFuchsiaResourceDialect,
2074            >,
2075            offset: usize,
2076            depth: fidl::encoding::Depth,
2077        ) -> fidl::Result<()> {
2078            encoder.debug_check_bounds::<LauncherExplorePackageOverSocketRequest>(offset);
2079            // Zero out padding regions. There's no need to apply masks
2080            // because the unmasked parts will be overwritten by fields.
2081            unsafe {
2082                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
2083                (ptr as *mut u64).write_unaligned(0);
2084            }
2085            // Write the fields.
2086            self.0.encode(encoder, offset + 0, depth)?;
2087            self.1.encode(encoder, offset + 16, depth)?;
2088            self.2.encode(encoder, offset + 32, depth)?;
2089            self.3.encode(encoder, offset + 40, depth)?;
2090            self.4.encode(encoder, offset + 56, depth)?;
2091            Ok(())
2092        }
2093    }
2094
2095    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2096        for LauncherExplorePackageOverSocketRequest
2097    {
2098        #[inline(always)]
2099        fn new_empty() -> Self {
2100            Self {
2101                url: fidl::new_empty!(
2102                    fidl::encoding::UnboundedString,
2103                    fidl::encoding::DefaultFuchsiaResourceDialect
2104                ),
2105                subpackages: fidl::new_empty!(
2106                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2107                    fidl::encoding::DefaultFuchsiaResourceDialect
2108                ),
2109                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
2110                tool_urls: fidl::new_empty!(
2111                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
2112                    fidl::encoding::DefaultFuchsiaResourceDialect
2113                ),
2114                command: fidl::new_empty!(
2115                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2116                    fidl::encoding::DefaultFuchsiaResourceDialect
2117                ),
2118            }
2119        }
2120
2121        #[inline]
2122        unsafe fn decode(
2123            &mut self,
2124            decoder: &mut fidl::encoding::Decoder<
2125                '_,
2126                fidl::encoding::DefaultFuchsiaResourceDialect,
2127            >,
2128            offset: usize,
2129            _depth: fidl::encoding::Depth,
2130        ) -> fidl::Result<()> {
2131            decoder.debug_check_bounds::<Self>(offset);
2132            // Verify that padding bytes are zero.
2133            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
2134            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2135            let mask = 0xffffffff00000000u64;
2136            let maskedval = padval & mask;
2137            if maskedval != 0 {
2138                return Err(fidl::Error::NonZeroPadding {
2139                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
2140                });
2141            }
2142            fidl::decode!(
2143                fidl::encoding::UnboundedString,
2144                fidl::encoding::DefaultFuchsiaResourceDialect,
2145                &mut self.url,
2146                decoder,
2147                offset + 0,
2148                _depth
2149            )?;
2150            fidl::decode!(
2151                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2152                fidl::encoding::DefaultFuchsiaResourceDialect,
2153                &mut self.subpackages,
2154                decoder,
2155                offset + 16,
2156                _depth
2157            )?;
2158            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 32, _depth)?;
2159            fidl::decode!(
2160                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
2161                fidl::encoding::DefaultFuchsiaResourceDialect,
2162                &mut self.tool_urls,
2163                decoder,
2164                offset + 40,
2165                _depth
2166            )?;
2167            fidl::decode!(
2168                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2169                fidl::encoding::DefaultFuchsiaResourceDialect,
2170                &mut self.command,
2171                decoder,
2172                offset + 56,
2173                _depth
2174            )?;
2175            Ok(())
2176        }
2177    }
2178}