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