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