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::NullableHandle {
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
689 fn shutdown_with_epitaph(&self, status: zx_status::Status) {
690 self.inner.shutdown_with_epitaph(status)
691 }
692
693 fn is_closed(&self) -> bool {
694 self.inner.channel().is_closed()
695 }
696 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
697 self.inner.channel().on_closed()
698 }
699
700 #[cfg(target_os = "fuchsia")]
701 fn signal_peer(
702 &self,
703 clear_mask: zx::Signals,
704 set_mask: zx::Signals,
705 ) -> Result<(), zx_status::Status> {
706 use fidl::Peered;
707 self.inner.channel().signal_peer(clear_mask, set_mask)
708 }
709}
710
711impl ResolverControlHandle {}
712
713#[must_use = "FIDL methods require a response to be sent"]
714#[derive(Debug)]
715pub struct ResolverResolveResponder {
716 control_handle: std::mem::ManuallyDrop<ResolverControlHandle>,
717 tx_id: u32,
718}
719
720impl std::ops::Drop for ResolverResolveResponder {
724 fn drop(&mut self) {
725 self.control_handle.shutdown();
726 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
728 }
729}
730
731impl fidl::endpoints::Responder for ResolverResolveResponder {
732 type ControlHandle = ResolverControlHandle;
733
734 fn control_handle(&self) -> &ResolverControlHandle {
735 &self.control_handle
736 }
737
738 fn drop_without_shutdown(mut self) {
739 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
741 std::mem::forget(self);
743 }
744}
745
746impl ResolverResolveResponder {
747 pub fn send(self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
751 let _result = self.send_raw(result);
752 if _result.is_err() {
753 self.control_handle.shutdown();
754 }
755 self.drop_without_shutdown();
756 _result
757 }
758
759 pub fn send_no_shutdown_on_err(
761 self,
762 mut result: Result<Component, ResolverError>,
763 ) -> Result<(), fidl::Error> {
764 let _result = self.send_raw(result);
765 self.drop_without_shutdown();
766 _result
767 }
768
769 fn send_raw(&self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
770 self.control_handle
771 .inner
772 .send::<fidl::encoding::ResultType<ResolverResolveResponse, ResolverError>>(
773 result.as_mut().map_err(|e| *e).map(|component| (component,)),
774 self.tx_id,
775 0x57f9cfe88bf1f2e5,
776 fidl::encoding::DynamicFlags::empty(),
777 )
778 }
779}
780
781#[must_use = "FIDL methods require a response to be sent"]
782#[derive(Debug)]
783pub struct ResolverResolveWithContextResponder {
784 control_handle: std::mem::ManuallyDrop<ResolverControlHandle>,
785 tx_id: u32,
786}
787
788impl std::ops::Drop for ResolverResolveWithContextResponder {
792 fn drop(&mut self) {
793 self.control_handle.shutdown();
794 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
796 }
797}
798
799impl fidl::endpoints::Responder for ResolverResolveWithContextResponder {
800 type ControlHandle = ResolverControlHandle;
801
802 fn control_handle(&self) -> &ResolverControlHandle {
803 &self.control_handle
804 }
805
806 fn drop_without_shutdown(mut self) {
807 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
809 std::mem::forget(self);
811 }
812}
813
814impl ResolverResolveWithContextResponder {
815 pub fn send(self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
819 let _result = self.send_raw(result);
820 if _result.is_err() {
821 self.control_handle.shutdown();
822 }
823 self.drop_without_shutdown();
824 _result
825 }
826
827 pub fn send_no_shutdown_on_err(
829 self,
830 mut result: Result<Component, ResolverError>,
831 ) -> Result<(), fidl::Error> {
832 let _result = self.send_raw(result);
833 self.drop_without_shutdown();
834 _result
835 }
836
837 fn send_raw(&self, mut result: Result<Component, ResolverError>) -> Result<(), fidl::Error> {
838 self.control_handle.inner.send::<fidl::encoding::ResultType<
839 ResolverResolveWithContextResponse,
840 ResolverError,
841 >>(
842 result.as_mut().map_err(|e| *e).map(|component| (component,)),
843 self.tx_id,
844 0x4d64b0de827070bd,
845 fidl::encoding::DynamicFlags::empty(),
846 )
847 }
848}
849
850mod internal {
851 use super::*;
852
853 impl fidl::encoding::ResourceTypeMarker for ResolverResolveWithContextResponse {
854 type Borrowed<'a> = &'a mut Self;
855 fn take_or_borrow<'a>(
856 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
857 ) -> Self::Borrowed<'a> {
858 value
859 }
860 }
861
862 unsafe impl fidl::encoding::TypeMarker for ResolverResolveWithContextResponse {
863 type Owned = Self;
864
865 #[inline(always)]
866 fn inline_align(_context: fidl::encoding::Context) -> usize {
867 8
868 }
869
870 #[inline(always)]
871 fn inline_size(_context: fidl::encoding::Context) -> usize {
872 16
873 }
874 }
875
876 unsafe impl
877 fidl::encoding::Encode<
878 ResolverResolveWithContextResponse,
879 fidl::encoding::DefaultFuchsiaResourceDialect,
880 > for &mut ResolverResolveWithContextResponse
881 {
882 #[inline]
883 unsafe fn encode(
884 self,
885 encoder: &mut fidl::encoding::Encoder<
886 '_,
887 fidl::encoding::DefaultFuchsiaResourceDialect,
888 >,
889 offset: usize,
890 _depth: fidl::encoding::Depth,
891 ) -> fidl::Result<()> {
892 encoder.debug_check_bounds::<ResolverResolveWithContextResponse>(offset);
893 fidl::encoding::Encode::<
895 ResolverResolveWithContextResponse,
896 fidl::encoding::DefaultFuchsiaResourceDialect,
897 >::encode(
898 (<Component as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
899 &mut self.component,
900 ),),
901 encoder,
902 offset,
903 _depth,
904 )
905 }
906 }
907 unsafe impl<
908 T0: fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>,
909 >
910 fidl::encoding::Encode<
911 ResolverResolveWithContextResponse,
912 fidl::encoding::DefaultFuchsiaResourceDialect,
913 > for (T0,)
914 {
915 #[inline]
916 unsafe fn encode(
917 self,
918 encoder: &mut fidl::encoding::Encoder<
919 '_,
920 fidl::encoding::DefaultFuchsiaResourceDialect,
921 >,
922 offset: usize,
923 depth: fidl::encoding::Depth,
924 ) -> fidl::Result<()> {
925 encoder.debug_check_bounds::<ResolverResolveWithContextResponse>(offset);
926 self.0.encode(encoder, offset + 0, depth)?;
930 Ok(())
931 }
932 }
933
934 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
935 for ResolverResolveWithContextResponse
936 {
937 #[inline(always)]
938 fn new_empty() -> Self {
939 Self {
940 component: fidl::new_empty!(
941 Component,
942 fidl::encoding::DefaultFuchsiaResourceDialect
943 ),
944 }
945 }
946
947 #[inline]
948 unsafe fn decode(
949 &mut self,
950 decoder: &mut fidl::encoding::Decoder<
951 '_,
952 fidl::encoding::DefaultFuchsiaResourceDialect,
953 >,
954 offset: usize,
955 _depth: fidl::encoding::Depth,
956 ) -> fidl::Result<()> {
957 decoder.debug_check_bounds::<Self>(offset);
958 fidl::decode!(
960 Component,
961 fidl::encoding::DefaultFuchsiaResourceDialect,
962 &mut self.component,
963 decoder,
964 offset + 0,
965 _depth
966 )?;
967 Ok(())
968 }
969 }
970
971 impl fidl::encoding::ResourceTypeMarker for ResolverResolveResponse {
972 type Borrowed<'a> = &'a mut Self;
973 fn take_or_borrow<'a>(
974 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
975 ) -> Self::Borrowed<'a> {
976 value
977 }
978 }
979
980 unsafe impl fidl::encoding::TypeMarker for ResolverResolveResponse {
981 type Owned = Self;
982
983 #[inline(always)]
984 fn inline_align(_context: fidl::encoding::Context) -> usize {
985 8
986 }
987
988 #[inline(always)]
989 fn inline_size(_context: fidl::encoding::Context) -> usize {
990 16
991 }
992 }
993
994 unsafe impl
995 fidl::encoding::Encode<
996 ResolverResolveResponse,
997 fidl::encoding::DefaultFuchsiaResourceDialect,
998 > for &mut ResolverResolveResponse
999 {
1000 #[inline]
1001 unsafe fn encode(
1002 self,
1003 encoder: &mut fidl::encoding::Encoder<
1004 '_,
1005 fidl::encoding::DefaultFuchsiaResourceDialect,
1006 >,
1007 offset: usize,
1008 _depth: fidl::encoding::Depth,
1009 ) -> fidl::Result<()> {
1010 encoder.debug_check_bounds::<ResolverResolveResponse>(offset);
1011 fidl::encoding::Encode::<
1013 ResolverResolveResponse,
1014 fidl::encoding::DefaultFuchsiaResourceDialect,
1015 >::encode(
1016 (<Component as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1017 &mut self.component,
1018 ),),
1019 encoder,
1020 offset,
1021 _depth,
1022 )
1023 }
1024 }
1025 unsafe impl<
1026 T0: fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>,
1027 >
1028 fidl::encoding::Encode<
1029 ResolverResolveResponse,
1030 fidl::encoding::DefaultFuchsiaResourceDialect,
1031 > for (T0,)
1032 {
1033 #[inline]
1034 unsafe fn encode(
1035 self,
1036 encoder: &mut fidl::encoding::Encoder<
1037 '_,
1038 fidl::encoding::DefaultFuchsiaResourceDialect,
1039 >,
1040 offset: usize,
1041 depth: fidl::encoding::Depth,
1042 ) -> fidl::Result<()> {
1043 encoder.debug_check_bounds::<ResolverResolveResponse>(offset);
1044 self.0.encode(encoder, offset + 0, depth)?;
1048 Ok(())
1049 }
1050 }
1051
1052 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1053 for ResolverResolveResponse
1054 {
1055 #[inline(always)]
1056 fn new_empty() -> Self {
1057 Self {
1058 component: fidl::new_empty!(
1059 Component,
1060 fidl::encoding::DefaultFuchsiaResourceDialect
1061 ),
1062 }
1063 }
1064
1065 #[inline]
1066 unsafe fn decode(
1067 &mut self,
1068 decoder: &mut fidl::encoding::Decoder<
1069 '_,
1070 fidl::encoding::DefaultFuchsiaResourceDialect,
1071 >,
1072 offset: usize,
1073 _depth: fidl::encoding::Depth,
1074 ) -> fidl::Result<()> {
1075 decoder.debug_check_bounds::<Self>(offset);
1076 fidl::decode!(
1078 Component,
1079 fidl::encoding::DefaultFuchsiaResourceDialect,
1080 &mut self.component,
1081 decoder,
1082 offset + 0,
1083 _depth
1084 )?;
1085 Ok(())
1086 }
1087 }
1088
1089 impl Component {
1090 #[inline(always)]
1091 fn max_ordinal_present(&self) -> u64 {
1092 if let Some(_) = self.abi_revision {
1093 return 6;
1094 }
1095 if let Some(_) = self.resolution_context {
1096 return 5;
1097 }
1098 if let Some(_) = self.config_values {
1099 return 4;
1100 }
1101 if let Some(_) = self.package {
1102 return 3;
1103 }
1104 if let Some(_) = self.decl {
1105 return 2;
1106 }
1107 if let Some(_) = self.url {
1108 return 1;
1109 }
1110 0
1111 }
1112 }
1113
1114 impl fidl::encoding::ResourceTypeMarker for Component {
1115 type Borrowed<'a> = &'a mut Self;
1116 fn take_or_borrow<'a>(
1117 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1118 ) -> Self::Borrowed<'a> {
1119 value
1120 }
1121 }
1122
1123 unsafe impl fidl::encoding::TypeMarker for Component {
1124 type Owned = Self;
1125
1126 #[inline(always)]
1127 fn inline_align(_context: fidl::encoding::Context) -> usize {
1128 8
1129 }
1130
1131 #[inline(always)]
1132 fn inline_size(_context: fidl::encoding::Context) -> usize {
1133 16
1134 }
1135 }
1136
1137 unsafe impl fidl::encoding::Encode<Component, fidl::encoding::DefaultFuchsiaResourceDialect>
1138 for &mut Component
1139 {
1140 unsafe fn encode(
1141 self,
1142 encoder: &mut fidl::encoding::Encoder<
1143 '_,
1144 fidl::encoding::DefaultFuchsiaResourceDialect,
1145 >,
1146 offset: usize,
1147 mut depth: fidl::encoding::Depth,
1148 ) -> fidl::Result<()> {
1149 encoder.debug_check_bounds::<Component>(offset);
1150 let max_ordinal: u64 = self.max_ordinal_present();
1152 encoder.write_num(max_ordinal, offset);
1153 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1154 if max_ordinal == 0 {
1156 return Ok(());
1157 }
1158 depth.increment()?;
1159 let envelope_size = 8;
1160 let bytes_len = max_ordinal as usize * envelope_size;
1161 #[allow(unused_variables)]
1162 let offset = encoder.out_of_line_offset(bytes_len);
1163 let mut _prev_end_offset: usize = 0;
1164 if 1 > max_ordinal {
1165 return Ok(());
1166 }
1167
1168 let cur_offset: usize = (1 - 1) * envelope_size;
1171
1172 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1174
1175 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2083>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1180 self.url.as_ref().map(<fidl::encoding::BoundedString<2083> as fidl::encoding::ValueTypeMarker>::borrow),
1181 encoder, offset + cur_offset, depth
1182 )?;
1183
1184 _prev_end_offset = cur_offset + envelope_size;
1185 if 2 > max_ordinal {
1186 return Ok(());
1187 }
1188
1189 let cur_offset: usize = (2 - 1) * envelope_size;
1192
1193 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1195
1196 fidl::encoding::encode_in_envelope_optional::<
1201 fidl_fuchsia_mem::Data,
1202 fidl::encoding::DefaultFuchsiaResourceDialect,
1203 >(
1204 self.decl.as_mut().map(
1205 <fidl_fuchsia_mem::Data as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1206 ),
1207 encoder,
1208 offset + cur_offset,
1209 depth,
1210 )?;
1211
1212 _prev_end_offset = cur_offset + envelope_size;
1213 if 3 > max_ordinal {
1214 return Ok(());
1215 }
1216
1217 let cur_offset: usize = (3 - 1) * envelope_size;
1220
1221 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1223
1224 fidl::encoding::encode_in_envelope_optional::<
1229 Package,
1230 fidl::encoding::DefaultFuchsiaResourceDialect,
1231 >(
1232 self.package
1233 .as_mut()
1234 .map(<Package as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1235 encoder,
1236 offset + cur_offset,
1237 depth,
1238 )?;
1239
1240 _prev_end_offset = cur_offset + envelope_size;
1241 if 4 > max_ordinal {
1242 return Ok(());
1243 }
1244
1245 let cur_offset: usize = (4 - 1) * envelope_size;
1248
1249 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1251
1252 fidl::encoding::encode_in_envelope_optional::<
1257 fidl_fuchsia_mem::Data,
1258 fidl::encoding::DefaultFuchsiaResourceDialect,
1259 >(
1260 self.config_values.as_mut().map(
1261 <fidl_fuchsia_mem::Data as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1262 ),
1263 encoder,
1264 offset + cur_offset,
1265 depth,
1266 )?;
1267
1268 _prev_end_offset = cur_offset + envelope_size;
1269 if 5 > max_ordinal {
1270 return Ok(());
1271 }
1272
1273 let cur_offset: usize = (5 - 1) * envelope_size;
1276
1277 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1279
1280 fidl::encoding::encode_in_envelope_optional::<
1285 Context,
1286 fidl::encoding::DefaultFuchsiaResourceDialect,
1287 >(
1288 self.resolution_context
1289 .as_ref()
1290 .map(<Context as fidl::encoding::ValueTypeMarker>::borrow),
1291 encoder,
1292 offset + cur_offset,
1293 depth,
1294 )?;
1295
1296 _prev_end_offset = cur_offset + envelope_size;
1297 if 6 > max_ordinal {
1298 return Ok(());
1299 }
1300
1301 let cur_offset: usize = (6 - 1) * envelope_size;
1304
1305 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1307
1308 fidl::encoding::encode_in_envelope_optional::<
1313 u64,
1314 fidl::encoding::DefaultFuchsiaResourceDialect,
1315 >(
1316 self.abi_revision.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1317 encoder,
1318 offset + cur_offset,
1319 depth,
1320 )?;
1321
1322 _prev_end_offset = cur_offset + envelope_size;
1323
1324 Ok(())
1325 }
1326 }
1327
1328 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Component {
1329 #[inline(always)]
1330 fn new_empty() -> Self {
1331 Self::default()
1332 }
1333
1334 unsafe fn decode(
1335 &mut self,
1336 decoder: &mut fidl::encoding::Decoder<
1337 '_,
1338 fidl::encoding::DefaultFuchsiaResourceDialect,
1339 >,
1340 offset: usize,
1341 mut depth: fidl::encoding::Depth,
1342 ) -> fidl::Result<()> {
1343 decoder.debug_check_bounds::<Self>(offset);
1344 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1345 None => return Err(fidl::Error::NotNullable),
1346 Some(len) => len,
1347 };
1348 if len == 0 {
1350 return Ok(());
1351 };
1352 depth.increment()?;
1353 let envelope_size = 8;
1354 let bytes_len = len * envelope_size;
1355 let offset = decoder.out_of_line_offset(bytes_len)?;
1356 let mut _next_ordinal_to_read = 0;
1358 let mut next_offset = offset;
1359 let end_offset = offset + bytes_len;
1360 _next_ordinal_to_read += 1;
1361 if next_offset >= end_offset {
1362 return Ok(());
1363 }
1364
1365 while _next_ordinal_to_read < 1 {
1367 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1368 _next_ordinal_to_read += 1;
1369 next_offset += envelope_size;
1370 }
1371
1372 let next_out_of_line = decoder.next_out_of_line();
1373 let handles_before = decoder.remaining_handles();
1374 if let Some((inlined, num_bytes, num_handles)) =
1375 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1376 {
1377 let member_inline_size = <fidl::encoding::BoundedString<2083> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1378 if inlined != (member_inline_size <= 4) {
1379 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1380 }
1381 let inner_offset;
1382 let mut inner_depth = depth.clone();
1383 if inlined {
1384 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1385 inner_offset = next_offset;
1386 } else {
1387 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1388 inner_depth.increment()?;
1389 }
1390 let val_ref = self.url.get_or_insert_with(|| {
1391 fidl::new_empty!(
1392 fidl::encoding::BoundedString<2083>,
1393 fidl::encoding::DefaultFuchsiaResourceDialect
1394 )
1395 });
1396 fidl::decode!(
1397 fidl::encoding::BoundedString<2083>,
1398 fidl::encoding::DefaultFuchsiaResourceDialect,
1399 val_ref,
1400 decoder,
1401 inner_offset,
1402 inner_depth
1403 )?;
1404 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1405 {
1406 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1407 }
1408 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1409 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1410 }
1411 }
1412
1413 next_offset += envelope_size;
1414 _next_ordinal_to_read += 1;
1415 if next_offset >= end_offset {
1416 return Ok(());
1417 }
1418
1419 while _next_ordinal_to_read < 2 {
1421 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1422 _next_ordinal_to_read += 1;
1423 next_offset += envelope_size;
1424 }
1425
1426 let next_out_of_line = decoder.next_out_of_line();
1427 let handles_before = decoder.remaining_handles();
1428 if let Some((inlined, num_bytes, num_handles)) =
1429 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1430 {
1431 let member_inline_size =
1432 <fidl_fuchsia_mem::Data as fidl::encoding::TypeMarker>::inline_size(
1433 decoder.context,
1434 );
1435 if inlined != (member_inline_size <= 4) {
1436 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1437 }
1438 let inner_offset;
1439 let mut inner_depth = depth.clone();
1440 if inlined {
1441 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1442 inner_offset = next_offset;
1443 } else {
1444 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1445 inner_depth.increment()?;
1446 }
1447 let val_ref = self.decl.get_or_insert_with(|| {
1448 fidl::new_empty!(
1449 fidl_fuchsia_mem::Data,
1450 fidl::encoding::DefaultFuchsiaResourceDialect
1451 )
1452 });
1453 fidl::decode!(
1454 fidl_fuchsia_mem::Data,
1455 fidl::encoding::DefaultFuchsiaResourceDialect,
1456 val_ref,
1457 decoder,
1458 inner_offset,
1459 inner_depth
1460 )?;
1461 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1462 {
1463 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1464 }
1465 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1466 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1467 }
1468 }
1469
1470 next_offset += envelope_size;
1471 _next_ordinal_to_read += 1;
1472 if next_offset >= end_offset {
1473 return Ok(());
1474 }
1475
1476 while _next_ordinal_to_read < 3 {
1478 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1479 _next_ordinal_to_read += 1;
1480 next_offset += envelope_size;
1481 }
1482
1483 let next_out_of_line = decoder.next_out_of_line();
1484 let handles_before = decoder.remaining_handles();
1485 if let Some((inlined, num_bytes, num_handles)) =
1486 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1487 {
1488 let member_inline_size =
1489 <Package as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1490 if inlined != (member_inline_size <= 4) {
1491 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1492 }
1493 let inner_offset;
1494 let mut inner_depth = depth.clone();
1495 if inlined {
1496 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1497 inner_offset = next_offset;
1498 } else {
1499 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1500 inner_depth.increment()?;
1501 }
1502 let val_ref = self.package.get_or_insert_with(|| {
1503 fidl::new_empty!(Package, fidl::encoding::DefaultFuchsiaResourceDialect)
1504 });
1505 fidl::decode!(
1506 Package,
1507 fidl::encoding::DefaultFuchsiaResourceDialect,
1508 val_ref,
1509 decoder,
1510 inner_offset,
1511 inner_depth
1512 )?;
1513 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1514 {
1515 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1516 }
1517 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1518 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1519 }
1520 }
1521
1522 next_offset += envelope_size;
1523 _next_ordinal_to_read += 1;
1524 if next_offset >= end_offset {
1525 return Ok(());
1526 }
1527
1528 while _next_ordinal_to_read < 4 {
1530 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1531 _next_ordinal_to_read += 1;
1532 next_offset += envelope_size;
1533 }
1534
1535 let next_out_of_line = decoder.next_out_of_line();
1536 let handles_before = decoder.remaining_handles();
1537 if let Some((inlined, num_bytes, num_handles)) =
1538 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1539 {
1540 let member_inline_size =
1541 <fidl_fuchsia_mem::Data as fidl::encoding::TypeMarker>::inline_size(
1542 decoder.context,
1543 );
1544 if inlined != (member_inline_size <= 4) {
1545 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1546 }
1547 let inner_offset;
1548 let mut inner_depth = depth.clone();
1549 if inlined {
1550 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1551 inner_offset = next_offset;
1552 } else {
1553 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1554 inner_depth.increment()?;
1555 }
1556 let val_ref = self.config_values.get_or_insert_with(|| {
1557 fidl::new_empty!(
1558 fidl_fuchsia_mem::Data,
1559 fidl::encoding::DefaultFuchsiaResourceDialect
1560 )
1561 });
1562 fidl::decode!(
1563 fidl_fuchsia_mem::Data,
1564 fidl::encoding::DefaultFuchsiaResourceDialect,
1565 val_ref,
1566 decoder,
1567 inner_offset,
1568 inner_depth
1569 )?;
1570 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1571 {
1572 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1573 }
1574 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1575 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1576 }
1577 }
1578
1579 next_offset += envelope_size;
1580 _next_ordinal_to_read += 1;
1581 if next_offset >= end_offset {
1582 return Ok(());
1583 }
1584
1585 while _next_ordinal_to_read < 5 {
1587 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1588 _next_ordinal_to_read += 1;
1589 next_offset += envelope_size;
1590 }
1591
1592 let next_out_of_line = decoder.next_out_of_line();
1593 let handles_before = decoder.remaining_handles();
1594 if let Some((inlined, num_bytes, num_handles)) =
1595 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1596 {
1597 let member_inline_size =
1598 <Context as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1599 if inlined != (member_inline_size <= 4) {
1600 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1601 }
1602 let inner_offset;
1603 let mut inner_depth = depth.clone();
1604 if inlined {
1605 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1606 inner_offset = next_offset;
1607 } else {
1608 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1609 inner_depth.increment()?;
1610 }
1611 let val_ref = self.resolution_context.get_or_insert_with(|| {
1612 fidl::new_empty!(Context, fidl::encoding::DefaultFuchsiaResourceDialect)
1613 });
1614 fidl::decode!(
1615 Context,
1616 fidl::encoding::DefaultFuchsiaResourceDialect,
1617 val_ref,
1618 decoder,
1619 inner_offset,
1620 inner_depth
1621 )?;
1622 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1623 {
1624 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1625 }
1626 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1627 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1628 }
1629 }
1630
1631 next_offset += envelope_size;
1632 _next_ordinal_to_read += 1;
1633 if next_offset >= end_offset {
1634 return Ok(());
1635 }
1636
1637 while _next_ordinal_to_read < 6 {
1639 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1640 _next_ordinal_to_read += 1;
1641 next_offset += envelope_size;
1642 }
1643
1644 let next_out_of_line = decoder.next_out_of_line();
1645 let handles_before = decoder.remaining_handles();
1646 if let Some((inlined, num_bytes, num_handles)) =
1647 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1648 {
1649 let member_inline_size =
1650 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1651 if inlined != (member_inline_size <= 4) {
1652 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1653 }
1654 let inner_offset;
1655 let mut inner_depth = depth.clone();
1656 if inlined {
1657 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1658 inner_offset = next_offset;
1659 } else {
1660 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1661 inner_depth.increment()?;
1662 }
1663 let val_ref = self.abi_revision.get_or_insert_with(|| {
1664 fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect)
1665 });
1666 fidl::decode!(
1667 u64,
1668 fidl::encoding::DefaultFuchsiaResourceDialect,
1669 val_ref,
1670 decoder,
1671 inner_offset,
1672 inner_depth
1673 )?;
1674 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1675 {
1676 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1677 }
1678 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1679 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1680 }
1681 }
1682
1683 next_offset += envelope_size;
1684
1685 while next_offset < end_offset {
1687 _next_ordinal_to_read += 1;
1688 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1689 next_offset += envelope_size;
1690 }
1691
1692 Ok(())
1693 }
1694 }
1695
1696 impl Package {
1697 #[inline(always)]
1698 fn max_ordinal_present(&self) -> u64 {
1699 if let Some(_) = self.directory {
1700 return 2;
1701 }
1702 if let Some(_) = self.url {
1703 return 1;
1704 }
1705 0
1706 }
1707 }
1708
1709 impl fidl::encoding::ResourceTypeMarker for Package {
1710 type Borrowed<'a> = &'a mut Self;
1711 fn take_or_borrow<'a>(
1712 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1713 ) -> Self::Borrowed<'a> {
1714 value
1715 }
1716 }
1717
1718 unsafe impl fidl::encoding::TypeMarker for Package {
1719 type Owned = Self;
1720
1721 #[inline(always)]
1722 fn inline_align(_context: fidl::encoding::Context) -> usize {
1723 8
1724 }
1725
1726 #[inline(always)]
1727 fn inline_size(_context: fidl::encoding::Context) -> usize {
1728 16
1729 }
1730 }
1731
1732 unsafe impl fidl::encoding::Encode<Package, fidl::encoding::DefaultFuchsiaResourceDialect>
1733 for &mut Package
1734 {
1735 unsafe fn encode(
1736 self,
1737 encoder: &mut fidl::encoding::Encoder<
1738 '_,
1739 fidl::encoding::DefaultFuchsiaResourceDialect,
1740 >,
1741 offset: usize,
1742 mut depth: fidl::encoding::Depth,
1743 ) -> fidl::Result<()> {
1744 encoder.debug_check_bounds::<Package>(offset);
1745 let max_ordinal: u64 = self.max_ordinal_present();
1747 encoder.write_num(max_ordinal, offset);
1748 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1749 if max_ordinal == 0 {
1751 return Ok(());
1752 }
1753 depth.increment()?;
1754 let envelope_size = 8;
1755 let bytes_len = max_ordinal as usize * envelope_size;
1756 #[allow(unused_variables)]
1757 let offset = encoder.out_of_line_offset(bytes_len);
1758 let mut _prev_end_offset: usize = 0;
1759 if 1 > max_ordinal {
1760 return Ok(());
1761 }
1762
1763 let cur_offset: usize = (1 - 1) * envelope_size;
1766
1767 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1769
1770 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2083>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1775 self.url.as_ref().map(<fidl::encoding::BoundedString<2083> as fidl::encoding::ValueTypeMarker>::borrow),
1776 encoder, offset + cur_offset, depth
1777 )?;
1778
1779 _prev_end_offset = cur_offset + envelope_size;
1780 if 2 > max_ordinal {
1781 return Ok(());
1782 }
1783
1784 let cur_offset: usize = (2 - 1) * envelope_size;
1787
1788 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1790
1791 fidl::encoding::encode_in_envelope_optional::<
1796 fidl::encoding::Endpoint<
1797 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1798 >,
1799 fidl::encoding::DefaultFuchsiaResourceDialect,
1800 >(
1801 self.directory.as_mut().map(
1802 <fidl::encoding::Endpoint<
1803 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1804 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1805 ),
1806 encoder,
1807 offset + cur_offset,
1808 depth,
1809 )?;
1810
1811 _prev_end_offset = cur_offset + envelope_size;
1812
1813 Ok(())
1814 }
1815 }
1816
1817 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Package {
1818 #[inline(always)]
1819 fn new_empty() -> Self {
1820 Self::default()
1821 }
1822
1823 unsafe fn decode(
1824 &mut self,
1825 decoder: &mut fidl::encoding::Decoder<
1826 '_,
1827 fidl::encoding::DefaultFuchsiaResourceDialect,
1828 >,
1829 offset: usize,
1830 mut depth: fidl::encoding::Depth,
1831 ) -> fidl::Result<()> {
1832 decoder.debug_check_bounds::<Self>(offset);
1833 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1834 None => return Err(fidl::Error::NotNullable),
1835 Some(len) => len,
1836 };
1837 if len == 0 {
1839 return Ok(());
1840 };
1841 depth.increment()?;
1842 let envelope_size = 8;
1843 let bytes_len = len * envelope_size;
1844 let offset = decoder.out_of_line_offset(bytes_len)?;
1845 let mut _next_ordinal_to_read = 0;
1847 let mut next_offset = offset;
1848 let end_offset = offset + bytes_len;
1849 _next_ordinal_to_read += 1;
1850 if next_offset >= end_offset {
1851 return Ok(());
1852 }
1853
1854 while _next_ordinal_to_read < 1 {
1856 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1857 _next_ordinal_to_read += 1;
1858 next_offset += envelope_size;
1859 }
1860
1861 let next_out_of_line = decoder.next_out_of_line();
1862 let handles_before = decoder.remaining_handles();
1863 if let Some((inlined, num_bytes, num_handles)) =
1864 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1865 {
1866 let member_inline_size = <fidl::encoding::BoundedString<2083> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1867 if inlined != (member_inline_size <= 4) {
1868 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1869 }
1870 let inner_offset;
1871 let mut inner_depth = depth.clone();
1872 if inlined {
1873 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1874 inner_offset = next_offset;
1875 } else {
1876 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1877 inner_depth.increment()?;
1878 }
1879 let val_ref = self.url.get_or_insert_with(|| {
1880 fidl::new_empty!(
1881 fidl::encoding::BoundedString<2083>,
1882 fidl::encoding::DefaultFuchsiaResourceDialect
1883 )
1884 });
1885 fidl::decode!(
1886 fidl::encoding::BoundedString<2083>,
1887 fidl::encoding::DefaultFuchsiaResourceDialect,
1888 val_ref,
1889 decoder,
1890 inner_offset,
1891 inner_depth
1892 )?;
1893 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1894 {
1895 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1896 }
1897 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1898 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1899 }
1900 }
1901
1902 next_offset += envelope_size;
1903 _next_ordinal_to_read += 1;
1904 if next_offset >= end_offset {
1905 return Ok(());
1906 }
1907
1908 while _next_ordinal_to_read < 2 {
1910 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1911 _next_ordinal_to_read += 1;
1912 next_offset += envelope_size;
1913 }
1914
1915 let next_out_of_line = decoder.next_out_of_line();
1916 let handles_before = decoder.remaining_handles();
1917 if let Some((inlined, num_bytes, num_handles)) =
1918 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1919 {
1920 let member_inline_size = <fidl::encoding::Endpoint<
1921 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1922 > as fidl::encoding::TypeMarker>::inline_size(
1923 decoder.context
1924 );
1925 if inlined != (member_inline_size <= 4) {
1926 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1927 }
1928 let inner_offset;
1929 let mut inner_depth = depth.clone();
1930 if inlined {
1931 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1932 inner_offset = next_offset;
1933 } else {
1934 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1935 inner_depth.increment()?;
1936 }
1937 let val_ref = self.directory.get_or_insert_with(|| {
1938 fidl::new_empty!(
1939 fidl::encoding::Endpoint<
1940 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1941 >,
1942 fidl::encoding::DefaultFuchsiaResourceDialect
1943 )
1944 });
1945 fidl::decode!(
1946 fidl::encoding::Endpoint<
1947 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1948 >,
1949 fidl::encoding::DefaultFuchsiaResourceDialect,
1950 val_ref,
1951 decoder,
1952 inner_offset,
1953 inner_depth
1954 )?;
1955 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1956 {
1957 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1958 }
1959 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1960 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1961 }
1962 }
1963
1964 next_offset += envelope_size;
1965
1966 while next_offset < end_offset {
1968 _next_ordinal_to_read += 1;
1969 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1970 next_offset += envelope_size;
1971 }
1972
1973 Ok(())
1974 }
1975 }
1976}