1#![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_component_resolution_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct ResolverResolveWithContextResponse {
16 pub component: Component,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
20 for ResolverResolveWithContextResponse
21{
22}
23
24#[derive(Debug, PartialEq)]
25pub struct ResolverResolveResponse {
26 pub component: Component,
27}
28
29impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ResolverResolveResponse {}
30
31#[derive(Debug, Default, PartialEq)]
36pub struct Component {
37 pub url: Option<String>,
41 pub decl: Option<fidl_fuchsia_mem::Data>,
45 pub package: Option<Package>,
58 pub config_values: Option<fidl_fuchsia_mem::Data>,
61 pub resolution_context: Option<Context>,
75 pub abi_revision: Option<u64>,
77 #[doc(hidden)]
78 pub __source_breaking: fidl::marker::SourceBreaking,
79}
80
81impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Component {}
82
83#[derive(Debug, Default, PartialEq)]
87pub struct Package {
88 pub url: Option<String>,
90 pub directory: Option<fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>>,
92 #[doc(hidden)]
93 pub __source_breaking: fidl::marker::SourceBreaking,
94}
95
96impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Package {}
97
98#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
99pub struct ResolverMarker;
100
101impl fidl::endpoints::ProtocolMarker for ResolverMarker {
102 type Proxy = ResolverProxy;
103 type RequestStream = ResolverRequestStream;
104 #[cfg(target_os = "fuchsia")]
105 type SynchronousProxy = ResolverSynchronousProxy;
106
107 const DEBUG_NAME: &'static str = "fuchsia.component.resolution.Resolver";
108}
109impl fidl::endpoints::DiscoverableProtocolMarker for ResolverMarker {}
110pub type ResolverResolveResult = Result<Component, ResolverError>;
111pub type ResolverResolveWithContextResult = Result<Component, ResolverError>;
112
113pub trait ResolverProxyInterface: Send + Sync {
114 type ResolveResponseFut: std::future::Future<Output = Result<ResolverResolveResult, fidl::Error>>
115 + Send;
116 fn r#resolve(&self, component_url: &str) -> Self::ResolveResponseFut;
117 type ResolveWithContextResponseFut: std::future::Future<Output = Result<ResolverResolveWithContextResult, fidl::Error>>
118 + Send;
119 fn r#resolve_with_context(
120 &self,
121 component_url: &str,
122 context: &Context,
123 ) -> Self::ResolveWithContextResponseFut;
124}
125#[derive(Debug)]
126#[cfg(target_os = "fuchsia")]
127pub struct ResolverSynchronousProxy {
128 client: fidl::client::sync::Client,
129}
130
131#[cfg(target_os = "fuchsia")]
132impl fidl::endpoints::SynchronousProxy for ResolverSynchronousProxy {
133 type Proxy = ResolverProxy;
134 type Protocol = ResolverMarker;
135
136 fn from_channel(inner: fidl::Channel) -> Self {
137 Self::new(inner)
138 }
139
140 fn into_channel(self) -> fidl::Channel {
141 self.client.into_channel()
142 }
143
144 fn as_channel(&self) -> &fidl::Channel {
145 self.client.as_channel()
146 }
147}
148
149#[cfg(target_os = "fuchsia")]
150impl ResolverSynchronousProxy {
151 pub fn new(channel: fidl::Channel) -> Self {
152 Self { client: fidl::client::sync::Client::new(channel) }
153 }
154
155 pub fn into_channel(self) -> fidl::Channel {
156 self.client.into_channel()
157 }
158
159 pub fn wait_for_event(
162 &self,
163 deadline: zx::MonotonicInstant,
164 ) -> Result<ResolverEvent, fidl::Error> {
165 ResolverEvent::decode(self.client.wait_for_event::<ResolverMarker>(deadline)?)
166 }
167
168 pub fn r#resolve(
177 &self,
178 mut component_url: &str,
179 ___deadline: zx::MonotonicInstant,
180 ) -> Result<ResolverResolveResult, fidl::Error> {
181 let _response = self.client.send_query::<
182 ResolverResolveRequest,
183 fidl::encoding::ResultType<ResolverResolveResponse, ResolverError>,
184 ResolverMarker,
185 >(
186 (component_url,),
187 0x57f9cfe88bf1f2e5,
188 fidl::encoding::DynamicFlags::empty(),
189 ___deadline,
190 )?;
191 Ok(_response.map(|x| x.component))
192 }
193
194 pub fn r#resolve_with_context(
208 &self,
209 mut component_url: &str,
210 mut context: &Context,
211 ___deadline: zx::MonotonicInstant,
212 ) -> Result<ResolverResolveWithContextResult, fidl::Error> {
213 let _response = self.client.send_query::<
214 ResolverResolveWithContextRequest,
215 fidl::encoding::ResultType<ResolverResolveWithContextResponse, ResolverError>,
216 ResolverMarker,
217 >(
218 (component_url, context,),
219 0x4d64b0de827070bd,
220 fidl::encoding::DynamicFlags::empty(),
221 ___deadline,
222 )?;
223 Ok(_response.map(|x| x.component))
224 }
225}
226
227#[cfg(target_os = "fuchsia")]
228impl From<ResolverSynchronousProxy> for zx::NullableHandle {
229 fn from(value: ResolverSynchronousProxy) -> Self {
230 value.into_channel().into()
231 }
232}
233
234#[cfg(target_os = "fuchsia")]
235impl From<fidl::Channel> for ResolverSynchronousProxy {
236 fn from(value: fidl::Channel) -> Self {
237 Self::new(value)
238 }
239}
240
241#[cfg(target_os = "fuchsia")]
242impl fidl::endpoints::FromClient for ResolverSynchronousProxy {
243 type Protocol = ResolverMarker;
244
245 fn from_client(value: fidl::endpoints::ClientEnd<ResolverMarker>) -> Self {
246 Self::new(value.into_channel())
247 }
248}
249
250#[derive(Debug, Clone)]
251pub struct ResolverProxy {
252 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
253}
254
255impl fidl::endpoints::Proxy for ResolverProxy {
256 type Protocol = ResolverMarker;
257
258 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
259 Self::new(inner)
260 }
261
262 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
263 self.client.into_channel().map_err(|client| Self { client })
264 }
265
266 fn as_channel(&self) -> &::fidl::AsyncChannel {
267 self.client.as_channel()
268 }
269}
270
271impl ResolverProxy {
272 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
274 let protocol_name = <ResolverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
275 Self { client: fidl::client::Client::new(channel, protocol_name) }
276 }
277
278 pub fn take_event_stream(&self) -> ResolverEventStream {
284 ResolverEventStream { event_receiver: self.client.take_event_receiver() }
285 }
286
287 pub fn r#resolve(
296 &self,
297 mut component_url: &str,
298 ) -> fidl::client::QueryResponseFut<
299 ResolverResolveResult,
300 fidl::encoding::DefaultFuchsiaResourceDialect,
301 > {
302 ResolverProxyInterface::r#resolve(self, component_url)
303 }
304
305 pub fn r#resolve_with_context(
319 &self,
320 mut component_url: &str,
321 mut context: &Context,
322 ) -> fidl::client::QueryResponseFut<
323 ResolverResolveWithContextResult,
324 fidl::encoding::DefaultFuchsiaResourceDialect,
325 > {
326 ResolverProxyInterface::r#resolve_with_context(self, component_url, context)
327 }
328}
329
330impl ResolverProxyInterface for ResolverProxy {
331 type ResolveResponseFut = fidl::client::QueryResponseFut<
332 ResolverResolveResult,
333 fidl::encoding::DefaultFuchsiaResourceDialect,
334 >;
335 fn r#resolve(&self, mut component_url: &str) -> Self::ResolveResponseFut {
336 fn _decode(
337 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
338 ) -> Result<ResolverResolveResult, fidl::Error> {
339 let _response = fidl::client::decode_transaction_body::<
340 fidl::encoding::ResultType<ResolverResolveResponse, ResolverError>,
341 fidl::encoding::DefaultFuchsiaResourceDialect,
342 0x57f9cfe88bf1f2e5,
343 >(_buf?)?;
344 Ok(_response.map(|x| x.component))
345 }
346 self.client.send_query_and_decode::<ResolverResolveRequest, ResolverResolveResult>(
347 (component_url,),
348 0x57f9cfe88bf1f2e5,
349 fidl::encoding::DynamicFlags::empty(),
350 _decode,
351 )
352 }
353
354 type ResolveWithContextResponseFut = fidl::client::QueryResponseFut<
355 ResolverResolveWithContextResult,
356 fidl::encoding::DefaultFuchsiaResourceDialect,
357 >;
358 fn r#resolve_with_context(
359 &self,
360 mut component_url: &str,
361 mut context: &Context,
362 ) -> Self::ResolveWithContextResponseFut {
363 fn _decode(
364 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
365 ) -> Result<ResolverResolveWithContextResult, fidl::Error> {
366 let _response = fidl::client::decode_transaction_body::<
367 fidl::encoding::ResultType<ResolverResolveWithContextResponse, ResolverError>,
368 fidl::encoding::DefaultFuchsiaResourceDialect,
369 0x4d64b0de827070bd,
370 >(_buf?)?;
371 Ok(_response.map(|x| x.component))
372 }
373 self.client.send_query_and_decode::<
374 ResolverResolveWithContextRequest,
375 ResolverResolveWithContextResult,
376 >(
377 (component_url, context,),
378 0x4d64b0de827070bd,
379 fidl::encoding::DynamicFlags::empty(),
380 _decode,
381 )
382 }
383}
384
385pub struct ResolverEventStream {
386 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
387}
388
389impl std::marker::Unpin for ResolverEventStream {}
390
391impl futures::stream::FusedStream for ResolverEventStream {
392 fn is_terminated(&self) -> bool {
393 self.event_receiver.is_terminated()
394 }
395}
396
397impl futures::Stream for ResolverEventStream {
398 type Item = Result<ResolverEvent, fidl::Error>;
399
400 fn poll_next(
401 mut self: std::pin::Pin<&mut Self>,
402 cx: &mut std::task::Context<'_>,
403 ) -> std::task::Poll<Option<Self::Item>> {
404 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
405 &mut self.event_receiver,
406 cx
407 )?) {
408 Some(buf) => std::task::Poll::Ready(Some(ResolverEvent::decode(buf))),
409 None => std::task::Poll::Ready(None),
410 }
411 }
412}
413
414#[derive(Debug)]
415pub enum ResolverEvent {
416 #[non_exhaustive]
417 _UnknownEvent {
418 ordinal: u64,
420 },
421}
422
423impl ResolverEvent {
424 fn decode(
426 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
427 ) -> Result<ResolverEvent, fidl::Error> {
428 let (bytes, _handles) = buf.split_mut();
429 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
430 debug_assert_eq!(tx_header.tx_id, 0);
431 match tx_header.ordinal {
432 _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
433 Ok(ResolverEvent::_UnknownEvent { ordinal: tx_header.ordinal })
434 }
435 _ => Err(fidl::Error::UnknownOrdinal {
436 ordinal: tx_header.ordinal,
437 protocol_name: <ResolverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
438 }),
439 }
440 }
441}
442
443pub struct ResolverRequestStream {
445 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
446 is_terminated: bool,
447}
448
449impl std::marker::Unpin for ResolverRequestStream {}
450
451impl futures::stream::FusedStream for ResolverRequestStream {
452 fn is_terminated(&self) -> bool {
453 self.is_terminated
454 }
455}
456
457impl fidl::endpoints::RequestStream for ResolverRequestStream {
458 type Protocol = ResolverMarker;
459 type ControlHandle = ResolverControlHandle;
460
461 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
462 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
463 }
464
465 fn control_handle(&self) -> Self::ControlHandle {
466 ResolverControlHandle { inner: self.inner.clone() }
467 }
468
469 fn into_inner(
470 self,
471 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
472 {
473 (self.inner, self.is_terminated)
474 }
475
476 fn from_inner(
477 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
478 is_terminated: bool,
479 ) -> Self {
480 Self { inner, is_terminated }
481 }
482}
483
484impl futures::Stream for ResolverRequestStream {
485 type Item = Result<ResolverRequest, fidl::Error>;
486
487 fn poll_next(
488 mut self: std::pin::Pin<&mut Self>,
489 cx: &mut std::task::Context<'_>,
490 ) -> std::task::Poll<Option<Self::Item>> {
491 let this = &mut *self;
492 if this.inner.check_shutdown(cx) {
493 this.is_terminated = true;
494 return std::task::Poll::Ready(None);
495 }
496 if this.is_terminated {
497 panic!("polled ResolverRequestStream after completion");
498 }
499 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
500 |bytes, handles| {
501 match this.inner.channel().read_etc(cx, bytes, handles) {
502 std::task::Poll::Ready(Ok(())) => {}
503 std::task::Poll::Pending => return std::task::Poll::Pending,
504 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
505 this.is_terminated = true;
506 return std::task::Poll::Ready(None);
507 }
508 std::task::Poll::Ready(Err(e)) => {
509 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
510 e.into(),
511 ))));
512 }
513 }
514
515 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
517
518 std::task::Poll::Ready(Some(match header.ordinal {
519 0x57f9cfe88bf1f2e5 => {
520 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
521 let mut req = fidl::new_empty!(
522 ResolverResolveRequest,
523 fidl::encoding::DefaultFuchsiaResourceDialect
524 );
525 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ResolverResolveRequest>(&header, _body_bytes, handles, &mut req)?;
526 let control_handle = ResolverControlHandle { inner: this.inner.clone() };
527 Ok(ResolverRequest::Resolve {
528 component_url: req.component_url,
529
530 responder: ResolverResolveResponder {
531 control_handle: std::mem::ManuallyDrop::new(control_handle),
532 tx_id: header.tx_id,
533 },
534 })
535 }
536 0x4d64b0de827070bd => {
537 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
538 let mut req = fidl::new_empty!(
539 ResolverResolveWithContextRequest,
540 fidl::encoding::DefaultFuchsiaResourceDialect
541 );
542 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ResolverResolveWithContextRequest>(&header, _body_bytes, handles, &mut req)?;
543 let control_handle = ResolverControlHandle { inner: this.inner.clone() };
544 Ok(ResolverRequest::ResolveWithContext {
545 component_url: req.component_url,
546 context: req.context,
547
548 responder: ResolverResolveWithContextResponder {
549 control_handle: std::mem::ManuallyDrop::new(control_handle),
550 tx_id: header.tx_id,
551 },
552 })
553 }
554 _ if header.tx_id == 0
555 && header
556 .dynamic_flags()
557 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
558 {
559 Ok(ResolverRequest::_UnknownMethod {
560 ordinal: header.ordinal,
561 control_handle: ResolverControlHandle { inner: this.inner.clone() },
562 method_type: fidl::MethodType::OneWay,
563 })
564 }
565 _ if header
566 .dynamic_flags()
567 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
568 {
569 this.inner.send_framework_err(
570 fidl::encoding::FrameworkErr::UnknownMethod,
571 header.tx_id,
572 header.ordinal,
573 header.dynamic_flags(),
574 (bytes, handles),
575 )?;
576 Ok(ResolverRequest::_UnknownMethod {
577 ordinal: header.ordinal,
578 control_handle: ResolverControlHandle { inner: this.inner.clone() },
579 method_type: fidl::MethodType::TwoWay,
580 })
581 }
582 _ => Err(fidl::Error::UnknownOrdinal {
583 ordinal: header.ordinal,
584 protocol_name:
585 <ResolverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
586 }),
587 }))
588 },
589 )
590 }
591}
592
593#[derive(Debug)]
606pub enum ResolverRequest {
607 Resolve { component_url: String, responder: ResolverResolveResponder },
616 ResolveWithContext {
630 component_url: String,
631 context: Context,
632 responder: ResolverResolveWithContextResponder,
633 },
634 #[non_exhaustive]
636 _UnknownMethod {
637 ordinal: u64,
639 control_handle: ResolverControlHandle,
640 method_type: fidl::MethodType,
641 },
642}
643
644impl ResolverRequest {
645 #[allow(irrefutable_let_patterns)]
646 pub fn into_resolve(self) -> Option<(String, ResolverResolveResponder)> {
647 if let ResolverRequest::Resolve { component_url, responder } = self {
648 Some((component_url, responder))
649 } else {
650 None
651 }
652 }
653
654 #[allow(irrefutable_let_patterns)]
655 pub fn into_resolve_with_context(
656 self,
657 ) -> Option<(String, Context, ResolverResolveWithContextResponder)> {
658 if let ResolverRequest::ResolveWithContext { component_url, context, responder } = self {
659 Some((component_url, context, responder))
660 } else {
661 None
662 }
663 }
664
665 pub fn method_name(&self) -> &'static str {
667 match *self {
668 ResolverRequest::Resolve { .. } => "resolve",
669 ResolverRequest::ResolveWithContext { .. } => "resolve_with_context",
670 ResolverRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
671 "unknown one-way method"
672 }
673 ResolverRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
674 "unknown two-way method"
675 }
676 }
677 }
678}
679
680#[derive(Debug, Clone)]
681pub struct ResolverControlHandle {
682 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
683}
684
685impl ResolverControlHandle {
686 pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
687 self.inner.shutdown_with_epitaph(status.into())
688 }
689}
690
691impl fidl::endpoints::ControlHandle for ResolverControlHandle {
692 fn shutdown(&self) {
693 self.inner.shutdown()
694 }
695
696 fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
697 self.inner.shutdown_with_epitaph(status)
698 }
699
700 fn is_closed(&self) -> bool {
701 self.inner.channel().is_closed()
702 }
703 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
704 self.inner.channel().on_closed()
705 }
706
707 #[cfg(target_os = "fuchsia")]
708 fn signal_peer(
709 &self,
710 clear_mask: zx::Signals,
711 set_mask: zx::Signals,
712 ) -> Result<(), zx_status::Status> {
713 use fidl::Peered;
714 self.inner.channel().signal_peer(clear_mask, set_mask)
715 }
716}
717
718impl ResolverControlHandle {}
719
720#[must_use = "FIDL methods require a response to be sent"]
721#[derive(Debug)]
722pub struct ResolverResolveResponder {
723 control_handle: std::mem::ManuallyDrop<ResolverControlHandle>,
724 tx_id: u32,
725}
726
727impl std::ops::Drop for ResolverResolveResponder {
731 fn drop(&mut self) {
732 self.control_handle.shutdown();
733 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
735 }
736}
737
738impl fidl::endpoints::Responder for ResolverResolveResponder {
739 type ControlHandle = ResolverControlHandle;
740
741 fn control_handle(&self) -> &ResolverControlHandle {
742 &self.control_handle
743 }
744
745 fn drop_without_shutdown(mut self) {
746 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
748 std::mem::forget(self);
750 }
751}
752
753impl ResolverResolveResponder {
754 pub fn send(self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
758 let _result = self.send_raw(result);
759 if _result.is_err() {
760 self.control_handle.shutdown();
761 }
762 self.drop_without_shutdown();
763 _result
764 }
765
766 pub fn send_no_shutdown_on_err(
768 self,
769 mut result: Result<Component, ResolverError>,
770 ) -> Result<(), fidl::Error> {
771 let _result = self.send_raw(result);
772 self.drop_without_shutdown();
773 _result
774 }
775
776 fn send_raw(&self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
777 self.control_handle
778 .inner
779 .send::<fidl::encoding::ResultType<ResolverResolveResponse, ResolverError>>(
780 result.as_mut().map_err(|e| *e).map(|component| (component,)),
781 self.tx_id,
782 0x57f9cfe88bf1f2e5,
783 fidl::encoding::DynamicFlags::empty(),
784 )
785 }
786}
787
788#[must_use = "FIDL methods require a response to be sent"]
789#[derive(Debug)]
790pub struct ResolverResolveWithContextResponder {
791 control_handle: std::mem::ManuallyDrop<ResolverControlHandle>,
792 tx_id: u32,
793}
794
795impl std::ops::Drop for ResolverResolveWithContextResponder {
799 fn drop(&mut self) {
800 self.control_handle.shutdown();
801 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
803 }
804}
805
806impl fidl::endpoints::Responder for ResolverResolveWithContextResponder {
807 type ControlHandle = ResolverControlHandle;
808
809 fn control_handle(&self) -> &ResolverControlHandle {
810 &self.control_handle
811 }
812
813 fn drop_without_shutdown(mut self) {
814 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
816 std::mem::forget(self);
818 }
819}
820
821impl ResolverResolveWithContextResponder {
822 pub fn send(self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
826 let _result = self.send_raw(result);
827 if _result.is_err() {
828 self.control_handle.shutdown();
829 }
830 self.drop_without_shutdown();
831 _result
832 }
833
834 pub fn send_no_shutdown_on_err(
836 self,
837 mut result: Result<Component, ResolverError>,
838 ) -> Result<(), fidl::Error> {
839 let _result = self.send_raw(result);
840 self.drop_without_shutdown();
841 _result
842 }
843
844 fn send_raw(&self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
845 self.control_handle.inner.send::<fidl::encoding::ResultType<
846 ResolverResolveWithContextResponse,
847 ResolverError,
848 >>(
849 result.as_mut().map_err(|e| *e).map(|component| (component,)),
850 self.tx_id,
851 0x4d64b0de827070bd,
852 fidl::encoding::DynamicFlags::empty(),
853 )
854 }
855}
856
857mod internal {
858 use super::*;
859
860 impl fidl::encoding::ResourceTypeMarker for ResolverResolveWithContextResponse {
861 type Borrowed<'a> = &'a mut Self;
862 fn take_or_borrow<'a>(
863 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
864 ) -> Self::Borrowed<'a> {
865 value
866 }
867 }
868
869 unsafe impl fidl::encoding::TypeMarker for ResolverResolveWithContextResponse {
870 type Owned = Self;
871
872 #[inline(always)]
873 fn inline_align(_context: fidl::encoding::Context) -> usize {
874 8
875 }
876
877 #[inline(always)]
878 fn inline_size(_context: fidl::encoding::Context) -> usize {
879 16
880 }
881 }
882
883 unsafe impl
884 fidl::encoding::Encode<
885 ResolverResolveWithContextResponse,
886 fidl::encoding::DefaultFuchsiaResourceDialect,
887 > for &mut ResolverResolveWithContextResponse
888 {
889 #[inline]
890 unsafe fn encode(
891 self,
892 encoder: &mut fidl::encoding::Encoder<
893 '_,
894 fidl::encoding::DefaultFuchsiaResourceDialect,
895 >,
896 offset: usize,
897 _depth: fidl::encoding::Depth,
898 ) -> fidl::Result<()> {
899 encoder.debug_check_bounds::<ResolverResolveWithContextResponse>(offset);
900 fidl::encoding::Encode::<
902 ResolverResolveWithContextResponse,
903 fidl::encoding::DefaultFuchsiaResourceDialect,
904 >::encode(
905 (<Component as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
906 &mut self.component,
907 ),),
908 encoder,
909 offset,
910 _depth,
911 )
912 }
913 }
914 unsafe impl<
915 T0: fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>,
916 >
917 fidl::encoding::Encode<
918 ResolverResolveWithContextResponse,
919 fidl::encoding::DefaultFuchsiaResourceDialect,
920 > for (T0,)
921 {
922 #[inline]
923 unsafe fn encode(
924 self,
925 encoder: &mut fidl::encoding::Encoder<
926 '_,
927 fidl::encoding::DefaultFuchsiaResourceDialect,
928 >,
929 offset: usize,
930 depth: fidl::encoding::Depth,
931 ) -> fidl::Result<()> {
932 encoder.debug_check_bounds::<ResolverResolveWithContextResponse>(offset);
933 self.0.encode(encoder, offset + 0, depth)?;
937 Ok(())
938 }
939 }
940
941 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
942 for ResolverResolveWithContextResponse
943 {
944 #[inline(always)]
945 fn new_empty() -> Self {
946 Self {
947 component: fidl::new_empty!(
948 Component,
949 fidl::encoding::DefaultFuchsiaResourceDialect
950 ),
951 }
952 }
953
954 #[inline]
955 unsafe fn decode(
956 &mut self,
957 decoder: &mut fidl::encoding::Decoder<
958 '_,
959 fidl::encoding::DefaultFuchsiaResourceDialect,
960 >,
961 offset: usize,
962 _depth: fidl::encoding::Depth,
963 ) -> fidl::Result<()> {
964 decoder.debug_check_bounds::<Self>(offset);
965 fidl::decode!(
967 Component,
968 fidl::encoding::DefaultFuchsiaResourceDialect,
969 &mut self.component,
970 decoder,
971 offset + 0,
972 _depth
973 )?;
974 Ok(())
975 }
976 }
977
978 impl fidl::encoding::ResourceTypeMarker for ResolverResolveResponse {
979 type Borrowed<'a> = &'a mut Self;
980 fn take_or_borrow<'a>(
981 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
982 ) -> Self::Borrowed<'a> {
983 value
984 }
985 }
986
987 unsafe impl fidl::encoding::TypeMarker for ResolverResolveResponse {
988 type Owned = Self;
989
990 #[inline(always)]
991 fn inline_align(_context: fidl::encoding::Context) -> usize {
992 8
993 }
994
995 #[inline(always)]
996 fn inline_size(_context: fidl::encoding::Context) -> usize {
997 16
998 }
999 }
1000
1001 unsafe impl
1002 fidl::encoding::Encode<
1003 ResolverResolveResponse,
1004 fidl::encoding::DefaultFuchsiaResourceDialect,
1005 > for &mut ResolverResolveResponse
1006 {
1007 #[inline]
1008 unsafe fn encode(
1009 self,
1010 encoder: &mut fidl::encoding::Encoder<
1011 '_,
1012 fidl::encoding::DefaultFuchsiaResourceDialect,
1013 >,
1014 offset: usize,
1015 _depth: fidl::encoding::Depth,
1016 ) -> fidl::Result<()> {
1017 encoder.debug_check_bounds::<ResolverResolveResponse>(offset);
1018 fidl::encoding::Encode::<
1020 ResolverResolveResponse,
1021 fidl::encoding::DefaultFuchsiaResourceDialect,
1022 >::encode(
1023 (<Component as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1024 &mut self.component,
1025 ),),
1026 encoder,
1027 offset,
1028 _depth,
1029 )
1030 }
1031 }
1032 unsafe impl<
1033 T0: fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>,
1034 >
1035 fidl::encoding::Encode<
1036 ResolverResolveResponse,
1037 fidl::encoding::DefaultFuchsiaResourceDialect,
1038 > for (T0,)
1039 {
1040 #[inline]
1041 unsafe fn encode(
1042 self,
1043 encoder: &mut fidl::encoding::Encoder<
1044 '_,
1045 fidl::encoding::DefaultFuchsiaResourceDialect,
1046 >,
1047 offset: usize,
1048 depth: fidl::encoding::Depth,
1049 ) -> fidl::Result<()> {
1050 encoder.debug_check_bounds::<ResolverResolveResponse>(offset);
1051 self.0.encode(encoder, offset + 0, depth)?;
1055 Ok(())
1056 }
1057 }
1058
1059 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1060 for ResolverResolveResponse
1061 {
1062 #[inline(always)]
1063 fn new_empty() -> Self {
1064 Self {
1065 component: fidl::new_empty!(
1066 Component,
1067 fidl::encoding::DefaultFuchsiaResourceDialect
1068 ),
1069 }
1070 }
1071
1072 #[inline]
1073 unsafe fn decode(
1074 &mut self,
1075 decoder: &mut fidl::encoding::Decoder<
1076 '_,
1077 fidl::encoding::DefaultFuchsiaResourceDialect,
1078 >,
1079 offset: usize,
1080 _depth: fidl::encoding::Depth,
1081 ) -> fidl::Result<()> {
1082 decoder.debug_check_bounds::<Self>(offset);
1083 fidl::decode!(
1085 Component,
1086 fidl::encoding::DefaultFuchsiaResourceDialect,
1087 &mut self.component,
1088 decoder,
1089 offset + 0,
1090 _depth
1091 )?;
1092 Ok(())
1093 }
1094 }
1095
1096 impl Component {
1097 #[inline(always)]
1098 fn max_ordinal_present(&self) -> u64 {
1099 if let Some(_) = self.abi_revision {
1100 return 6;
1101 }
1102 if let Some(_) = self.resolution_context {
1103 return 5;
1104 }
1105 if let Some(_) = self.config_values {
1106 return 4;
1107 }
1108 if let Some(_) = self.package {
1109 return 3;
1110 }
1111 if let Some(_) = self.decl {
1112 return 2;
1113 }
1114 if let Some(_) = self.url {
1115 return 1;
1116 }
1117 0
1118 }
1119 }
1120
1121 impl fidl::encoding::ResourceTypeMarker for Component {
1122 type Borrowed<'a> = &'a mut Self;
1123 fn take_or_borrow<'a>(
1124 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1125 ) -> Self::Borrowed<'a> {
1126 value
1127 }
1128 }
1129
1130 unsafe impl fidl::encoding::TypeMarker for Component {
1131 type Owned = Self;
1132
1133 #[inline(always)]
1134 fn inline_align(_context: fidl::encoding::Context) -> usize {
1135 8
1136 }
1137
1138 #[inline(always)]
1139 fn inline_size(_context: fidl::encoding::Context) -> usize {
1140 16
1141 }
1142 }
1143
1144 unsafe impl fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>
1145 for &mut Component
1146 {
1147 unsafe fn encode(
1148 self,
1149 encoder: &mut fidl::encoding::Encoder<
1150 '_,
1151 fidl::encoding::DefaultFuchsiaResourceDialect,
1152 >,
1153 offset: usize,
1154 mut depth: fidl::encoding::Depth,
1155 ) -> fidl::Result<()> {
1156 encoder.debug_check_bounds::<Component>(offset);
1157 let max_ordinal: u64 = self.max_ordinal_present();
1159 encoder.write_num(max_ordinal, offset);
1160 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1161 if max_ordinal == 0 {
1163 return Ok(());
1164 }
1165 depth.increment()?;
1166 let envelope_size = 8;
1167 let bytes_len = max_ordinal as usize * envelope_size;
1168 #[allow(unused_variables)]
1169 let offset = encoder.out_of_line_offset(bytes_len);
1170 let mut _prev_end_offset: usize = 0;
1171 if 1 > max_ordinal {
1172 return Ok(());
1173 }
1174
1175 let cur_offset: usize = (1 - 1) * envelope_size;
1178
1179 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1181
1182 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2083>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1187 self.url.as_ref().map(<fidl::encoding::BoundedString<2083> as fidl::encoding::ValueTypeMarker>::borrow),
1188 encoder, offset + cur_offset, depth
1189 )?;
1190
1191 _prev_end_offset = cur_offset + envelope_size;
1192 if 2 > max_ordinal {
1193 return Ok(());
1194 }
1195
1196 let cur_offset: usize = (2 - 1) * envelope_size;
1199
1200 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1202
1203 fidl::encoding::encode_in_envelope_optional::<
1208 fidl_fuchsia_mem::Data,
1209 fidl::encoding::DefaultFuchsiaResourceDialect,
1210 >(
1211 self.decl.as_mut().map(
1212 <fidl_fuchsia_mem::Data as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1213 ),
1214 encoder,
1215 offset + cur_offset,
1216 depth,
1217 )?;
1218
1219 _prev_end_offset = cur_offset + envelope_size;
1220 if 3 > max_ordinal {
1221 return Ok(());
1222 }
1223
1224 let cur_offset: usize = (3 - 1) * envelope_size;
1227
1228 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1230
1231 fidl::encoding::encode_in_envelope_optional::<
1236 Package,
1237 fidl::encoding::DefaultFuchsiaResourceDialect,
1238 >(
1239 self.package
1240 .as_mut()
1241 .map(<Package as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1242 encoder,
1243 offset + cur_offset,
1244 depth,
1245 )?;
1246
1247 _prev_end_offset = cur_offset + envelope_size;
1248 if 4 > max_ordinal {
1249 return Ok(());
1250 }
1251
1252 let cur_offset: usize = (4 - 1) * envelope_size;
1255
1256 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1258
1259 fidl::encoding::encode_in_envelope_optional::<
1264 fidl_fuchsia_mem::Data,
1265 fidl::encoding::DefaultFuchsiaResourceDialect,
1266 >(
1267 self.config_values.as_mut().map(
1268 <fidl_fuchsia_mem::Data as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1269 ),
1270 encoder,
1271 offset + cur_offset,
1272 depth,
1273 )?;
1274
1275 _prev_end_offset = cur_offset + envelope_size;
1276 if 5 > max_ordinal {
1277 return Ok(());
1278 }
1279
1280 let cur_offset: usize = (5 - 1) * envelope_size;
1283
1284 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1286
1287 fidl::encoding::encode_in_envelope_optional::<
1292 Context,
1293 fidl::encoding::DefaultFuchsiaResourceDialect,
1294 >(
1295 self.resolution_context
1296 .as_ref()
1297 .map(<Context as fidl::encoding::ValueTypeMarker>::borrow),
1298 encoder,
1299 offset + cur_offset,
1300 depth,
1301 )?;
1302
1303 _prev_end_offset = cur_offset + envelope_size;
1304 if 6 > max_ordinal {
1305 return Ok(());
1306 }
1307
1308 let cur_offset: usize = (6 - 1) * envelope_size;
1311
1312 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1314
1315 fidl::encoding::encode_in_envelope_optional::<
1320 u64,
1321 fidl::encoding::DefaultFuchsiaResourceDialect,
1322 >(
1323 self.abi_revision.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1324 encoder,
1325 offset + cur_offset,
1326 depth,
1327 )?;
1328
1329 _prev_end_offset = cur_offset + envelope_size;
1330
1331 Ok(())
1332 }
1333 }
1334
1335 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Component {
1336 #[inline(always)]
1337 fn new_empty() -> Self {
1338 Self::default()
1339 }
1340
1341 unsafe fn decode(
1342 &mut self,
1343 decoder: &mut fidl::encoding::Decoder<
1344 '_,
1345 fidl::encoding::DefaultFuchsiaResourceDialect,
1346 >,
1347 offset: usize,
1348 mut depth: fidl::encoding::Depth,
1349 ) -> fidl::Result<()> {
1350 decoder.debug_check_bounds::<Self>(offset);
1351 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1352 None => return Err(fidl::Error::NotNullable),
1353 Some(len) => len,
1354 };
1355 if len == 0 {
1357 return Ok(());
1358 };
1359 depth.increment()?;
1360 let envelope_size = 8;
1361 let bytes_len = len * envelope_size;
1362 let offset = decoder.out_of_line_offset(bytes_len)?;
1363 let mut _next_ordinal_to_read = 0;
1365 let mut next_offset = offset;
1366 let end_offset = offset + bytes_len;
1367 _next_ordinal_to_read += 1;
1368 if next_offset >= end_offset {
1369 return Ok(());
1370 }
1371
1372 while _next_ordinal_to_read < 1 {
1374 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1375 _next_ordinal_to_read += 1;
1376 next_offset += envelope_size;
1377 }
1378
1379 let next_out_of_line = decoder.next_out_of_line();
1380 let handles_before = decoder.remaining_handles();
1381 if let Some((inlined, num_bytes, num_handles)) =
1382 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1383 {
1384 let member_inline_size = <fidl::encoding::BoundedString<2083> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1385 if inlined != (member_inline_size <= 4) {
1386 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1387 }
1388 let inner_offset;
1389 let mut inner_depth = depth.clone();
1390 if inlined {
1391 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1392 inner_offset = next_offset;
1393 } else {
1394 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1395 inner_depth.increment()?;
1396 }
1397 let val_ref = self.url.get_or_insert_with(|| {
1398 fidl::new_empty!(
1399 fidl::encoding::BoundedString<2083>,
1400 fidl::encoding::DefaultFuchsiaResourceDialect
1401 )
1402 });
1403 fidl::decode!(
1404 fidl::encoding::BoundedString<2083>,
1405 fidl::encoding::DefaultFuchsiaResourceDialect,
1406 val_ref,
1407 decoder,
1408 inner_offset,
1409 inner_depth
1410 )?;
1411 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1412 {
1413 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1414 }
1415 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1416 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1417 }
1418 }
1419
1420 next_offset += envelope_size;
1421 _next_ordinal_to_read += 1;
1422 if next_offset >= end_offset {
1423 return Ok(());
1424 }
1425
1426 while _next_ordinal_to_read < 2 {
1428 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1429 _next_ordinal_to_read += 1;
1430 next_offset += envelope_size;
1431 }
1432
1433 let next_out_of_line = decoder.next_out_of_line();
1434 let handles_before = decoder.remaining_handles();
1435 if let Some((inlined, num_bytes, num_handles)) =
1436 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1437 {
1438 let member_inline_size =
1439 <fidl_fuchsia_mem::Data as fidl::encoding::TypeMarker>::inline_size(
1440 decoder.context,
1441 );
1442 if inlined != (member_inline_size <= 4) {
1443 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1444 }
1445 let inner_offset;
1446 let mut inner_depth = depth.clone();
1447 if inlined {
1448 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1449 inner_offset = next_offset;
1450 } else {
1451 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1452 inner_depth.increment()?;
1453 }
1454 let val_ref = self.decl.get_or_insert_with(|| {
1455 fidl::new_empty!(
1456 fidl_fuchsia_mem::Data,
1457 fidl::encoding::DefaultFuchsiaResourceDialect
1458 )
1459 });
1460 fidl::decode!(
1461 fidl_fuchsia_mem::Data,
1462 fidl::encoding::DefaultFuchsiaResourceDialect,
1463 val_ref,
1464 decoder,
1465 inner_offset,
1466 inner_depth
1467 )?;
1468 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1469 {
1470 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1471 }
1472 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1473 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1474 }
1475 }
1476
1477 next_offset += envelope_size;
1478 _next_ordinal_to_read += 1;
1479 if next_offset >= end_offset {
1480 return Ok(());
1481 }
1482
1483 while _next_ordinal_to_read < 3 {
1485 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1486 _next_ordinal_to_read += 1;
1487 next_offset += envelope_size;
1488 }
1489
1490 let next_out_of_line = decoder.next_out_of_line();
1491 let handles_before = decoder.remaining_handles();
1492 if let Some((inlined, num_bytes, num_handles)) =
1493 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1494 {
1495 let member_inline_size =
1496 <Package as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1497 if inlined != (member_inline_size <= 4) {
1498 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1499 }
1500 let inner_offset;
1501 let mut inner_depth = depth.clone();
1502 if inlined {
1503 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1504 inner_offset = next_offset;
1505 } else {
1506 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1507 inner_depth.increment()?;
1508 }
1509 let val_ref = self.package.get_or_insert_with(|| {
1510 fidl::new_empty!(Package, fidl::encoding::DefaultFuchsiaResourceDialect)
1511 });
1512 fidl::decode!(
1513 Package,
1514 fidl::encoding::DefaultFuchsiaResourceDialect,
1515 val_ref,
1516 decoder,
1517 inner_offset,
1518 inner_depth
1519 )?;
1520 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1521 {
1522 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1523 }
1524 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1525 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1526 }
1527 }
1528
1529 next_offset += envelope_size;
1530 _next_ordinal_to_read += 1;
1531 if next_offset >= end_offset {
1532 return Ok(());
1533 }
1534
1535 while _next_ordinal_to_read < 4 {
1537 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1538 _next_ordinal_to_read += 1;
1539 next_offset += envelope_size;
1540 }
1541
1542 let next_out_of_line = decoder.next_out_of_line();
1543 let handles_before = decoder.remaining_handles();
1544 if let Some((inlined, num_bytes, num_handles)) =
1545 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1546 {
1547 let member_inline_size =
1548 <fidl_fuchsia_mem::Data as fidl::encoding::TypeMarker>::inline_size(
1549 decoder.context,
1550 );
1551 if inlined != (member_inline_size <= 4) {
1552 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1553 }
1554 let inner_offset;
1555 let mut inner_depth = depth.clone();
1556 if inlined {
1557 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1558 inner_offset = next_offset;
1559 } else {
1560 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1561 inner_depth.increment()?;
1562 }
1563 let val_ref = self.config_values.get_or_insert_with(|| {
1564 fidl::new_empty!(
1565 fidl_fuchsia_mem::Data,
1566 fidl::encoding::DefaultFuchsiaResourceDialect
1567 )
1568 });
1569 fidl::decode!(
1570 fidl_fuchsia_mem::Data,
1571 fidl::encoding::DefaultFuchsiaResourceDialect,
1572 val_ref,
1573 decoder,
1574 inner_offset,
1575 inner_depth
1576 )?;
1577 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1578 {
1579 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1580 }
1581 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1582 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1583 }
1584 }
1585
1586 next_offset += envelope_size;
1587 _next_ordinal_to_read += 1;
1588 if next_offset >= end_offset {
1589 return Ok(());
1590 }
1591
1592 while _next_ordinal_to_read < 5 {
1594 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1595 _next_ordinal_to_read += 1;
1596 next_offset += envelope_size;
1597 }
1598
1599 let next_out_of_line = decoder.next_out_of_line();
1600 let handles_before = decoder.remaining_handles();
1601 if let Some((inlined, num_bytes, num_handles)) =
1602 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1603 {
1604 let member_inline_size =
1605 <Context as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1606 if inlined != (member_inline_size <= 4) {
1607 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1608 }
1609 let inner_offset;
1610 let mut inner_depth = depth.clone();
1611 if inlined {
1612 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1613 inner_offset = next_offset;
1614 } else {
1615 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1616 inner_depth.increment()?;
1617 }
1618 let val_ref = self.resolution_context.get_or_insert_with(|| {
1619 fidl::new_empty!(Context, fidl::encoding::DefaultFuchsiaResourceDialect)
1620 });
1621 fidl::decode!(
1622 Context,
1623 fidl::encoding::DefaultFuchsiaResourceDialect,
1624 val_ref,
1625 decoder,
1626 inner_offset,
1627 inner_depth
1628 )?;
1629 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1630 {
1631 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1632 }
1633 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1634 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1635 }
1636 }
1637
1638 next_offset += envelope_size;
1639 _next_ordinal_to_read += 1;
1640 if next_offset >= end_offset {
1641 return Ok(());
1642 }
1643
1644 while _next_ordinal_to_read < 6 {
1646 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1647 _next_ordinal_to_read += 1;
1648 next_offset += envelope_size;
1649 }
1650
1651 let next_out_of_line = decoder.next_out_of_line();
1652 let handles_before = decoder.remaining_handles();
1653 if let Some((inlined, num_bytes, num_handles)) =
1654 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1655 {
1656 let member_inline_size =
1657 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1658 if inlined != (member_inline_size <= 4) {
1659 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1660 }
1661 let inner_offset;
1662 let mut inner_depth = depth.clone();
1663 if inlined {
1664 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1665 inner_offset = next_offset;
1666 } else {
1667 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1668 inner_depth.increment()?;
1669 }
1670 let val_ref = self.abi_revision.get_or_insert_with(|| {
1671 fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect)
1672 });
1673 fidl::decode!(
1674 u64,
1675 fidl::encoding::DefaultFuchsiaResourceDialect,
1676 val_ref,
1677 decoder,
1678 inner_offset,
1679 inner_depth
1680 )?;
1681 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1682 {
1683 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1684 }
1685 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1686 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1687 }
1688 }
1689
1690 next_offset += envelope_size;
1691
1692 while next_offset < end_offset {
1694 _next_ordinal_to_read += 1;
1695 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1696 next_offset += envelope_size;
1697 }
1698
1699 Ok(())
1700 }
1701 }
1702
1703 impl Package {
1704 #[inline(always)]
1705 fn max_ordinal_present(&self) -> u64 {
1706 if let Some(_) = self.directory {
1707 return 2;
1708 }
1709 if let Some(_) = self.url {
1710 return 1;
1711 }
1712 0
1713 }
1714 }
1715
1716 impl fidl::encoding::ResourceTypeMarker for Package {
1717 type Borrowed<'a> = &'a mut Self;
1718 fn take_or_borrow<'a>(
1719 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1720 ) -> Self::Borrowed<'a> {
1721 value
1722 }
1723 }
1724
1725 unsafe impl fidl::encoding::TypeMarker for Package {
1726 type Owned = Self;
1727
1728 #[inline(always)]
1729 fn inline_align(_context: fidl::encoding::Context) -> usize {
1730 8
1731 }
1732
1733 #[inline(always)]
1734 fn inline_size(_context: fidl::encoding::Context) -> usize {
1735 16
1736 }
1737 }
1738
1739 unsafe impl fidl::encoding::Encode<Package, fidl::encoding::DefaultFuchsiaResourceDialect>
1740 for &mut Package
1741 {
1742 unsafe fn encode(
1743 self,
1744 encoder: &mut fidl::encoding::Encoder<
1745 '_,
1746 fidl::encoding::DefaultFuchsiaResourceDialect,
1747 >,
1748 offset: usize,
1749 mut depth: fidl::encoding::Depth,
1750 ) -> fidl::Result<()> {
1751 encoder.debug_check_bounds::<Package>(offset);
1752 let max_ordinal: u64 = self.max_ordinal_present();
1754 encoder.write_num(max_ordinal, offset);
1755 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1756 if max_ordinal == 0 {
1758 return Ok(());
1759 }
1760 depth.increment()?;
1761 let envelope_size = 8;
1762 let bytes_len = max_ordinal as usize * envelope_size;
1763 #[allow(unused_variables)]
1764 let offset = encoder.out_of_line_offset(bytes_len);
1765 let mut _prev_end_offset: usize = 0;
1766 if 1 > max_ordinal {
1767 return Ok(());
1768 }
1769
1770 let cur_offset: usize = (1 - 1) * envelope_size;
1773
1774 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1776
1777 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2083>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1782 self.url.as_ref().map(<fidl::encoding::BoundedString<2083> as fidl::encoding::ValueTypeMarker>::borrow),
1783 encoder, offset + cur_offset, depth
1784 )?;
1785
1786 _prev_end_offset = cur_offset + envelope_size;
1787 if 2 > max_ordinal {
1788 return Ok(());
1789 }
1790
1791 let cur_offset: usize = (2 - 1) * envelope_size;
1794
1795 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1797
1798 fidl::encoding::encode_in_envelope_optional::<
1803 fidl::encoding::Endpoint<
1804 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1805 >,
1806 fidl::encoding::DefaultFuchsiaResourceDialect,
1807 >(
1808 self.directory.as_mut().map(
1809 <fidl::encoding::Endpoint<
1810 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1811 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1812 ),
1813 encoder,
1814 offset + cur_offset,
1815 depth,
1816 )?;
1817
1818 _prev_end_offset = cur_offset + envelope_size;
1819
1820 Ok(())
1821 }
1822 }
1823
1824 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Package {
1825 #[inline(always)]
1826 fn new_empty() -> Self {
1827 Self::default()
1828 }
1829
1830 unsafe fn decode(
1831 &mut self,
1832 decoder: &mut fidl::encoding::Decoder<
1833 '_,
1834 fidl::encoding::DefaultFuchsiaResourceDialect,
1835 >,
1836 offset: usize,
1837 mut depth: fidl::encoding::Depth,
1838 ) -> fidl::Result<()> {
1839 decoder.debug_check_bounds::<Self>(offset);
1840 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1841 None => return Err(fidl::Error::NotNullable),
1842 Some(len) => len,
1843 };
1844 if len == 0 {
1846 return Ok(());
1847 };
1848 depth.increment()?;
1849 let envelope_size = 8;
1850 let bytes_len = len * envelope_size;
1851 let offset = decoder.out_of_line_offset(bytes_len)?;
1852 let mut _next_ordinal_to_read = 0;
1854 let mut next_offset = offset;
1855 let end_offset = offset + bytes_len;
1856 _next_ordinal_to_read += 1;
1857 if next_offset >= end_offset {
1858 return Ok(());
1859 }
1860
1861 while _next_ordinal_to_read < 1 {
1863 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1864 _next_ordinal_to_read += 1;
1865 next_offset += envelope_size;
1866 }
1867
1868 let next_out_of_line = decoder.next_out_of_line();
1869 let handles_before = decoder.remaining_handles();
1870 if let Some((inlined, num_bytes, num_handles)) =
1871 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1872 {
1873 let member_inline_size = <fidl::encoding::BoundedString<2083> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1874 if inlined != (member_inline_size <= 4) {
1875 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1876 }
1877 let inner_offset;
1878 let mut inner_depth = depth.clone();
1879 if inlined {
1880 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1881 inner_offset = next_offset;
1882 } else {
1883 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1884 inner_depth.increment()?;
1885 }
1886 let val_ref = self.url.get_or_insert_with(|| {
1887 fidl::new_empty!(
1888 fidl::encoding::BoundedString<2083>,
1889 fidl::encoding::DefaultFuchsiaResourceDialect
1890 )
1891 });
1892 fidl::decode!(
1893 fidl::encoding::BoundedString<2083>,
1894 fidl::encoding::DefaultFuchsiaResourceDialect,
1895 val_ref,
1896 decoder,
1897 inner_offset,
1898 inner_depth
1899 )?;
1900 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1901 {
1902 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1903 }
1904 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1905 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1906 }
1907 }
1908
1909 next_offset += envelope_size;
1910 _next_ordinal_to_read += 1;
1911 if next_offset >= end_offset {
1912 return Ok(());
1913 }
1914
1915 while _next_ordinal_to_read < 2 {
1917 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1918 _next_ordinal_to_read += 1;
1919 next_offset += envelope_size;
1920 }
1921
1922 let next_out_of_line = decoder.next_out_of_line();
1923 let handles_before = decoder.remaining_handles();
1924 if let Some((inlined, num_bytes, num_handles)) =
1925 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1926 {
1927 let member_inline_size = <fidl::encoding::Endpoint<
1928 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1929 > as fidl::encoding::TypeMarker>::inline_size(
1930 decoder.context
1931 );
1932 if inlined != (member_inline_size <= 4) {
1933 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1934 }
1935 let inner_offset;
1936 let mut inner_depth = depth.clone();
1937 if inlined {
1938 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1939 inner_offset = next_offset;
1940 } else {
1941 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1942 inner_depth.increment()?;
1943 }
1944 let val_ref = self.directory.get_or_insert_with(|| {
1945 fidl::new_empty!(
1946 fidl::encoding::Endpoint<
1947 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1948 >,
1949 fidl::encoding::DefaultFuchsiaResourceDialect
1950 )
1951 });
1952 fidl::decode!(
1953 fidl::encoding::Endpoint<
1954 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1955 >,
1956 fidl::encoding::DefaultFuchsiaResourceDialect,
1957 val_ref,
1958 decoder,
1959 inner_offset,
1960 inner_depth
1961 )?;
1962 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1963 {
1964 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1965 }
1966 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1967 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1968 }
1969 }
1970
1971 next_offset += envelope_size;
1972
1973 while next_offset < end_offset {
1975 _next_ordinal_to_read += 1;
1976 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1977 next_offset += envelope_size;
1978 }
1979
1980 Ok(())
1981 }
1982 }
1983}