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 fidl::endpoints::ControlHandle for LauncherControlHandle {
1041    fn shutdown(&self) {
1042        self.inner.shutdown()
1043    }
1044
1045    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1046        self.inner.shutdown_with_epitaph(status)
1047    }
1048
1049    fn is_closed(&self) -> bool {
1050        self.inner.channel().is_closed()
1051    }
1052    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1053        self.inner.channel().on_closed()
1054    }
1055
1056    #[cfg(target_os = "fuchsia")]
1057    fn signal_peer(
1058        &self,
1059        clear_mask: zx::Signals,
1060        set_mask: zx::Signals,
1061    ) -> Result<(), zx_status::Status> {
1062        use fidl::Peered;
1063        self.inner.channel().signal_peer(clear_mask, set_mask)
1064    }
1065}
1066
1067impl LauncherControlHandle {
1068    pub fn send_on_terminated(&self, mut return_code: i32) -> Result<(), fidl::Error> {
1069        self.inner.send::<LauncherOnTerminatedRequest>(
1070            (return_code,),
1071            0,
1072            0x6e5422dc5fe6b3f2,
1073            fidl::encoding::DynamicFlags::empty(),
1074        )
1075    }
1076}
1077
1078#[must_use = "FIDL methods require a response to be sent"]
1079#[derive(Debug)]
1080pub struct LauncherExploreComponentOverPtyResponder {
1081    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1082    tx_id: u32,
1083}
1084
1085/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1086/// if the responder is dropped without sending a response, so that the client
1087/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1088impl std::ops::Drop for LauncherExploreComponentOverPtyResponder {
1089    fn drop(&mut self) {
1090        self.control_handle.shutdown();
1091        // Safety: drops once, never accessed again
1092        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1093    }
1094}
1095
1096impl fidl::endpoints::Responder for LauncherExploreComponentOverPtyResponder {
1097    type ControlHandle = LauncherControlHandle;
1098
1099    fn control_handle(&self) -> &LauncherControlHandle {
1100        &self.control_handle
1101    }
1102
1103    fn drop_without_shutdown(mut self) {
1104        // Safety: drops once, never accessed again due to mem::forget
1105        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1106        // Prevent Drop from running (which would shut down the channel)
1107        std::mem::forget(self);
1108    }
1109}
1110
1111impl LauncherExploreComponentOverPtyResponder {
1112    /// Sends a response to the FIDL transaction.
1113    ///
1114    /// Sets the channel to shutdown if an error occurs.
1115    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1116        let _result = self.send_raw(result);
1117        if _result.is_err() {
1118            self.control_handle.shutdown();
1119        }
1120        self.drop_without_shutdown();
1121        _result
1122    }
1123
1124    /// Similar to "send" but does not shutdown the channel if an error occurs.
1125    pub fn send_no_shutdown_on_err(
1126        self,
1127        mut result: Result<(), LauncherError>,
1128    ) -> Result<(), fidl::Error> {
1129        let _result = self.send_raw(result);
1130        self.drop_without_shutdown();
1131        _result
1132    }
1133
1134    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1135        self.control_handle.inner.send::<fidl::encoding::ResultType<
1136            fidl::encoding::EmptyStruct,
1137            LauncherError,
1138        >>(
1139            result,
1140            self.tx_id,
1141            0x22efaa9c12b8779f,
1142            fidl::encoding::DynamicFlags::empty(),
1143        )
1144    }
1145}
1146
1147#[must_use = "FIDL methods require a response to be sent"]
1148#[derive(Debug)]
1149pub struct LauncherExploreComponentOverSocketResponder {
1150    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1151    tx_id: u32,
1152}
1153
1154/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1155/// if the responder is dropped without sending a response, so that the client
1156/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1157impl std::ops::Drop for LauncherExploreComponentOverSocketResponder {
1158    fn drop(&mut self) {
1159        self.control_handle.shutdown();
1160        // Safety: drops once, never accessed again
1161        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1162    }
1163}
1164
1165impl fidl::endpoints::Responder for LauncherExploreComponentOverSocketResponder {
1166    type ControlHandle = LauncherControlHandle;
1167
1168    fn control_handle(&self) -> &LauncherControlHandle {
1169        &self.control_handle
1170    }
1171
1172    fn drop_without_shutdown(mut self) {
1173        // Safety: drops once, never accessed again due to mem::forget
1174        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1175        // Prevent Drop from running (which would shut down the channel)
1176        std::mem::forget(self);
1177    }
1178}
1179
1180impl LauncherExploreComponentOverSocketResponder {
1181    /// Sends a response to the FIDL transaction.
1182    ///
1183    /// Sets the channel to shutdown if an error occurs.
1184    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1185        let _result = self.send_raw(result);
1186        if _result.is_err() {
1187            self.control_handle.shutdown();
1188        }
1189        self.drop_without_shutdown();
1190        _result
1191    }
1192
1193    /// Similar to "send" but does not shutdown the channel if an error occurs.
1194    pub fn send_no_shutdown_on_err(
1195        self,
1196        mut result: Result<(), LauncherError>,
1197    ) -> Result<(), fidl::Error> {
1198        let _result = self.send_raw(result);
1199        self.drop_without_shutdown();
1200        _result
1201    }
1202
1203    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1204        self.control_handle.inner.send::<fidl::encoding::ResultType<
1205            fidl::encoding::EmptyStruct,
1206            LauncherError,
1207        >>(
1208            result,
1209            self.tx_id,
1210            0x233557fb2b70eb68,
1211            fidl::encoding::DynamicFlags::empty(),
1212        )
1213    }
1214}
1215
1216#[must_use = "FIDL methods require a response to be sent"]
1217#[derive(Debug)]
1218pub struct LauncherExplorePackageOverSocketResponder {
1219    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1220    tx_id: u32,
1221}
1222
1223/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1224/// if the responder is dropped without sending a response, so that the client
1225/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1226impl std::ops::Drop for LauncherExplorePackageOverSocketResponder {
1227    fn drop(&mut self) {
1228        self.control_handle.shutdown();
1229        // Safety: drops once, never accessed again
1230        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1231    }
1232}
1233
1234impl fidl::endpoints::Responder for LauncherExplorePackageOverSocketResponder {
1235    type ControlHandle = LauncherControlHandle;
1236
1237    fn control_handle(&self) -> &LauncherControlHandle {
1238        &self.control_handle
1239    }
1240
1241    fn drop_without_shutdown(mut self) {
1242        // Safety: drops once, never accessed again due to mem::forget
1243        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1244        // Prevent Drop from running (which would shut down the channel)
1245        std::mem::forget(self);
1246    }
1247}
1248
1249impl LauncherExplorePackageOverSocketResponder {
1250    /// Sends a response to the FIDL transaction.
1251    ///
1252    /// Sets the channel to shutdown if an error occurs.
1253    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1254        let _result = self.send_raw(result);
1255        if _result.is_err() {
1256            self.control_handle.shutdown();
1257        }
1258        self.drop_without_shutdown();
1259        _result
1260    }
1261
1262    /// Similar to "send" but does not shutdown the channel if an error occurs.
1263    pub fn send_no_shutdown_on_err(
1264        self,
1265        mut result: Result<(), LauncherError>,
1266    ) -> Result<(), fidl::Error> {
1267        let _result = self.send_raw(result);
1268        self.drop_without_shutdown();
1269        _result
1270    }
1271
1272    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1273        self.control_handle.inner.send::<fidl::encoding::ResultType<
1274            fidl::encoding::EmptyStruct,
1275            LauncherError,
1276        >>(
1277            result,
1278            self.tx_id,
1279            0x8e536067655b5a2,
1280            fidl::encoding::DynamicFlags::empty(),
1281        )
1282    }
1283}
1284
1285#[must_use = "FIDL methods require a response to be sent"]
1286#[derive(Debug)]
1287pub struct LauncherExplorePackageOverSocket2Responder {
1288    control_handle: std::mem::ManuallyDrop<LauncherControlHandle>,
1289    tx_id: u32,
1290}
1291
1292/// Set the the channel to be shutdown (see [`LauncherControlHandle::shutdown`])
1293/// if the responder is dropped without sending a response, so that the client
1294/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1295impl std::ops::Drop for LauncherExplorePackageOverSocket2Responder {
1296    fn drop(&mut self) {
1297        self.control_handle.shutdown();
1298        // Safety: drops once, never accessed again
1299        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1300    }
1301}
1302
1303impl fidl::endpoints::Responder for LauncherExplorePackageOverSocket2Responder {
1304    type ControlHandle = LauncherControlHandle;
1305
1306    fn control_handle(&self) -> &LauncherControlHandle {
1307        &self.control_handle
1308    }
1309
1310    fn drop_without_shutdown(mut self) {
1311        // Safety: drops once, never accessed again due to mem::forget
1312        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1313        // Prevent Drop from running (which would shut down the channel)
1314        std::mem::forget(self);
1315    }
1316}
1317
1318impl LauncherExplorePackageOverSocket2Responder {
1319    /// Sends a response to the FIDL transaction.
1320    ///
1321    /// Sets the channel to shutdown if an error occurs.
1322    pub fn send(self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1323        let _result = self.send_raw(result);
1324        if _result.is_err() {
1325            self.control_handle.shutdown();
1326        }
1327        self.drop_without_shutdown();
1328        _result
1329    }
1330
1331    /// Similar to "send" but does not shutdown the channel if an error occurs.
1332    pub fn send_no_shutdown_on_err(
1333        self,
1334        mut result: Result<(), LauncherError>,
1335    ) -> Result<(), fidl::Error> {
1336        let _result = self.send_raw(result);
1337        self.drop_without_shutdown();
1338        _result
1339    }
1340
1341    fn send_raw(&self, mut result: Result<(), LauncherError>) -> Result<(), fidl::Error> {
1342        self.control_handle.inner.send::<fidl::encoding::ResultType<
1343            fidl::encoding::EmptyStruct,
1344            LauncherError,
1345        >>(
1346            result,
1347            self.tx_id,
1348            0x3884e07c1fa8d20b,
1349            fidl::encoding::DynamicFlags::empty(),
1350        )
1351    }
1352}
1353
1354mod internal {
1355    use super::*;
1356
1357    impl fidl::encoding::ResourceTypeMarker for LauncherExploreComponentOverPtyRequest {
1358        type Borrowed<'a> = &'a mut Self;
1359        fn take_or_borrow<'a>(
1360            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1361        ) -> Self::Borrowed<'a> {
1362            value
1363        }
1364    }
1365
1366    unsafe impl fidl::encoding::TypeMarker for LauncherExploreComponentOverPtyRequest {
1367        type Owned = Self;
1368
1369        #[inline(always)]
1370        fn inline_align(_context: fidl::encoding::Context) -> usize {
1371            8
1372        }
1373
1374        #[inline(always)]
1375        fn inline_size(_context: fidl::encoding::Context) -> usize {
1376            64
1377        }
1378    }
1379
1380    unsafe impl
1381        fidl::encoding::Encode<
1382            LauncherExploreComponentOverPtyRequest,
1383            fidl::encoding::DefaultFuchsiaResourceDialect,
1384        > for &mut LauncherExploreComponentOverPtyRequest
1385    {
1386        #[inline]
1387        unsafe fn encode(
1388            self,
1389            encoder: &mut fidl::encoding::Encoder<
1390                '_,
1391                fidl::encoding::DefaultFuchsiaResourceDialect,
1392            >,
1393            offset: usize,
1394            _depth: fidl::encoding::Depth,
1395        ) -> fidl::Result<()> {
1396            encoder.debug_check_bounds::<LauncherExploreComponentOverPtyRequest>(offset);
1397            // Delegate to tuple encoding.
1398            fidl::encoding::Encode::<LauncherExploreComponentOverPtyRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1399                (
1400                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.moniker),
1401                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.pty),
1402                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
1403                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
1404                    <DashNamespaceLayout as fidl::encoding::ValueTypeMarker>::borrow(&self.ns_layout),
1405                ),
1406                encoder, offset, _depth
1407            )
1408        }
1409    }
1410    unsafe impl<
1411        T0: fidl::encoding::Encode<
1412                fidl::encoding::UnboundedString,
1413                fidl::encoding::DefaultFuchsiaResourceDialect,
1414            >,
1415        T1: fidl::encoding::Encode<
1416                fidl::encoding::Endpoint<
1417                    fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
1418                >,
1419                fidl::encoding::DefaultFuchsiaResourceDialect,
1420            >,
1421        T2: fidl::encoding::Encode<
1422                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1423                fidl::encoding::DefaultFuchsiaResourceDialect,
1424            >,
1425        T3: fidl::encoding::Encode<
1426                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1427                fidl::encoding::DefaultFuchsiaResourceDialect,
1428            >,
1429        T4: fidl::encoding::Encode<DashNamespaceLayout, fidl::encoding::DefaultFuchsiaResourceDialect>,
1430    >
1431        fidl::encoding::Encode<
1432            LauncherExploreComponentOverPtyRequest,
1433            fidl::encoding::DefaultFuchsiaResourceDialect,
1434        > for (T0, T1, T2, T3, T4)
1435    {
1436        #[inline]
1437        unsafe fn encode(
1438            self,
1439            encoder: &mut fidl::encoding::Encoder<
1440                '_,
1441                fidl::encoding::DefaultFuchsiaResourceDialect,
1442            >,
1443            offset: usize,
1444            depth: fidl::encoding::Depth,
1445        ) -> fidl::Result<()> {
1446            encoder.debug_check_bounds::<LauncherExploreComponentOverPtyRequest>(offset);
1447            // Zero out padding regions. There's no need to apply masks
1448            // because the unmasked parts will be overwritten by fields.
1449            unsafe {
1450                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1451                (ptr as *mut u64).write_unaligned(0);
1452            }
1453            unsafe {
1454                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(56);
1455                (ptr as *mut u64).write_unaligned(0);
1456            }
1457            // Write the fields.
1458            self.0.encode(encoder, offset + 0, depth)?;
1459            self.1.encode(encoder, offset + 16, depth)?;
1460            self.2.encode(encoder, offset + 24, depth)?;
1461            self.3.encode(encoder, offset + 40, depth)?;
1462            self.4.encode(encoder, offset + 56, depth)?;
1463            Ok(())
1464        }
1465    }
1466
1467    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1468        for LauncherExploreComponentOverPtyRequest
1469    {
1470        #[inline(always)]
1471        fn new_empty() -> Self {
1472            Self {
1473                moniker: fidl::new_empty!(
1474                    fidl::encoding::UnboundedString,
1475                    fidl::encoding::DefaultFuchsiaResourceDialect
1476                ),
1477                pty: fidl::new_empty!(
1478                    fidl::encoding::Endpoint<
1479                        fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
1480                    >,
1481                    fidl::encoding::DefaultFuchsiaResourceDialect
1482                ),
1483                tool_urls: fidl::new_empty!(
1484                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1485                    fidl::encoding::DefaultFuchsiaResourceDialect
1486                ),
1487                command: fidl::new_empty!(
1488                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1489                    fidl::encoding::DefaultFuchsiaResourceDialect
1490                ),
1491                ns_layout: fidl::new_empty!(
1492                    DashNamespaceLayout,
1493                    fidl::encoding::DefaultFuchsiaResourceDialect
1494                ),
1495            }
1496        }
1497
1498        #[inline]
1499        unsafe fn decode(
1500            &mut self,
1501            decoder: &mut fidl::encoding::Decoder<
1502                '_,
1503                fidl::encoding::DefaultFuchsiaResourceDialect,
1504            >,
1505            offset: usize,
1506            _depth: fidl::encoding::Depth,
1507        ) -> fidl::Result<()> {
1508            decoder.debug_check_bounds::<Self>(offset);
1509            // Verify that padding bytes are zero.
1510            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1511            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1512            let mask = 0xffffffff00000000u64;
1513            let maskedval = padval & mask;
1514            if maskedval != 0 {
1515                return Err(fidl::Error::NonZeroPadding {
1516                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1517                });
1518            }
1519            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(56) };
1520            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1521            let mask = 0xffffffff00000000u64;
1522            let maskedval = padval & mask;
1523            if maskedval != 0 {
1524                return Err(fidl::Error::NonZeroPadding {
1525                    padding_start: offset + 56 + ((mask as u64).trailing_zeros() / 8) as usize,
1526                });
1527            }
1528            fidl::decode!(
1529                fidl::encoding::UnboundedString,
1530                fidl::encoding::DefaultFuchsiaResourceDialect,
1531                &mut self.moniker,
1532                decoder,
1533                offset + 0,
1534                _depth
1535            )?;
1536            fidl::decode!(
1537                fidl::encoding::Endpoint<
1538                    fidl::endpoints::ClientEnd<fidl_fuchsia_hardware_pty::DeviceMarker>,
1539                >,
1540                fidl::encoding::DefaultFuchsiaResourceDialect,
1541                &mut self.pty,
1542                decoder,
1543                offset + 16,
1544                _depth
1545            )?;
1546            fidl::decode!(
1547                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1548                fidl::encoding::DefaultFuchsiaResourceDialect,
1549                &mut self.tool_urls,
1550                decoder,
1551                offset + 24,
1552                _depth
1553            )?;
1554            fidl::decode!(
1555                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1556                fidl::encoding::DefaultFuchsiaResourceDialect,
1557                &mut self.command,
1558                decoder,
1559                offset + 40,
1560                _depth
1561            )?;
1562            fidl::decode!(
1563                DashNamespaceLayout,
1564                fidl::encoding::DefaultFuchsiaResourceDialect,
1565                &mut self.ns_layout,
1566                decoder,
1567                offset + 56,
1568                _depth
1569            )?;
1570            Ok(())
1571        }
1572    }
1573
1574    impl fidl::encoding::ResourceTypeMarker for LauncherExploreComponentOverSocketRequest {
1575        type Borrowed<'a> = &'a mut Self;
1576        fn take_or_borrow<'a>(
1577            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1578        ) -> Self::Borrowed<'a> {
1579            value
1580        }
1581    }
1582
1583    unsafe impl fidl::encoding::TypeMarker for LauncherExploreComponentOverSocketRequest {
1584        type Owned = Self;
1585
1586        #[inline(always)]
1587        fn inline_align(_context: fidl::encoding::Context) -> usize {
1588            8
1589        }
1590
1591        #[inline(always)]
1592        fn inline_size(_context: fidl::encoding::Context) -> usize {
1593            64
1594        }
1595    }
1596
1597    unsafe impl
1598        fidl::encoding::Encode<
1599            LauncherExploreComponentOverSocketRequest,
1600            fidl::encoding::DefaultFuchsiaResourceDialect,
1601        > for &mut LauncherExploreComponentOverSocketRequest
1602    {
1603        #[inline]
1604        unsafe fn encode(
1605            self,
1606            encoder: &mut fidl::encoding::Encoder<
1607                '_,
1608                fidl::encoding::DefaultFuchsiaResourceDialect,
1609            >,
1610            offset: usize,
1611            _depth: fidl::encoding::Depth,
1612        ) -> fidl::Result<()> {
1613            encoder.debug_check_bounds::<LauncherExploreComponentOverSocketRequest>(offset);
1614            // Delegate to tuple encoding.
1615            fidl::encoding::Encode::<LauncherExploreComponentOverSocketRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1616                (
1617                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.moniker),
1618                    <fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.socket),
1619                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
1620                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
1621                    <DashNamespaceLayout as fidl::encoding::ValueTypeMarker>::borrow(&self.ns_layout),
1622                ),
1623                encoder, offset, _depth
1624            )
1625        }
1626    }
1627    unsafe impl<
1628        T0: fidl::encoding::Encode<
1629                fidl::encoding::UnboundedString,
1630                fidl::encoding::DefaultFuchsiaResourceDialect,
1631            >,
1632        T1: fidl::encoding::Encode<
1633                fidl::encoding::HandleType<
1634                    fidl::Socket,
1635                    { fidl::ObjectType::SOCKET.into_raw() },
1636                    2147483648,
1637                >,
1638                fidl::encoding::DefaultFuchsiaResourceDialect,
1639            >,
1640        T2: fidl::encoding::Encode<
1641                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1642                fidl::encoding::DefaultFuchsiaResourceDialect,
1643            >,
1644        T3: fidl::encoding::Encode<
1645                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1646                fidl::encoding::DefaultFuchsiaResourceDialect,
1647            >,
1648        T4: fidl::encoding::Encode<DashNamespaceLayout, fidl::encoding::DefaultFuchsiaResourceDialect>,
1649    >
1650        fidl::encoding::Encode<
1651            LauncherExploreComponentOverSocketRequest,
1652            fidl::encoding::DefaultFuchsiaResourceDialect,
1653        > for (T0, T1, T2, T3, T4)
1654    {
1655        #[inline]
1656        unsafe fn encode(
1657            self,
1658            encoder: &mut fidl::encoding::Encoder<
1659                '_,
1660                fidl::encoding::DefaultFuchsiaResourceDialect,
1661            >,
1662            offset: usize,
1663            depth: fidl::encoding::Depth,
1664        ) -> fidl::Result<()> {
1665            encoder.debug_check_bounds::<LauncherExploreComponentOverSocketRequest>(offset);
1666            // Zero out padding regions. There's no need to apply masks
1667            // because the unmasked parts will be overwritten by fields.
1668            unsafe {
1669                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1670                (ptr as *mut u64).write_unaligned(0);
1671            }
1672            unsafe {
1673                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(56);
1674                (ptr as *mut u64).write_unaligned(0);
1675            }
1676            // Write the fields.
1677            self.0.encode(encoder, offset + 0, depth)?;
1678            self.1.encode(encoder, offset + 16, depth)?;
1679            self.2.encode(encoder, offset + 24, depth)?;
1680            self.3.encode(encoder, offset + 40, depth)?;
1681            self.4.encode(encoder, offset + 56, depth)?;
1682            Ok(())
1683        }
1684    }
1685
1686    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1687        for LauncherExploreComponentOverSocketRequest
1688    {
1689        #[inline(always)]
1690        fn new_empty() -> Self {
1691            Self {
1692                moniker: fidl::new_empty!(
1693                    fidl::encoding::UnboundedString,
1694                    fidl::encoding::DefaultFuchsiaResourceDialect
1695                ),
1696                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
1697                tool_urls: fidl::new_empty!(
1698                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1699                    fidl::encoding::DefaultFuchsiaResourceDialect
1700                ),
1701                command: fidl::new_empty!(
1702                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1703                    fidl::encoding::DefaultFuchsiaResourceDialect
1704                ),
1705                ns_layout: fidl::new_empty!(
1706                    DashNamespaceLayout,
1707                    fidl::encoding::DefaultFuchsiaResourceDialect
1708                ),
1709            }
1710        }
1711
1712        #[inline]
1713        unsafe fn decode(
1714            &mut self,
1715            decoder: &mut fidl::encoding::Decoder<
1716                '_,
1717                fidl::encoding::DefaultFuchsiaResourceDialect,
1718            >,
1719            offset: usize,
1720            _depth: fidl::encoding::Depth,
1721        ) -> fidl::Result<()> {
1722            decoder.debug_check_bounds::<Self>(offset);
1723            // Verify that padding bytes are zero.
1724            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1725            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1726            let mask = 0xffffffff00000000u64;
1727            let maskedval = padval & mask;
1728            if maskedval != 0 {
1729                return Err(fidl::Error::NonZeroPadding {
1730                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1731                });
1732            }
1733            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(56) };
1734            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1735            let mask = 0xffffffff00000000u64;
1736            let maskedval = padval & mask;
1737            if maskedval != 0 {
1738                return Err(fidl::Error::NonZeroPadding {
1739                    padding_start: offset + 56 + ((mask as u64).trailing_zeros() / 8) as usize,
1740                });
1741            }
1742            fidl::decode!(
1743                fidl::encoding::UnboundedString,
1744                fidl::encoding::DefaultFuchsiaResourceDialect,
1745                &mut self.moniker,
1746                decoder,
1747                offset + 0,
1748                _depth
1749            )?;
1750            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 16, _depth)?;
1751            fidl::decode!(
1752                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1753                fidl::encoding::DefaultFuchsiaResourceDialect,
1754                &mut self.tool_urls,
1755                decoder,
1756                offset + 24,
1757                _depth
1758            )?;
1759            fidl::decode!(
1760                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1761                fidl::encoding::DefaultFuchsiaResourceDialect,
1762                &mut self.command,
1763                decoder,
1764                offset + 40,
1765                _depth
1766            )?;
1767            fidl::decode!(
1768                DashNamespaceLayout,
1769                fidl::encoding::DefaultFuchsiaResourceDialect,
1770                &mut self.ns_layout,
1771                decoder,
1772                offset + 56,
1773                _depth
1774            )?;
1775            Ok(())
1776        }
1777    }
1778
1779    impl fidl::encoding::ResourceTypeMarker for LauncherExplorePackageOverSocket2Request {
1780        type Borrowed<'a> = &'a mut Self;
1781        fn take_or_borrow<'a>(
1782            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1783        ) -> Self::Borrowed<'a> {
1784            value
1785        }
1786    }
1787
1788    unsafe impl fidl::encoding::TypeMarker for LauncherExplorePackageOverSocket2Request {
1789        type Owned = Self;
1790
1791        #[inline(always)]
1792        fn inline_align(_context: fidl::encoding::Context) -> usize {
1793            8
1794        }
1795
1796        #[inline(always)]
1797        fn inline_size(_context: fidl::encoding::Context) -> usize {
1798            80
1799        }
1800    }
1801
1802    unsafe impl
1803        fidl::encoding::Encode<
1804            LauncherExplorePackageOverSocket2Request,
1805            fidl::encoding::DefaultFuchsiaResourceDialect,
1806        > for &mut LauncherExplorePackageOverSocket2Request
1807    {
1808        #[inline]
1809        unsafe fn encode(
1810            self,
1811            encoder: &mut fidl::encoding::Encoder<
1812                '_,
1813                fidl::encoding::DefaultFuchsiaResourceDialect,
1814            >,
1815            offset: usize,
1816            _depth: fidl::encoding::Depth,
1817        ) -> fidl::Result<()> {
1818            encoder.debug_check_bounds::<LauncherExplorePackageOverSocket2Request>(offset);
1819            // Delegate to tuple encoding.
1820            fidl::encoding::Encode::<LauncherExplorePackageOverSocket2Request, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1821                (
1822                    <FuchsiaPkgResolver as fidl::encoding::ValueTypeMarker>::borrow(&self.fuchsia_pkg_resolver),
1823                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.url),
1824                    <fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.subpackages),
1825                    <fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.socket),
1826                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
1827                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
1828                ),
1829                encoder, offset, _depth
1830            )
1831        }
1832    }
1833    unsafe impl<
1834        T0: fidl::encoding::Encode<FuchsiaPkgResolver, fidl::encoding::DefaultFuchsiaResourceDialect>,
1835        T1: fidl::encoding::Encode<
1836                fidl::encoding::UnboundedString,
1837                fidl::encoding::DefaultFuchsiaResourceDialect,
1838            >,
1839        T2: fidl::encoding::Encode<
1840                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
1841                fidl::encoding::DefaultFuchsiaResourceDialect,
1842            >,
1843        T3: fidl::encoding::Encode<
1844                fidl::encoding::HandleType<
1845                    fidl::Socket,
1846                    { fidl::ObjectType::SOCKET.into_raw() },
1847                    2147483648,
1848                >,
1849                fidl::encoding::DefaultFuchsiaResourceDialect,
1850            >,
1851        T4: fidl::encoding::Encode<
1852                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1853                fidl::encoding::DefaultFuchsiaResourceDialect,
1854            >,
1855        T5: fidl::encoding::Encode<
1856                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1857                fidl::encoding::DefaultFuchsiaResourceDialect,
1858            >,
1859    >
1860        fidl::encoding::Encode<
1861            LauncherExplorePackageOverSocket2Request,
1862            fidl::encoding::DefaultFuchsiaResourceDialect,
1863        > for (T0, T1, T2, T3, T4, T5)
1864    {
1865        #[inline]
1866        unsafe fn encode(
1867            self,
1868            encoder: &mut fidl::encoding::Encoder<
1869                '_,
1870                fidl::encoding::DefaultFuchsiaResourceDialect,
1871            >,
1872            offset: usize,
1873            depth: fidl::encoding::Depth,
1874        ) -> fidl::Result<()> {
1875            encoder.debug_check_bounds::<LauncherExplorePackageOverSocket2Request>(offset);
1876            // Zero out padding regions. There's no need to apply masks
1877            // because the unmasked parts will be overwritten by fields.
1878            unsafe {
1879                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1880                (ptr as *mut u64).write_unaligned(0);
1881            }
1882            unsafe {
1883                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
1884                (ptr as *mut u64).write_unaligned(0);
1885            }
1886            // Write the fields.
1887            self.0.encode(encoder, offset + 0, depth)?;
1888            self.1.encode(encoder, offset + 8, depth)?;
1889            self.2.encode(encoder, offset + 24, depth)?;
1890            self.3.encode(encoder, offset + 40, depth)?;
1891            self.4.encode(encoder, offset + 48, depth)?;
1892            self.5.encode(encoder, offset + 64, depth)?;
1893            Ok(())
1894        }
1895    }
1896
1897    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1898        for LauncherExplorePackageOverSocket2Request
1899    {
1900        #[inline(always)]
1901        fn new_empty() -> Self {
1902            Self {
1903                fuchsia_pkg_resolver: fidl::new_empty!(
1904                    FuchsiaPkgResolver,
1905                    fidl::encoding::DefaultFuchsiaResourceDialect
1906                ),
1907                url: fidl::new_empty!(
1908                    fidl::encoding::UnboundedString,
1909                    fidl::encoding::DefaultFuchsiaResourceDialect
1910                ),
1911                subpackages: fidl::new_empty!(
1912                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
1913                    fidl::encoding::DefaultFuchsiaResourceDialect
1914                ),
1915                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
1916                tool_urls: fidl::new_empty!(
1917                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1918                    fidl::encoding::DefaultFuchsiaResourceDialect
1919                ),
1920                command: fidl::new_empty!(
1921                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1922                    fidl::encoding::DefaultFuchsiaResourceDialect
1923                ),
1924            }
1925        }
1926
1927        #[inline]
1928        unsafe fn decode(
1929            &mut self,
1930            decoder: &mut fidl::encoding::Decoder<
1931                '_,
1932                fidl::encoding::DefaultFuchsiaResourceDialect,
1933            >,
1934            offset: usize,
1935            _depth: fidl::encoding::Depth,
1936        ) -> fidl::Result<()> {
1937            decoder.debug_check_bounds::<Self>(offset);
1938            // Verify that padding bytes are zero.
1939            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1940            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1941            let mask = 0xffffffff00000000u64;
1942            let maskedval = padval & mask;
1943            if maskedval != 0 {
1944                return Err(fidl::Error::NonZeroPadding {
1945                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1946                });
1947            }
1948            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
1949            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1950            let mask = 0xffffffff00000000u64;
1951            let maskedval = padval & mask;
1952            if maskedval != 0 {
1953                return Err(fidl::Error::NonZeroPadding {
1954                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
1955                });
1956            }
1957            fidl::decode!(
1958                FuchsiaPkgResolver,
1959                fidl::encoding::DefaultFuchsiaResourceDialect,
1960                &mut self.fuchsia_pkg_resolver,
1961                decoder,
1962                offset + 0,
1963                _depth
1964            )?;
1965            fidl::decode!(
1966                fidl::encoding::UnboundedString,
1967                fidl::encoding::DefaultFuchsiaResourceDialect,
1968                &mut self.url,
1969                decoder,
1970                offset + 8,
1971                _depth
1972            )?;
1973            fidl::decode!(
1974                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
1975                fidl::encoding::DefaultFuchsiaResourceDialect,
1976                &mut self.subpackages,
1977                decoder,
1978                offset + 24,
1979                _depth
1980            )?;
1981            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 40, _depth)?;
1982            fidl::decode!(
1983                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
1984                fidl::encoding::DefaultFuchsiaResourceDialect,
1985                &mut self.tool_urls,
1986                decoder,
1987                offset + 48,
1988                _depth
1989            )?;
1990            fidl::decode!(
1991                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1992                fidl::encoding::DefaultFuchsiaResourceDialect,
1993                &mut self.command,
1994                decoder,
1995                offset + 64,
1996                _depth
1997            )?;
1998            Ok(())
1999        }
2000    }
2001
2002    impl fidl::encoding::ResourceTypeMarker for LauncherExplorePackageOverSocketRequest {
2003        type Borrowed<'a> = &'a mut Self;
2004        fn take_or_borrow<'a>(
2005            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2006        ) -> Self::Borrowed<'a> {
2007            value
2008        }
2009    }
2010
2011    unsafe impl fidl::encoding::TypeMarker for LauncherExplorePackageOverSocketRequest {
2012        type Owned = Self;
2013
2014        #[inline(always)]
2015        fn inline_align(_context: fidl::encoding::Context) -> usize {
2016            8
2017        }
2018
2019        #[inline(always)]
2020        fn inline_size(_context: fidl::encoding::Context) -> usize {
2021            72
2022        }
2023    }
2024
2025    unsafe impl
2026        fidl::encoding::Encode<
2027            LauncherExplorePackageOverSocketRequest,
2028            fidl::encoding::DefaultFuchsiaResourceDialect,
2029        > for &mut LauncherExplorePackageOverSocketRequest
2030    {
2031        #[inline]
2032        unsafe fn encode(
2033            self,
2034            encoder: &mut fidl::encoding::Encoder<
2035                '_,
2036                fidl::encoding::DefaultFuchsiaResourceDialect,
2037            >,
2038            offset: usize,
2039            _depth: fidl::encoding::Depth,
2040        ) -> fidl::Result<()> {
2041            encoder.debug_check_bounds::<LauncherExplorePackageOverSocketRequest>(offset);
2042            // Delegate to tuple encoding.
2043            fidl::encoding::Encode::<LauncherExplorePackageOverSocketRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2044                (
2045                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.url),
2046                    <fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.subpackages),
2047                    <fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.socket),
2048                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20> as fidl::encoding::ValueTypeMarker>::borrow(&self.tool_urls),
2049                    <fidl::encoding::Optional<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow(&self.command),
2050                ),
2051                encoder, offset, _depth
2052            )
2053        }
2054    }
2055    unsafe impl<
2056        T0: fidl::encoding::Encode<
2057                fidl::encoding::UnboundedString,
2058                fidl::encoding::DefaultFuchsiaResourceDialect,
2059            >,
2060        T1: fidl::encoding::Encode<
2061                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2062                fidl::encoding::DefaultFuchsiaResourceDialect,
2063            >,
2064        T2: fidl::encoding::Encode<
2065                fidl::encoding::HandleType<
2066                    fidl::Socket,
2067                    { fidl::ObjectType::SOCKET.into_raw() },
2068                    2147483648,
2069                >,
2070                fidl::encoding::DefaultFuchsiaResourceDialect,
2071            >,
2072        T3: fidl::encoding::Encode<
2073                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
2074                fidl::encoding::DefaultFuchsiaResourceDialect,
2075            >,
2076        T4: fidl::encoding::Encode<
2077                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2078                fidl::encoding::DefaultFuchsiaResourceDialect,
2079            >,
2080    >
2081        fidl::encoding::Encode<
2082            LauncherExplorePackageOverSocketRequest,
2083            fidl::encoding::DefaultFuchsiaResourceDialect,
2084        > for (T0, T1, T2, T3, T4)
2085    {
2086        #[inline]
2087        unsafe fn encode(
2088            self,
2089            encoder: &mut fidl::encoding::Encoder<
2090                '_,
2091                fidl::encoding::DefaultFuchsiaResourceDialect,
2092            >,
2093            offset: usize,
2094            depth: fidl::encoding::Depth,
2095        ) -> fidl::Result<()> {
2096            encoder.debug_check_bounds::<LauncherExplorePackageOverSocketRequest>(offset);
2097            // Zero out padding regions. There's no need to apply masks
2098            // because the unmasked parts will be overwritten by fields.
2099            unsafe {
2100                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
2101                (ptr as *mut u64).write_unaligned(0);
2102            }
2103            // Write the fields.
2104            self.0.encode(encoder, offset + 0, depth)?;
2105            self.1.encode(encoder, offset + 16, depth)?;
2106            self.2.encode(encoder, offset + 32, depth)?;
2107            self.3.encode(encoder, offset + 40, depth)?;
2108            self.4.encode(encoder, offset + 56, depth)?;
2109            Ok(())
2110        }
2111    }
2112
2113    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2114        for LauncherExplorePackageOverSocketRequest
2115    {
2116        #[inline(always)]
2117        fn new_empty() -> Self {
2118            Self {
2119                url: fidl::new_empty!(
2120                    fidl::encoding::UnboundedString,
2121                    fidl::encoding::DefaultFuchsiaResourceDialect
2122                ),
2123                subpackages: fidl::new_empty!(
2124                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2125                    fidl::encoding::DefaultFuchsiaResourceDialect
2126                ),
2127                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
2128                tool_urls: fidl::new_empty!(
2129                    fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
2130                    fidl::encoding::DefaultFuchsiaResourceDialect
2131                ),
2132                command: fidl::new_empty!(
2133                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2134                    fidl::encoding::DefaultFuchsiaResourceDialect
2135                ),
2136            }
2137        }
2138
2139        #[inline]
2140        unsafe fn decode(
2141            &mut self,
2142            decoder: &mut fidl::encoding::Decoder<
2143                '_,
2144                fidl::encoding::DefaultFuchsiaResourceDialect,
2145            >,
2146            offset: usize,
2147            _depth: fidl::encoding::Depth,
2148        ) -> fidl::Result<()> {
2149            decoder.debug_check_bounds::<Self>(offset);
2150            // Verify that padding bytes are zero.
2151            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
2152            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2153            let mask = 0xffffffff00000000u64;
2154            let maskedval = padval & mask;
2155            if maskedval != 0 {
2156                return Err(fidl::Error::NonZeroPadding {
2157                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
2158                });
2159            }
2160            fidl::decode!(
2161                fidl::encoding::UnboundedString,
2162                fidl::encoding::DefaultFuchsiaResourceDialect,
2163                &mut self.url,
2164                decoder,
2165                offset + 0,
2166                _depth
2167            )?;
2168            fidl::decode!(
2169                fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2170                fidl::encoding::DefaultFuchsiaResourceDialect,
2171                &mut self.subpackages,
2172                decoder,
2173                offset + 16,
2174                _depth
2175            )?;
2176            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 32, _depth)?;
2177            fidl::decode!(
2178                fidl::encoding::Vector<fidl::encoding::BoundedString<4096>, 20>,
2179                fidl::encoding::DefaultFuchsiaResourceDialect,
2180                &mut self.tool_urls,
2181                decoder,
2182                offset + 40,
2183                _depth
2184            )?;
2185            fidl::decode!(
2186                fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2187                fidl::encoding::DefaultFuchsiaResourceDialect,
2188                &mut self.command,
2189                decoder,
2190                offset + 56,
2191                _depth
2192            )?;
2193            Ok(())
2194        }
2195    }
2196}