Skip to main content

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