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