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<
907 T0: fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>,
908 >
909 fidl::encoding::Encode<
910 ResolverResolveWithContextResponse,
911 fidl::encoding::DefaultFuchsiaResourceDialect,
912 > for (T0,)
913 {
914 #[inline]
915 unsafe fn encode(
916 self,
917 encoder: &mut fidl::encoding::Encoder<
918 '_,
919 fidl::encoding::DefaultFuchsiaResourceDialect,
920 >,
921 offset: usize,
922 depth: fidl::encoding::Depth,
923 ) -> fidl::Result<()> {
924 encoder.debug_check_bounds::<ResolverResolveWithContextResponse>(offset);
925 self.0.encode(encoder, offset + 0, depth)?;
929 Ok(())
930 }
931 }
932
933 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
934 for ResolverResolveWithContextResponse
935 {
936 #[inline(always)]
937 fn new_empty() -> Self {
938 Self {
939 component: fidl::new_empty!(
940 Component,
941 fidl::encoding::DefaultFuchsiaResourceDialect
942 ),
943 }
944 }
945
946 #[inline]
947 unsafe fn decode(
948 &mut self,
949 decoder: &mut fidl::encoding::Decoder<
950 '_,
951 fidl::encoding::DefaultFuchsiaResourceDialect,
952 >,
953 offset: usize,
954 _depth: fidl::encoding::Depth,
955 ) -> fidl::Result<()> {
956 decoder.debug_check_bounds::<Self>(offset);
957 fidl::decode!(
959 Component,
960 fidl::encoding::DefaultFuchsiaResourceDialect,
961 &mut self.component,
962 decoder,
963 offset + 0,
964 _depth
965 )?;
966 Ok(())
967 }
968 }
969
970 impl fidl::encoding::ResourceTypeMarker for ResolverResolveResponse {
971 type Borrowed<'a> = &'a mut Self;
972 fn take_or_borrow<'a>(
973 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
974 ) -> Self::Borrowed<'a> {
975 value
976 }
977 }
978
979 unsafe impl fidl::encoding::TypeMarker for ResolverResolveResponse {
980 type Owned = Self;
981
982 #[inline(always)]
983 fn inline_align(_context: fidl::encoding::Context) -> usize {
984 8
985 }
986
987 #[inline(always)]
988 fn inline_size(_context: fidl::encoding::Context) -> usize {
989 16
990 }
991 }
992
993 unsafe impl
994 fidl::encoding::Encode<
995 ResolverResolveResponse,
996 fidl::encoding::DefaultFuchsiaResourceDialect,
997 > for &mut ResolverResolveResponse
998 {
999 #[inline]
1000 unsafe fn encode(
1001 self,
1002 encoder: &mut fidl::encoding::Encoder<
1003 '_,
1004 fidl::encoding::DefaultFuchsiaResourceDialect,
1005 >,
1006 offset: usize,
1007 _depth: fidl::encoding::Depth,
1008 ) -> fidl::Result<()> {
1009 encoder.debug_check_bounds::<ResolverResolveResponse>(offset);
1010 fidl::encoding::Encode::<
1012 ResolverResolveResponse,
1013 fidl::encoding::DefaultFuchsiaResourceDialect,
1014 >::encode(
1015 (<Component as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1016 &mut self.component,
1017 ),),
1018 encoder,
1019 offset,
1020 _depth,
1021 )
1022 }
1023 }
1024 unsafe impl<
1025 T0: fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>,
1026 >
1027 fidl::encoding::Encode<
1028 ResolverResolveResponse,
1029 fidl::encoding::DefaultFuchsiaResourceDialect,
1030 > for (T0,)
1031 {
1032 #[inline]
1033 unsafe fn encode(
1034 self,
1035 encoder: &mut fidl::encoding::Encoder<
1036 '_,
1037 fidl::encoding::DefaultFuchsiaResourceDialect,
1038 >,
1039 offset: usize,
1040 depth: fidl::encoding::Depth,
1041 ) -> fidl::Result<()> {
1042 encoder.debug_check_bounds::<ResolverResolveResponse>(offset);
1043 self.0.encode(encoder, offset + 0, depth)?;
1047 Ok(())
1048 }
1049 }
1050
1051 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1052 for ResolverResolveResponse
1053 {
1054 #[inline(always)]
1055 fn new_empty() -> Self {
1056 Self {
1057 component: fidl::new_empty!(
1058 Component,
1059 fidl::encoding::DefaultFuchsiaResourceDialect
1060 ),
1061 }
1062 }
1063
1064 #[inline]
1065 unsafe fn decode(
1066 &mut self,
1067 decoder: &mut fidl::encoding::Decoder<
1068 '_,
1069 fidl::encoding::DefaultFuchsiaResourceDialect,
1070 >,
1071 offset: usize,
1072 _depth: fidl::encoding::Depth,
1073 ) -> fidl::Result<()> {
1074 decoder.debug_check_bounds::<Self>(offset);
1075 fidl::decode!(
1077 Component,
1078 fidl::encoding::DefaultFuchsiaResourceDialect,
1079 &mut self.component,
1080 decoder,
1081 offset + 0,
1082 _depth
1083 )?;
1084 Ok(())
1085 }
1086 }
1087
1088 impl Component {
1089 #[inline(always)]
1090 fn max_ordinal_present(&self) -> u64 {
1091 if let Some(_) = self.abi_revision {
1092 return 6;
1093 }
1094 if let Some(_) = self.resolution_context {
1095 return 5;
1096 }
1097 if let Some(_) = self.config_values {
1098 return 4;
1099 }
1100 if let Some(_) = self.package {
1101 return 3;
1102 }
1103 if let Some(_) = self.decl {
1104 return 2;
1105 }
1106 if let Some(_) = self.url {
1107 return 1;
1108 }
1109 0
1110 }
1111 }
1112
1113 impl fidl::encoding::ResourceTypeMarker for Component {
1114 type Borrowed<'a> = &'a mut Self;
1115 fn take_or_borrow<'a>(
1116 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1117 ) -> Self::Borrowed<'a> {
1118 value
1119 }
1120 }
1121
1122 unsafe impl fidl::encoding::TypeMarker for Component {
1123 type Owned = Self;
1124
1125 #[inline(always)]
1126 fn inline_align(_context: fidl::encoding::Context) -> usize {
1127 8
1128 }
1129
1130 #[inline(always)]
1131 fn inline_size(_context: fidl::encoding::Context) -> usize {
1132 16
1133 }
1134 }
1135
1136 unsafe impl fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>
1137 for &mut Component
1138 {
1139 unsafe fn encode(
1140 self,
1141 encoder: &mut fidl::encoding::Encoder<
1142 '_,
1143 fidl::encoding::DefaultFuchsiaResourceDialect,
1144 >,
1145 offset: usize,
1146 mut depth: fidl::encoding::Depth,
1147 ) -> fidl::Result<()> {
1148 encoder.debug_check_bounds::<Component>(offset);
1149 let max_ordinal: u64 = self.max_ordinal_present();
1151 encoder.write_num(max_ordinal, offset);
1152 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1153 if max_ordinal == 0 {
1155 return Ok(());
1156 }
1157 depth.increment()?;
1158 let envelope_size = 8;
1159 let bytes_len = max_ordinal as usize * envelope_size;
1160 #[allow(unused_variables)]
1161 let offset = encoder.out_of_line_offset(bytes_len);
1162 let mut _prev_end_offset: usize = 0;
1163 if 1 > max_ordinal {
1164 return Ok(());
1165 }
1166
1167 let cur_offset: usize = (1 - 1) * envelope_size;
1170
1171 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1173
1174 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2083>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1179 self.url.as_ref().map(<fidl::encoding::BoundedString<2083> as fidl::encoding::ValueTypeMarker>::borrow),
1180 encoder, offset + cur_offset, depth
1181 )?;
1182
1183 _prev_end_offset = cur_offset + envelope_size;
1184 if 2 > max_ordinal {
1185 return Ok(());
1186 }
1187
1188 let cur_offset: usize = (2 - 1) * envelope_size;
1191
1192 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1194
1195 fidl::encoding::encode_in_envelope_optional::<
1200 fidl_fuchsia_mem::Data,
1201 fidl::encoding::DefaultFuchsiaResourceDialect,
1202 >(
1203 self.decl.as_mut().map(
1204 <fidl_fuchsia_mem::Data as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1205 ),
1206 encoder,
1207 offset + cur_offset,
1208 depth,
1209 )?;
1210
1211 _prev_end_offset = cur_offset + envelope_size;
1212 if 3 > max_ordinal {
1213 return Ok(());
1214 }
1215
1216 let cur_offset: usize = (3 - 1) * envelope_size;
1219
1220 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1222
1223 fidl::encoding::encode_in_envelope_optional::<
1228 Package,
1229 fidl::encoding::DefaultFuchsiaResourceDialect,
1230 >(
1231 self.package
1232 .as_mut()
1233 .map(<Package as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1234 encoder,
1235 offset + cur_offset,
1236 depth,
1237 )?;
1238
1239 _prev_end_offset = cur_offset + envelope_size;
1240 if 4 > max_ordinal {
1241 return Ok(());
1242 }
1243
1244 let cur_offset: usize = (4 - 1) * envelope_size;
1247
1248 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1250
1251 fidl::encoding::encode_in_envelope_optional::<
1256 fidl_fuchsia_mem::Data,
1257 fidl::encoding::DefaultFuchsiaResourceDialect,
1258 >(
1259 self.config_values.as_mut().map(
1260 <fidl_fuchsia_mem::Data as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1261 ),
1262 encoder,
1263 offset + cur_offset,
1264 depth,
1265 )?;
1266
1267 _prev_end_offset = cur_offset + envelope_size;
1268 if 5 > max_ordinal {
1269 return Ok(());
1270 }
1271
1272 let cur_offset: usize = (5 - 1) * envelope_size;
1275
1276 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1278
1279 fidl::encoding::encode_in_envelope_optional::<
1284 Context,
1285 fidl::encoding::DefaultFuchsiaResourceDialect,
1286 >(
1287 self.resolution_context
1288 .as_ref()
1289 .map(<Context as fidl::encoding::ValueTypeMarker>::borrow),
1290 encoder,
1291 offset + cur_offset,
1292 depth,
1293 )?;
1294
1295 _prev_end_offset = cur_offset + envelope_size;
1296 if 6 > max_ordinal {
1297 return Ok(());
1298 }
1299
1300 let cur_offset: usize = (6 - 1) * envelope_size;
1303
1304 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1306
1307 fidl::encoding::encode_in_envelope_optional::<
1312 u64,
1313 fidl::encoding::DefaultFuchsiaResourceDialect,
1314 >(
1315 self.abi_revision.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1316 encoder,
1317 offset + cur_offset,
1318 depth,
1319 )?;
1320
1321 _prev_end_offset = cur_offset + envelope_size;
1322
1323 Ok(())
1324 }
1325 }
1326
1327 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Component {
1328 #[inline(always)]
1329 fn new_empty() -> Self {
1330 Self::default()
1331 }
1332
1333 unsafe fn decode(
1334 &mut self,
1335 decoder: &mut fidl::encoding::Decoder<
1336 '_,
1337 fidl::encoding::DefaultFuchsiaResourceDialect,
1338 >,
1339 offset: usize,
1340 mut depth: fidl::encoding::Depth,
1341 ) -> fidl::Result<()> {
1342 decoder.debug_check_bounds::<Self>(offset);
1343 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1344 None => return Err(fidl::Error::NotNullable),
1345 Some(len) => len,
1346 };
1347 if len == 0 {
1349 return Ok(());
1350 };
1351 depth.increment()?;
1352 let envelope_size = 8;
1353 let bytes_len = len * envelope_size;
1354 let offset = decoder.out_of_line_offset(bytes_len)?;
1355 let mut _next_ordinal_to_read = 0;
1357 let mut next_offset = offset;
1358 let end_offset = offset + bytes_len;
1359 _next_ordinal_to_read += 1;
1360 if next_offset >= end_offset {
1361 return Ok(());
1362 }
1363
1364 while _next_ordinal_to_read < 1 {
1366 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1367 _next_ordinal_to_read += 1;
1368 next_offset += envelope_size;
1369 }
1370
1371 let next_out_of_line = decoder.next_out_of_line();
1372 let handles_before = decoder.remaining_handles();
1373 if let Some((inlined, num_bytes, num_handles)) =
1374 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1375 {
1376 let member_inline_size = <fidl::encoding::BoundedString<2083> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1377 if inlined != (member_inline_size <= 4) {
1378 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1379 }
1380 let inner_offset;
1381 let mut inner_depth = depth.clone();
1382 if inlined {
1383 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1384 inner_offset = next_offset;
1385 } else {
1386 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1387 inner_depth.increment()?;
1388 }
1389 let val_ref = self.url.get_or_insert_with(|| {
1390 fidl::new_empty!(
1391 fidl::encoding::BoundedString<2083>,
1392 fidl::encoding::DefaultFuchsiaResourceDialect
1393 )
1394 });
1395 fidl::decode!(
1396 fidl::encoding::BoundedString<2083>,
1397 fidl::encoding::DefaultFuchsiaResourceDialect,
1398 val_ref,
1399 decoder,
1400 inner_offset,
1401 inner_depth
1402 )?;
1403 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1404 {
1405 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1406 }
1407 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1408 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1409 }
1410 }
1411
1412 next_offset += envelope_size;
1413 _next_ordinal_to_read += 1;
1414 if next_offset >= end_offset {
1415 return Ok(());
1416 }
1417
1418 while _next_ordinal_to_read < 2 {
1420 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1421 _next_ordinal_to_read += 1;
1422 next_offset += envelope_size;
1423 }
1424
1425 let next_out_of_line = decoder.next_out_of_line();
1426 let handles_before = decoder.remaining_handles();
1427 if let Some((inlined, num_bytes, num_handles)) =
1428 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1429 {
1430 let member_inline_size =
1431 <fidl_fuchsia_mem::Data as fidl::encoding::TypeMarker>::inline_size(
1432 decoder.context,
1433 );
1434 if inlined != (member_inline_size <= 4) {
1435 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1436 }
1437 let inner_offset;
1438 let mut inner_depth = depth.clone();
1439 if inlined {
1440 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1441 inner_offset = next_offset;
1442 } else {
1443 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1444 inner_depth.increment()?;
1445 }
1446 let val_ref = self.decl.get_or_insert_with(|| {
1447 fidl::new_empty!(
1448 fidl_fuchsia_mem::Data,
1449 fidl::encoding::DefaultFuchsiaResourceDialect
1450 )
1451 });
1452 fidl::decode!(
1453 fidl_fuchsia_mem::Data,
1454 fidl::encoding::DefaultFuchsiaResourceDialect,
1455 val_ref,
1456 decoder,
1457 inner_offset,
1458 inner_depth
1459 )?;
1460 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1461 {
1462 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1463 }
1464 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1465 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1466 }
1467 }
1468
1469 next_offset += envelope_size;
1470 _next_ordinal_to_read += 1;
1471 if next_offset >= end_offset {
1472 return Ok(());
1473 }
1474
1475 while _next_ordinal_to_read < 3 {
1477 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1478 _next_ordinal_to_read += 1;
1479 next_offset += envelope_size;
1480 }
1481
1482 let next_out_of_line = decoder.next_out_of_line();
1483 let handles_before = decoder.remaining_handles();
1484 if let Some((inlined, num_bytes, num_handles)) =
1485 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1486 {
1487 let member_inline_size =
1488 <Package as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1489 if inlined != (member_inline_size <= 4) {
1490 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1491 }
1492 let inner_offset;
1493 let mut inner_depth = depth.clone();
1494 if inlined {
1495 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1496 inner_offset = next_offset;
1497 } else {
1498 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1499 inner_depth.increment()?;
1500 }
1501 let val_ref = self.package.get_or_insert_with(|| {
1502 fidl::new_empty!(Package, fidl::encoding::DefaultFuchsiaResourceDialect)
1503 });
1504 fidl::decode!(
1505 Package,
1506 fidl::encoding::DefaultFuchsiaResourceDialect,
1507 val_ref,
1508 decoder,
1509 inner_offset,
1510 inner_depth
1511 )?;
1512 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1513 {
1514 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1515 }
1516 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1517 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1518 }
1519 }
1520
1521 next_offset += envelope_size;
1522 _next_ordinal_to_read += 1;
1523 if next_offset >= end_offset {
1524 return Ok(());
1525 }
1526
1527 while _next_ordinal_to_read < 4 {
1529 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1530 _next_ordinal_to_read += 1;
1531 next_offset += envelope_size;
1532 }
1533
1534 let next_out_of_line = decoder.next_out_of_line();
1535 let handles_before = decoder.remaining_handles();
1536 if let Some((inlined, num_bytes, num_handles)) =
1537 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1538 {
1539 let member_inline_size =
1540 <fidl_fuchsia_mem::Data as fidl::encoding::TypeMarker>::inline_size(
1541 decoder.context,
1542 );
1543 if inlined != (member_inline_size <= 4) {
1544 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1545 }
1546 let inner_offset;
1547 let mut inner_depth = depth.clone();
1548 if inlined {
1549 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1550 inner_offset = next_offset;
1551 } else {
1552 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1553 inner_depth.increment()?;
1554 }
1555 let val_ref = self.config_values.get_or_insert_with(|| {
1556 fidl::new_empty!(
1557 fidl_fuchsia_mem::Data,
1558 fidl::encoding::DefaultFuchsiaResourceDialect
1559 )
1560 });
1561 fidl::decode!(
1562 fidl_fuchsia_mem::Data,
1563 fidl::encoding::DefaultFuchsiaResourceDialect,
1564 val_ref,
1565 decoder,
1566 inner_offset,
1567 inner_depth
1568 )?;
1569 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1570 {
1571 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1572 }
1573 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1574 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1575 }
1576 }
1577
1578 next_offset += envelope_size;
1579 _next_ordinal_to_read += 1;
1580 if next_offset >= end_offset {
1581 return Ok(());
1582 }
1583
1584 while _next_ordinal_to_read < 5 {
1586 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1587 _next_ordinal_to_read += 1;
1588 next_offset += envelope_size;
1589 }
1590
1591 let next_out_of_line = decoder.next_out_of_line();
1592 let handles_before = decoder.remaining_handles();
1593 if let Some((inlined, num_bytes, num_handles)) =
1594 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1595 {
1596 let member_inline_size =
1597 <Context as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1598 if inlined != (member_inline_size <= 4) {
1599 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1600 }
1601 let inner_offset;
1602 let mut inner_depth = depth.clone();
1603 if inlined {
1604 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1605 inner_offset = next_offset;
1606 } else {
1607 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1608 inner_depth.increment()?;
1609 }
1610 let val_ref = self.resolution_context.get_or_insert_with(|| {
1611 fidl::new_empty!(Context, fidl::encoding::DefaultFuchsiaResourceDialect)
1612 });
1613 fidl::decode!(
1614 Context,
1615 fidl::encoding::DefaultFuchsiaResourceDialect,
1616 val_ref,
1617 decoder,
1618 inner_offset,
1619 inner_depth
1620 )?;
1621 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1622 {
1623 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1624 }
1625 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1626 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1627 }
1628 }
1629
1630 next_offset += envelope_size;
1631 _next_ordinal_to_read += 1;
1632 if next_offset >= end_offset {
1633 return Ok(());
1634 }
1635
1636 while _next_ordinal_to_read < 6 {
1638 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1639 _next_ordinal_to_read += 1;
1640 next_offset += envelope_size;
1641 }
1642
1643 let next_out_of_line = decoder.next_out_of_line();
1644 let handles_before = decoder.remaining_handles();
1645 if let Some((inlined, num_bytes, num_handles)) =
1646 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1647 {
1648 let member_inline_size =
1649 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1650 if inlined != (member_inline_size <= 4) {
1651 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1652 }
1653 let inner_offset;
1654 let mut inner_depth = depth.clone();
1655 if inlined {
1656 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1657 inner_offset = next_offset;
1658 } else {
1659 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1660 inner_depth.increment()?;
1661 }
1662 let val_ref = self.abi_revision.get_or_insert_with(|| {
1663 fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect)
1664 });
1665 fidl::decode!(
1666 u64,
1667 fidl::encoding::DefaultFuchsiaResourceDialect,
1668 val_ref,
1669 decoder,
1670 inner_offset,
1671 inner_depth
1672 )?;
1673 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1674 {
1675 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1676 }
1677 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1678 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1679 }
1680 }
1681
1682 next_offset += envelope_size;
1683
1684 while next_offset < end_offset {
1686 _next_ordinal_to_read += 1;
1687 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1688 next_offset += envelope_size;
1689 }
1690
1691 Ok(())
1692 }
1693 }
1694
1695 impl Package {
1696 #[inline(always)]
1697 fn max_ordinal_present(&self) -> u64 {
1698 if let Some(_) = self.directory {
1699 return 2;
1700 }
1701 if let Some(_) = self.url {
1702 return 1;
1703 }
1704 0
1705 }
1706 }
1707
1708 impl fidl::encoding::ResourceTypeMarker for Package {
1709 type Borrowed<'a> = &'a mut Self;
1710 fn take_or_borrow<'a>(
1711 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1712 ) -> Self::Borrowed<'a> {
1713 value
1714 }
1715 }
1716
1717 unsafe impl fidl::encoding::TypeMarker for Package {
1718 type Owned = Self;
1719
1720 #[inline(always)]
1721 fn inline_align(_context: fidl::encoding::Context) -> usize {
1722 8
1723 }
1724
1725 #[inline(always)]
1726 fn inline_size(_context: fidl::encoding::Context) -> usize {
1727 16
1728 }
1729 }
1730
1731 unsafe impl fidl::encoding::Encode<Package, fidl::encoding::DefaultFuchsiaResourceDialect>
1732 for &mut Package
1733 {
1734 unsafe fn encode(
1735 self,
1736 encoder: &mut fidl::encoding::Encoder<
1737 '_,
1738 fidl::encoding::DefaultFuchsiaResourceDialect,
1739 >,
1740 offset: usize,
1741 mut depth: fidl::encoding::Depth,
1742 ) -> fidl::Result<()> {
1743 encoder.debug_check_bounds::<Package>(offset);
1744 let max_ordinal: u64 = self.max_ordinal_present();
1746 encoder.write_num(max_ordinal, offset);
1747 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1748 if max_ordinal == 0 {
1750 return Ok(());
1751 }
1752 depth.increment()?;
1753 let envelope_size = 8;
1754 let bytes_len = max_ordinal as usize * envelope_size;
1755 #[allow(unused_variables)]
1756 let offset = encoder.out_of_line_offset(bytes_len);
1757 let mut _prev_end_offset: usize = 0;
1758 if 1 > max_ordinal {
1759 return Ok(());
1760 }
1761
1762 let cur_offset: usize = (1 - 1) * envelope_size;
1765
1766 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1768
1769 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2083>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1774 self.url.as_ref().map(<fidl::encoding::BoundedString<2083> as fidl::encoding::ValueTypeMarker>::borrow),
1775 encoder, offset + cur_offset, depth
1776 )?;
1777
1778 _prev_end_offset = cur_offset + envelope_size;
1779 if 2 > max_ordinal {
1780 return Ok(());
1781 }
1782
1783 let cur_offset: usize = (2 - 1) * envelope_size;
1786
1787 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1789
1790 fidl::encoding::encode_in_envelope_optional::<
1795 fidl::encoding::Endpoint<
1796 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1797 >,
1798 fidl::encoding::DefaultFuchsiaResourceDialect,
1799 >(
1800 self.directory.as_mut().map(
1801 <fidl::encoding::Endpoint<
1802 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1803 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1804 ),
1805 encoder,
1806 offset + cur_offset,
1807 depth,
1808 )?;
1809
1810 _prev_end_offset = cur_offset + envelope_size;
1811
1812 Ok(())
1813 }
1814 }
1815
1816 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Package {
1817 #[inline(always)]
1818 fn new_empty() -> Self {
1819 Self::default()
1820 }
1821
1822 unsafe fn decode(
1823 &mut self,
1824 decoder: &mut fidl::encoding::Decoder<
1825 '_,
1826 fidl::encoding::DefaultFuchsiaResourceDialect,
1827 >,
1828 offset: usize,
1829 mut depth: fidl::encoding::Depth,
1830 ) -> fidl::Result<()> {
1831 decoder.debug_check_bounds::<Self>(offset);
1832 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1833 None => return Err(fidl::Error::NotNullable),
1834 Some(len) => len,
1835 };
1836 if len == 0 {
1838 return Ok(());
1839 };
1840 depth.increment()?;
1841 let envelope_size = 8;
1842 let bytes_len = len * envelope_size;
1843 let offset = decoder.out_of_line_offset(bytes_len)?;
1844 let mut _next_ordinal_to_read = 0;
1846 let mut next_offset = offset;
1847 let end_offset = offset + bytes_len;
1848 _next_ordinal_to_read += 1;
1849 if next_offset >= end_offset {
1850 return Ok(());
1851 }
1852
1853 while _next_ordinal_to_read < 1 {
1855 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1856 _next_ordinal_to_read += 1;
1857 next_offset += envelope_size;
1858 }
1859
1860 let next_out_of_line = decoder.next_out_of_line();
1861 let handles_before = decoder.remaining_handles();
1862 if let Some((inlined, num_bytes, num_handles)) =
1863 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1864 {
1865 let member_inline_size = <fidl::encoding::BoundedString<2083> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1866 if inlined != (member_inline_size <= 4) {
1867 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1868 }
1869 let inner_offset;
1870 let mut inner_depth = depth.clone();
1871 if inlined {
1872 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1873 inner_offset = next_offset;
1874 } else {
1875 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1876 inner_depth.increment()?;
1877 }
1878 let val_ref = self.url.get_or_insert_with(|| {
1879 fidl::new_empty!(
1880 fidl::encoding::BoundedString<2083>,
1881 fidl::encoding::DefaultFuchsiaResourceDialect
1882 )
1883 });
1884 fidl::decode!(
1885 fidl::encoding::BoundedString<2083>,
1886 fidl::encoding::DefaultFuchsiaResourceDialect,
1887 val_ref,
1888 decoder,
1889 inner_offset,
1890 inner_depth
1891 )?;
1892 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1893 {
1894 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1895 }
1896 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1897 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1898 }
1899 }
1900
1901 next_offset += envelope_size;
1902 _next_ordinal_to_read += 1;
1903 if next_offset >= end_offset {
1904 return Ok(());
1905 }
1906
1907 while _next_ordinal_to_read < 2 {
1909 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1910 _next_ordinal_to_read += 1;
1911 next_offset += envelope_size;
1912 }
1913
1914 let next_out_of_line = decoder.next_out_of_line();
1915 let handles_before = decoder.remaining_handles();
1916 if let Some((inlined, num_bytes, num_handles)) =
1917 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1918 {
1919 let member_inline_size = <fidl::encoding::Endpoint<
1920 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1921 > as fidl::encoding::TypeMarker>::inline_size(
1922 decoder.context
1923 );
1924 if inlined != (member_inline_size <= 4) {
1925 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1926 }
1927 let inner_offset;
1928 let mut inner_depth = depth.clone();
1929 if inlined {
1930 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1931 inner_offset = next_offset;
1932 } else {
1933 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1934 inner_depth.increment()?;
1935 }
1936 let val_ref = self.directory.get_or_insert_with(|| {
1937 fidl::new_empty!(
1938 fidl::encoding::Endpoint<
1939 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1940 >,
1941 fidl::encoding::DefaultFuchsiaResourceDialect
1942 )
1943 });
1944 fidl::decode!(
1945 fidl::encoding::Endpoint<
1946 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1947 >,
1948 fidl::encoding::DefaultFuchsiaResourceDialect,
1949 val_ref,
1950 decoder,
1951 inner_offset,
1952 inner_depth
1953 )?;
1954 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1955 {
1956 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1957 }
1958 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1959 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1960 }
1961 }
1962
1963 next_offset += envelope_size;
1964
1965 while next_offset < end_offset {
1967 _next_ordinal_to_read += 1;
1968 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1969 next_offset += envelope_size;
1970 }
1971
1972 Ok(())
1973 }
1974 }
1975}