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_driver_loader_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Default, PartialEq)]
15pub struct DriverHostLauncherLaunchRequest {
16 pub process: Option<fidl::Process>,
19 pub root_vmar: Option<fidl::Vmar>,
21 pub driver_host_binary: Option<fidl::Vmo>,
23 pub vdso: Option<fidl::Vmo>,
25 pub driver_host_libs: Option<fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>>,
27 pub driver_host: Option<fidl::endpoints::ServerEnd<DriverHostMarker>>,
29 #[doc(hidden)]
30 pub __source_breaking: fidl::marker::SourceBreaking,
31}
32
33impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
34 for DriverHostLauncherLaunchRequest
35{
36}
37
38#[derive(Debug, Default, PartialEq)]
39pub struct DriverHostLoadDriverRequest {
40 pub driver_soname: Option<String>,
42 pub driver_binary: Option<fidl::Vmo>,
44 pub driver_libs: Option<fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>>,
46 pub additional_root_modules: Option<Vec<RootModule>>,
49 #[doc(hidden)]
50 pub __source_breaking: fidl::marker::SourceBreaking,
51}
52
53impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
54 for DriverHostLoadDriverRequest
55{
56}
57
58#[derive(Debug, Default, PartialEq)]
60pub struct RootModule {
61 pub name: Option<String>,
63 pub binary: Option<fidl::Vmo>,
65 #[doc(hidden)]
66 pub __source_breaking: fidl::marker::SourceBreaking,
67}
68
69impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for RootModule {}
70
71#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
72pub struct DriverHostMarker;
73
74impl fidl::endpoints::ProtocolMarker for DriverHostMarker {
75 type Proxy = DriverHostProxy;
76 type RequestStream = DriverHostRequestStream;
77 #[cfg(target_os = "fuchsia")]
78 type SynchronousProxy = DriverHostSynchronousProxy;
79
80 const DEBUG_NAME: &'static str = "fuchsia.driver.loader.DriverHost";
81}
82impl fidl::endpoints::DiscoverableProtocolMarker for DriverHostMarker {}
83pub type DriverHostLoadDriverResult = Result<DriverHostLoadDriverResponse, i32>;
84
85pub trait DriverHostProxyInterface: Send + Sync {
86 type LoadDriverResponseFut: std::future::Future<Output = Result<DriverHostLoadDriverResult, fidl::Error>>
87 + Send;
88 fn r#load_driver(&self, payload: DriverHostLoadDriverRequest) -> Self::LoadDriverResponseFut;
89}
90#[derive(Debug)]
91#[cfg(target_os = "fuchsia")]
92pub struct DriverHostSynchronousProxy {
93 client: fidl::client::sync::Client,
94}
95
96#[cfg(target_os = "fuchsia")]
97impl fidl::endpoints::SynchronousProxy for DriverHostSynchronousProxy {
98 type Proxy = DriverHostProxy;
99 type Protocol = DriverHostMarker;
100
101 fn from_channel(inner: fidl::Channel) -> Self {
102 Self::new(inner)
103 }
104
105 fn into_channel(self) -> fidl::Channel {
106 self.client.into_channel()
107 }
108
109 fn as_channel(&self) -> &fidl::Channel {
110 self.client.as_channel()
111 }
112}
113
114#[cfg(target_os = "fuchsia")]
115impl DriverHostSynchronousProxy {
116 pub fn new(channel: fidl::Channel) -> Self {
117 let protocol_name = <DriverHostMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
118 Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
119 }
120
121 pub fn into_channel(self) -> fidl::Channel {
122 self.client.into_channel()
123 }
124
125 pub fn wait_for_event(
128 &self,
129 deadline: zx::MonotonicInstant,
130 ) -> Result<DriverHostEvent, fidl::Error> {
131 DriverHostEvent::decode(self.client.wait_for_event(deadline)?)
132 }
133
134 pub fn r#load_driver(
136 &self,
137 mut payload: DriverHostLoadDriverRequest,
138 ___deadline: zx::MonotonicInstant,
139 ) -> Result<DriverHostLoadDriverResult, fidl::Error> {
140 let _response = self.client.send_query::<
141 DriverHostLoadDriverRequest,
142 fidl::encoding::FlexibleResultType<DriverHostLoadDriverResponse, i32>,
143 >(
144 &mut payload,
145 0x5c43a774b3fd4930,
146 fidl::encoding::DynamicFlags::FLEXIBLE,
147 ___deadline,
148 )?
149 .into_result::<DriverHostMarker>("load_driver")?;
150 Ok(_response.map(|x| x))
151 }
152}
153
154#[derive(Debug, Clone)]
155pub struct DriverHostProxy {
156 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
157}
158
159impl fidl::endpoints::Proxy for DriverHostProxy {
160 type Protocol = DriverHostMarker;
161
162 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
163 Self::new(inner)
164 }
165
166 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
167 self.client.into_channel().map_err(|client| Self { client })
168 }
169
170 fn as_channel(&self) -> &::fidl::AsyncChannel {
171 self.client.as_channel()
172 }
173}
174
175impl DriverHostProxy {
176 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
178 let protocol_name = <DriverHostMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
179 Self { client: fidl::client::Client::new(channel, protocol_name) }
180 }
181
182 pub fn take_event_stream(&self) -> DriverHostEventStream {
188 DriverHostEventStream { event_receiver: self.client.take_event_receiver() }
189 }
190
191 pub fn r#load_driver(
193 &self,
194 mut payload: DriverHostLoadDriverRequest,
195 ) -> fidl::client::QueryResponseFut<
196 DriverHostLoadDriverResult,
197 fidl::encoding::DefaultFuchsiaResourceDialect,
198 > {
199 DriverHostProxyInterface::r#load_driver(self, payload)
200 }
201}
202
203impl DriverHostProxyInterface for DriverHostProxy {
204 type LoadDriverResponseFut = fidl::client::QueryResponseFut<
205 DriverHostLoadDriverResult,
206 fidl::encoding::DefaultFuchsiaResourceDialect,
207 >;
208 fn r#load_driver(
209 &self,
210 mut payload: DriverHostLoadDriverRequest,
211 ) -> Self::LoadDriverResponseFut {
212 fn _decode(
213 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
214 ) -> Result<DriverHostLoadDriverResult, fidl::Error> {
215 let _response = fidl::client::decode_transaction_body::<
216 fidl::encoding::FlexibleResultType<DriverHostLoadDriverResponse, i32>,
217 fidl::encoding::DefaultFuchsiaResourceDialect,
218 0x5c43a774b3fd4930,
219 >(_buf?)?
220 .into_result::<DriverHostMarker>("load_driver")?;
221 Ok(_response.map(|x| x))
222 }
223 self.client
224 .send_query_and_decode::<DriverHostLoadDriverRequest, DriverHostLoadDriverResult>(
225 &mut payload,
226 0x5c43a774b3fd4930,
227 fidl::encoding::DynamicFlags::FLEXIBLE,
228 _decode,
229 )
230 }
231}
232
233pub struct DriverHostEventStream {
234 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
235}
236
237impl std::marker::Unpin for DriverHostEventStream {}
238
239impl futures::stream::FusedStream for DriverHostEventStream {
240 fn is_terminated(&self) -> bool {
241 self.event_receiver.is_terminated()
242 }
243}
244
245impl futures::Stream for DriverHostEventStream {
246 type Item = Result<DriverHostEvent, fidl::Error>;
247
248 fn poll_next(
249 mut self: std::pin::Pin<&mut Self>,
250 cx: &mut std::task::Context<'_>,
251 ) -> std::task::Poll<Option<Self::Item>> {
252 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
253 &mut self.event_receiver,
254 cx
255 )?) {
256 Some(buf) => std::task::Poll::Ready(Some(DriverHostEvent::decode(buf))),
257 None => std::task::Poll::Ready(None),
258 }
259 }
260}
261
262#[derive(Debug)]
263pub enum DriverHostEvent {
264 #[non_exhaustive]
265 _UnknownEvent {
266 ordinal: u64,
268 },
269}
270
271impl DriverHostEvent {
272 fn decode(
274 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
275 ) -> Result<DriverHostEvent, fidl::Error> {
276 let (bytes, _handles) = buf.split_mut();
277 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
278 debug_assert_eq!(tx_header.tx_id, 0);
279 match tx_header.ordinal {
280 _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
281 Ok(DriverHostEvent::_UnknownEvent { ordinal: tx_header.ordinal })
282 }
283 _ => Err(fidl::Error::UnknownOrdinal {
284 ordinal: tx_header.ordinal,
285 protocol_name: <DriverHostMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
286 }),
287 }
288 }
289}
290
291pub struct DriverHostRequestStream {
293 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
294 is_terminated: bool,
295}
296
297impl std::marker::Unpin for DriverHostRequestStream {}
298
299impl futures::stream::FusedStream for DriverHostRequestStream {
300 fn is_terminated(&self) -> bool {
301 self.is_terminated
302 }
303}
304
305impl fidl::endpoints::RequestStream for DriverHostRequestStream {
306 type Protocol = DriverHostMarker;
307 type ControlHandle = DriverHostControlHandle;
308
309 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
310 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
311 }
312
313 fn control_handle(&self) -> Self::ControlHandle {
314 DriverHostControlHandle { inner: self.inner.clone() }
315 }
316
317 fn into_inner(
318 self,
319 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
320 {
321 (self.inner, self.is_terminated)
322 }
323
324 fn from_inner(
325 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
326 is_terminated: bool,
327 ) -> Self {
328 Self { inner, is_terminated }
329 }
330}
331
332impl futures::Stream for DriverHostRequestStream {
333 type Item = Result<DriverHostRequest, fidl::Error>;
334
335 fn poll_next(
336 mut self: std::pin::Pin<&mut Self>,
337 cx: &mut std::task::Context<'_>,
338 ) -> std::task::Poll<Option<Self::Item>> {
339 let this = &mut *self;
340 if this.inner.check_shutdown(cx) {
341 this.is_terminated = true;
342 return std::task::Poll::Ready(None);
343 }
344 if this.is_terminated {
345 panic!("polled DriverHostRequestStream after completion");
346 }
347 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
348 |bytes, handles| {
349 match this.inner.channel().read_etc(cx, bytes, handles) {
350 std::task::Poll::Ready(Ok(())) => {}
351 std::task::Poll::Pending => return std::task::Poll::Pending,
352 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
353 this.is_terminated = true;
354 return std::task::Poll::Ready(None);
355 }
356 std::task::Poll::Ready(Err(e)) => {
357 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
358 e.into(),
359 ))))
360 }
361 }
362
363 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
365
366 std::task::Poll::Ready(Some(match header.ordinal {
367 0x5c43a774b3fd4930 => {
368 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
369 let mut req = fidl::new_empty!(
370 DriverHostLoadDriverRequest,
371 fidl::encoding::DefaultFuchsiaResourceDialect
372 );
373 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DriverHostLoadDriverRequest>(&header, _body_bytes, handles, &mut req)?;
374 let control_handle = DriverHostControlHandle { inner: this.inner.clone() };
375 Ok(DriverHostRequest::LoadDriver {
376 payload: req,
377 responder: DriverHostLoadDriverResponder {
378 control_handle: std::mem::ManuallyDrop::new(control_handle),
379 tx_id: header.tx_id,
380 },
381 })
382 }
383 _ if header.tx_id == 0
384 && header
385 .dynamic_flags()
386 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
387 {
388 Ok(DriverHostRequest::_UnknownMethod {
389 ordinal: header.ordinal,
390 control_handle: DriverHostControlHandle { inner: this.inner.clone() },
391 method_type: fidl::MethodType::OneWay,
392 })
393 }
394 _ if header
395 .dynamic_flags()
396 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
397 {
398 this.inner.send_framework_err(
399 fidl::encoding::FrameworkErr::UnknownMethod,
400 header.tx_id,
401 header.ordinal,
402 header.dynamic_flags(),
403 (bytes, handles),
404 )?;
405 Ok(DriverHostRequest::_UnknownMethod {
406 ordinal: header.ordinal,
407 control_handle: DriverHostControlHandle { inner: this.inner.clone() },
408 method_type: fidl::MethodType::TwoWay,
409 })
410 }
411 _ => Err(fidl::Error::UnknownOrdinal {
412 ordinal: header.ordinal,
413 protocol_name:
414 <DriverHostMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
415 }),
416 }))
417 },
418 )
419 }
420}
421
422#[derive(Debug)]
425pub enum DriverHostRequest {
426 LoadDriver { payload: DriverHostLoadDriverRequest, responder: DriverHostLoadDriverResponder },
428 #[non_exhaustive]
430 _UnknownMethod {
431 ordinal: u64,
433 control_handle: DriverHostControlHandle,
434 method_type: fidl::MethodType,
435 },
436}
437
438impl DriverHostRequest {
439 #[allow(irrefutable_let_patterns)]
440 pub fn into_load_driver(
441 self,
442 ) -> Option<(DriverHostLoadDriverRequest, DriverHostLoadDriverResponder)> {
443 if let DriverHostRequest::LoadDriver { payload, responder } = self {
444 Some((payload, responder))
445 } else {
446 None
447 }
448 }
449
450 pub fn method_name(&self) -> &'static str {
452 match *self {
453 DriverHostRequest::LoadDriver { .. } => "load_driver",
454 DriverHostRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
455 "unknown one-way method"
456 }
457 DriverHostRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
458 "unknown two-way method"
459 }
460 }
461 }
462}
463
464#[derive(Debug, Clone)]
465pub struct DriverHostControlHandle {
466 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
467}
468
469impl fidl::endpoints::ControlHandle for DriverHostControlHandle {
470 fn shutdown(&self) {
471 self.inner.shutdown()
472 }
473 fn shutdown_with_epitaph(&self, status: zx_status::Status) {
474 self.inner.shutdown_with_epitaph(status)
475 }
476
477 fn is_closed(&self) -> bool {
478 self.inner.channel().is_closed()
479 }
480 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
481 self.inner.channel().on_closed()
482 }
483
484 #[cfg(target_os = "fuchsia")]
485 fn signal_peer(
486 &self,
487 clear_mask: zx::Signals,
488 set_mask: zx::Signals,
489 ) -> Result<(), zx_status::Status> {
490 use fidl::Peered;
491 self.inner.channel().signal_peer(clear_mask, set_mask)
492 }
493}
494
495impl DriverHostControlHandle {}
496
497#[must_use = "FIDL methods require a response to be sent"]
498#[derive(Debug)]
499pub struct DriverHostLoadDriverResponder {
500 control_handle: std::mem::ManuallyDrop<DriverHostControlHandle>,
501 tx_id: u32,
502}
503
504impl std::ops::Drop for DriverHostLoadDriverResponder {
508 fn drop(&mut self) {
509 self.control_handle.shutdown();
510 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
512 }
513}
514
515impl fidl::endpoints::Responder for DriverHostLoadDriverResponder {
516 type ControlHandle = DriverHostControlHandle;
517
518 fn control_handle(&self) -> &DriverHostControlHandle {
519 &self.control_handle
520 }
521
522 fn drop_without_shutdown(mut self) {
523 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
525 std::mem::forget(self);
527 }
528}
529
530impl DriverHostLoadDriverResponder {
531 pub fn send(
535 self,
536 mut result: Result<&DriverHostLoadDriverResponse, i32>,
537 ) -> Result<(), fidl::Error> {
538 let _result = self.send_raw(result);
539 if _result.is_err() {
540 self.control_handle.shutdown();
541 }
542 self.drop_without_shutdown();
543 _result
544 }
545
546 pub fn send_no_shutdown_on_err(
548 self,
549 mut result: Result<&DriverHostLoadDriverResponse, i32>,
550 ) -> Result<(), fidl::Error> {
551 let _result = self.send_raw(result);
552 self.drop_without_shutdown();
553 _result
554 }
555
556 fn send_raw(
557 &self,
558 mut result: Result<&DriverHostLoadDriverResponse, i32>,
559 ) -> Result<(), fidl::Error> {
560 self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
561 DriverHostLoadDriverResponse,
562 i32,
563 >>(
564 fidl::encoding::FlexibleResult::new(result),
565 self.tx_id,
566 0x5c43a774b3fd4930,
567 fidl::encoding::DynamicFlags::FLEXIBLE,
568 )
569 }
570}
571
572#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
573pub struct DriverHostLauncherMarker;
574
575impl fidl::endpoints::ProtocolMarker for DriverHostLauncherMarker {
576 type Proxy = DriverHostLauncherProxy;
577 type RequestStream = DriverHostLauncherRequestStream;
578 #[cfg(target_os = "fuchsia")]
579 type SynchronousProxy = DriverHostLauncherSynchronousProxy;
580
581 const DEBUG_NAME: &'static str = "fuchsia.driver.loader.DriverHostLauncher";
582}
583impl fidl::endpoints::DiscoverableProtocolMarker for DriverHostLauncherMarker {}
584pub type DriverHostLauncherLaunchResult = Result<(), i32>;
585
586pub trait DriverHostLauncherProxyInterface: Send + Sync {
587 type LaunchResponseFut: std::future::Future<Output = Result<DriverHostLauncherLaunchResult, fidl::Error>>
588 + Send;
589 fn r#launch(&self, payload: DriverHostLauncherLaunchRequest) -> Self::LaunchResponseFut;
590}
591#[derive(Debug)]
592#[cfg(target_os = "fuchsia")]
593pub struct DriverHostLauncherSynchronousProxy {
594 client: fidl::client::sync::Client,
595}
596
597#[cfg(target_os = "fuchsia")]
598impl fidl::endpoints::SynchronousProxy for DriverHostLauncherSynchronousProxy {
599 type Proxy = DriverHostLauncherProxy;
600 type Protocol = DriverHostLauncherMarker;
601
602 fn from_channel(inner: fidl::Channel) -> Self {
603 Self::new(inner)
604 }
605
606 fn into_channel(self) -> fidl::Channel {
607 self.client.into_channel()
608 }
609
610 fn as_channel(&self) -> &fidl::Channel {
611 self.client.as_channel()
612 }
613}
614
615#[cfg(target_os = "fuchsia")]
616impl DriverHostLauncherSynchronousProxy {
617 pub fn new(channel: fidl::Channel) -> Self {
618 let protocol_name =
619 <DriverHostLauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
620 Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
621 }
622
623 pub fn into_channel(self) -> fidl::Channel {
624 self.client.into_channel()
625 }
626
627 pub fn wait_for_event(
630 &self,
631 deadline: zx::MonotonicInstant,
632 ) -> Result<DriverHostLauncherEvent, fidl::Error> {
633 DriverHostLauncherEvent::decode(self.client.wait_for_event(deadline)?)
634 }
635
636 pub fn r#launch(
643 &self,
644 mut payload: DriverHostLauncherLaunchRequest,
645 ___deadline: zx::MonotonicInstant,
646 ) -> Result<DriverHostLauncherLaunchResult, fidl::Error> {
647 let _response = self.client.send_query::<
648 DriverHostLauncherLaunchRequest,
649 fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, i32>,
650 >(
651 &mut payload,
652 0x3af75d84043eb730,
653 fidl::encoding::DynamicFlags::FLEXIBLE,
654 ___deadline,
655 )?
656 .into_result::<DriverHostLauncherMarker>("launch")?;
657 Ok(_response.map(|x| x))
658 }
659}
660
661#[derive(Debug, Clone)]
662pub struct DriverHostLauncherProxy {
663 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
664}
665
666impl fidl::endpoints::Proxy for DriverHostLauncherProxy {
667 type Protocol = DriverHostLauncherMarker;
668
669 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
670 Self::new(inner)
671 }
672
673 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
674 self.client.into_channel().map_err(|client| Self { client })
675 }
676
677 fn as_channel(&self) -> &::fidl::AsyncChannel {
678 self.client.as_channel()
679 }
680}
681
682impl DriverHostLauncherProxy {
683 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
685 let protocol_name =
686 <DriverHostLauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
687 Self { client: fidl::client::Client::new(channel, protocol_name) }
688 }
689
690 pub fn take_event_stream(&self) -> DriverHostLauncherEventStream {
696 DriverHostLauncherEventStream { event_receiver: self.client.take_event_receiver() }
697 }
698
699 pub fn r#launch(
706 &self,
707 mut payload: DriverHostLauncherLaunchRequest,
708 ) -> fidl::client::QueryResponseFut<
709 DriverHostLauncherLaunchResult,
710 fidl::encoding::DefaultFuchsiaResourceDialect,
711 > {
712 DriverHostLauncherProxyInterface::r#launch(self, payload)
713 }
714}
715
716impl DriverHostLauncherProxyInterface for DriverHostLauncherProxy {
717 type LaunchResponseFut = fidl::client::QueryResponseFut<
718 DriverHostLauncherLaunchResult,
719 fidl::encoding::DefaultFuchsiaResourceDialect,
720 >;
721 fn r#launch(&self, mut payload: DriverHostLauncherLaunchRequest) -> Self::LaunchResponseFut {
722 fn _decode(
723 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
724 ) -> Result<DriverHostLauncherLaunchResult, fidl::Error> {
725 let _response = fidl::client::decode_transaction_body::<
726 fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, i32>,
727 fidl::encoding::DefaultFuchsiaResourceDialect,
728 0x3af75d84043eb730,
729 >(_buf?)?
730 .into_result::<DriverHostLauncherMarker>("launch")?;
731 Ok(_response.map(|x| x))
732 }
733 self.client.send_query_and_decode::<
734 DriverHostLauncherLaunchRequest,
735 DriverHostLauncherLaunchResult,
736 >(
737 &mut payload,
738 0x3af75d84043eb730,
739 fidl::encoding::DynamicFlags::FLEXIBLE,
740 _decode,
741 )
742 }
743}
744
745pub struct DriverHostLauncherEventStream {
746 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
747}
748
749impl std::marker::Unpin for DriverHostLauncherEventStream {}
750
751impl futures::stream::FusedStream for DriverHostLauncherEventStream {
752 fn is_terminated(&self) -> bool {
753 self.event_receiver.is_terminated()
754 }
755}
756
757impl futures::Stream for DriverHostLauncherEventStream {
758 type Item = Result<DriverHostLauncherEvent, fidl::Error>;
759
760 fn poll_next(
761 mut self: std::pin::Pin<&mut Self>,
762 cx: &mut std::task::Context<'_>,
763 ) -> std::task::Poll<Option<Self::Item>> {
764 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
765 &mut self.event_receiver,
766 cx
767 )?) {
768 Some(buf) => std::task::Poll::Ready(Some(DriverHostLauncherEvent::decode(buf))),
769 None => std::task::Poll::Ready(None),
770 }
771 }
772}
773
774#[derive(Debug)]
775pub enum DriverHostLauncherEvent {
776 #[non_exhaustive]
777 _UnknownEvent {
778 ordinal: u64,
780 },
781}
782
783impl DriverHostLauncherEvent {
784 fn decode(
786 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
787 ) -> Result<DriverHostLauncherEvent, fidl::Error> {
788 let (bytes, _handles) = buf.split_mut();
789 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
790 debug_assert_eq!(tx_header.tx_id, 0);
791 match tx_header.ordinal {
792 _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
793 Ok(DriverHostLauncherEvent::_UnknownEvent { ordinal: tx_header.ordinal })
794 }
795 _ => Err(fidl::Error::UnknownOrdinal {
796 ordinal: tx_header.ordinal,
797 protocol_name:
798 <DriverHostLauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
799 }),
800 }
801 }
802}
803
804pub struct DriverHostLauncherRequestStream {
806 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
807 is_terminated: bool,
808}
809
810impl std::marker::Unpin for DriverHostLauncherRequestStream {}
811
812impl futures::stream::FusedStream for DriverHostLauncherRequestStream {
813 fn is_terminated(&self) -> bool {
814 self.is_terminated
815 }
816}
817
818impl fidl::endpoints::RequestStream for DriverHostLauncherRequestStream {
819 type Protocol = DriverHostLauncherMarker;
820 type ControlHandle = DriverHostLauncherControlHandle;
821
822 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
823 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
824 }
825
826 fn control_handle(&self) -> Self::ControlHandle {
827 DriverHostLauncherControlHandle { inner: self.inner.clone() }
828 }
829
830 fn into_inner(
831 self,
832 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
833 {
834 (self.inner, self.is_terminated)
835 }
836
837 fn from_inner(
838 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
839 is_terminated: bool,
840 ) -> Self {
841 Self { inner, is_terminated }
842 }
843}
844
845impl futures::Stream for DriverHostLauncherRequestStream {
846 type Item = Result<DriverHostLauncherRequest, fidl::Error>;
847
848 fn poll_next(
849 mut self: std::pin::Pin<&mut Self>,
850 cx: &mut std::task::Context<'_>,
851 ) -> std::task::Poll<Option<Self::Item>> {
852 let this = &mut *self;
853 if this.inner.check_shutdown(cx) {
854 this.is_terminated = true;
855 return std::task::Poll::Ready(None);
856 }
857 if this.is_terminated {
858 panic!("polled DriverHostLauncherRequestStream after completion");
859 }
860 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
861 |bytes, handles| {
862 match this.inner.channel().read_etc(cx, bytes, handles) {
863 std::task::Poll::Ready(Ok(())) => {}
864 std::task::Poll::Pending => return std::task::Poll::Pending,
865 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
866 this.is_terminated = true;
867 return std::task::Poll::Ready(None);
868 }
869 std::task::Poll::Ready(Err(e)) => {
870 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
871 e.into(),
872 ))))
873 }
874 }
875
876 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
878
879 std::task::Poll::Ready(Some(match header.ordinal {
880 0x3af75d84043eb730 => {
881 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
882 let mut req = fidl::new_empty!(DriverHostLauncherLaunchRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
883 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DriverHostLauncherLaunchRequest>(&header, _body_bytes, handles, &mut req)?;
884 let control_handle = DriverHostLauncherControlHandle {
885 inner: this.inner.clone(),
886 };
887 Ok(DriverHostLauncherRequest::Launch {payload: req,
888 responder: DriverHostLauncherLaunchResponder {
889 control_handle: std::mem::ManuallyDrop::new(control_handle),
890 tx_id: header.tx_id,
891 },
892 })
893 }
894 _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
895 Ok(DriverHostLauncherRequest::_UnknownMethod {
896 ordinal: header.ordinal,
897 control_handle: DriverHostLauncherControlHandle { inner: this.inner.clone() },
898 method_type: fidl::MethodType::OneWay,
899 })
900 }
901 _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
902 this.inner.send_framework_err(
903 fidl::encoding::FrameworkErr::UnknownMethod,
904 header.tx_id,
905 header.ordinal,
906 header.dynamic_flags(),
907 (bytes, handles),
908 )?;
909 Ok(DriverHostLauncherRequest::_UnknownMethod {
910 ordinal: header.ordinal,
911 control_handle: DriverHostLauncherControlHandle { inner: this.inner.clone() },
912 method_type: fidl::MethodType::TwoWay,
913 })
914 }
915 _ => Err(fidl::Error::UnknownOrdinal {
916 ordinal: header.ordinal,
917 protocol_name: <DriverHostLauncherMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
918 }),
919 }))
920 },
921 )
922 }
923}
924
925#[derive(Debug)]
928pub enum DriverHostLauncherRequest {
929 Launch {
936 payload: DriverHostLauncherLaunchRequest,
937 responder: DriverHostLauncherLaunchResponder,
938 },
939 #[non_exhaustive]
941 _UnknownMethod {
942 ordinal: u64,
944 control_handle: DriverHostLauncherControlHandle,
945 method_type: fidl::MethodType,
946 },
947}
948
949impl DriverHostLauncherRequest {
950 #[allow(irrefutable_let_patterns)]
951 pub fn into_launch(
952 self,
953 ) -> Option<(DriverHostLauncherLaunchRequest, DriverHostLauncherLaunchResponder)> {
954 if let DriverHostLauncherRequest::Launch { payload, responder } = self {
955 Some((payload, responder))
956 } else {
957 None
958 }
959 }
960
961 pub fn method_name(&self) -> &'static str {
963 match *self {
964 DriverHostLauncherRequest::Launch { .. } => "launch",
965 DriverHostLauncherRequest::_UnknownMethod {
966 method_type: fidl::MethodType::OneWay,
967 ..
968 } => "unknown one-way method",
969 DriverHostLauncherRequest::_UnknownMethod {
970 method_type: fidl::MethodType::TwoWay,
971 ..
972 } => "unknown two-way method",
973 }
974 }
975}
976
977#[derive(Debug, Clone)]
978pub struct DriverHostLauncherControlHandle {
979 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
980}
981
982impl fidl::endpoints::ControlHandle for DriverHostLauncherControlHandle {
983 fn shutdown(&self) {
984 self.inner.shutdown()
985 }
986 fn shutdown_with_epitaph(&self, status: zx_status::Status) {
987 self.inner.shutdown_with_epitaph(status)
988 }
989
990 fn is_closed(&self) -> bool {
991 self.inner.channel().is_closed()
992 }
993 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
994 self.inner.channel().on_closed()
995 }
996
997 #[cfg(target_os = "fuchsia")]
998 fn signal_peer(
999 &self,
1000 clear_mask: zx::Signals,
1001 set_mask: zx::Signals,
1002 ) -> Result<(), zx_status::Status> {
1003 use fidl::Peered;
1004 self.inner.channel().signal_peer(clear_mask, set_mask)
1005 }
1006}
1007
1008impl DriverHostLauncherControlHandle {}
1009
1010#[must_use = "FIDL methods require a response to be sent"]
1011#[derive(Debug)]
1012pub struct DriverHostLauncherLaunchResponder {
1013 control_handle: std::mem::ManuallyDrop<DriverHostLauncherControlHandle>,
1014 tx_id: u32,
1015}
1016
1017impl std::ops::Drop for DriverHostLauncherLaunchResponder {
1021 fn drop(&mut self) {
1022 self.control_handle.shutdown();
1023 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1025 }
1026}
1027
1028impl fidl::endpoints::Responder for DriverHostLauncherLaunchResponder {
1029 type ControlHandle = DriverHostLauncherControlHandle;
1030
1031 fn control_handle(&self) -> &DriverHostLauncherControlHandle {
1032 &self.control_handle
1033 }
1034
1035 fn drop_without_shutdown(mut self) {
1036 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1038 std::mem::forget(self);
1040 }
1041}
1042
1043impl DriverHostLauncherLaunchResponder {
1044 pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1048 let _result = self.send_raw(result);
1049 if _result.is_err() {
1050 self.control_handle.shutdown();
1051 }
1052 self.drop_without_shutdown();
1053 _result
1054 }
1055
1056 pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1058 let _result = self.send_raw(result);
1059 self.drop_without_shutdown();
1060 _result
1061 }
1062
1063 fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1064 self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1065 fidl::encoding::EmptyStruct,
1066 i32,
1067 >>(
1068 fidl::encoding::FlexibleResult::new(result),
1069 self.tx_id,
1070 0x3af75d84043eb730,
1071 fidl::encoding::DynamicFlags::FLEXIBLE,
1072 )
1073 }
1074}
1075
1076mod internal {
1077 use super::*;
1078
1079 impl DriverHostLauncherLaunchRequest {
1080 #[inline(always)]
1081 fn max_ordinal_present(&self) -> u64 {
1082 if let Some(_) = self.driver_host {
1083 return 6;
1084 }
1085 if let Some(_) = self.driver_host_libs {
1086 return 5;
1087 }
1088 if let Some(_) = self.vdso {
1089 return 4;
1090 }
1091 if let Some(_) = self.driver_host_binary {
1092 return 3;
1093 }
1094 if let Some(_) = self.root_vmar {
1095 return 2;
1096 }
1097 if let Some(_) = self.process {
1098 return 1;
1099 }
1100 0
1101 }
1102 }
1103
1104 impl fidl::encoding::ResourceTypeMarker for DriverHostLauncherLaunchRequest {
1105 type Borrowed<'a> = &'a mut Self;
1106 fn take_or_borrow<'a>(
1107 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1108 ) -> Self::Borrowed<'a> {
1109 value
1110 }
1111 }
1112
1113 unsafe impl fidl::encoding::TypeMarker for DriverHostLauncherLaunchRequest {
1114 type Owned = Self;
1115
1116 #[inline(always)]
1117 fn inline_align(_context: fidl::encoding::Context) -> usize {
1118 8
1119 }
1120
1121 #[inline(always)]
1122 fn inline_size(_context: fidl::encoding::Context) -> usize {
1123 16
1124 }
1125 }
1126
1127 unsafe impl
1128 fidl::encoding::Encode<
1129 DriverHostLauncherLaunchRequest,
1130 fidl::encoding::DefaultFuchsiaResourceDialect,
1131 > for &mut DriverHostLauncherLaunchRequest
1132 {
1133 unsafe fn encode(
1134 self,
1135 encoder: &mut fidl::encoding::Encoder<
1136 '_,
1137 fidl::encoding::DefaultFuchsiaResourceDialect,
1138 >,
1139 offset: usize,
1140 mut depth: fidl::encoding::Depth,
1141 ) -> fidl::Result<()> {
1142 encoder.debug_check_bounds::<DriverHostLauncherLaunchRequest>(offset);
1143 let max_ordinal: u64 = self.max_ordinal_present();
1145 encoder.write_num(max_ordinal, offset);
1146 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1147 if max_ordinal == 0 {
1149 return Ok(());
1150 }
1151 depth.increment()?;
1152 let envelope_size = 8;
1153 let bytes_len = max_ordinal as usize * envelope_size;
1154 #[allow(unused_variables)]
1155 let offset = encoder.out_of_line_offset(bytes_len);
1156 let mut _prev_end_offset: usize = 0;
1157 if 1 > max_ordinal {
1158 return Ok(());
1159 }
1160
1161 let cur_offset: usize = (1 - 1) * envelope_size;
1164
1165 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1167
1168 fidl::encoding::encode_in_envelope_optional::<
1173 fidl::encoding::HandleType<
1174 fidl::Process,
1175 { fidl::ObjectType::PROCESS.into_raw() },
1176 2147483648,
1177 >,
1178 fidl::encoding::DefaultFuchsiaResourceDialect,
1179 >(
1180 self.process.as_mut().map(
1181 <fidl::encoding::HandleType<
1182 fidl::Process,
1183 { fidl::ObjectType::PROCESS.into_raw() },
1184 2147483648,
1185 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1186 ),
1187 encoder,
1188 offset + cur_offset,
1189 depth,
1190 )?;
1191
1192 _prev_end_offset = cur_offset + envelope_size;
1193 if 2 > max_ordinal {
1194 return Ok(());
1195 }
1196
1197 let cur_offset: usize = (2 - 1) * envelope_size;
1200
1201 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1203
1204 fidl::encoding::encode_in_envelope_optional::<
1209 fidl::encoding::HandleType<
1210 fidl::Vmar,
1211 { fidl::ObjectType::VMAR.into_raw() },
1212 2147483648,
1213 >,
1214 fidl::encoding::DefaultFuchsiaResourceDialect,
1215 >(
1216 self.root_vmar.as_mut().map(
1217 <fidl::encoding::HandleType<
1218 fidl::Vmar,
1219 { fidl::ObjectType::VMAR.into_raw() },
1220 2147483648,
1221 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1222 ),
1223 encoder,
1224 offset + cur_offset,
1225 depth,
1226 )?;
1227
1228 _prev_end_offset = cur_offset + envelope_size;
1229 if 3 > max_ordinal {
1230 return Ok(());
1231 }
1232
1233 let cur_offset: usize = (3 - 1) * envelope_size;
1236
1237 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1239
1240 fidl::encoding::encode_in_envelope_optional::<
1245 fidl::encoding::HandleType<
1246 fidl::Vmo,
1247 { fidl::ObjectType::VMO.into_raw() },
1248 2147483648,
1249 >,
1250 fidl::encoding::DefaultFuchsiaResourceDialect,
1251 >(
1252 self.driver_host_binary.as_mut().map(
1253 <fidl::encoding::HandleType<
1254 fidl::Vmo,
1255 { fidl::ObjectType::VMO.into_raw() },
1256 2147483648,
1257 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1258 ),
1259 encoder,
1260 offset + cur_offset,
1261 depth,
1262 )?;
1263
1264 _prev_end_offset = cur_offset + envelope_size;
1265 if 4 > max_ordinal {
1266 return Ok(());
1267 }
1268
1269 let cur_offset: usize = (4 - 1) * envelope_size;
1272
1273 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1275
1276 fidl::encoding::encode_in_envelope_optional::<
1281 fidl::encoding::HandleType<
1282 fidl::Vmo,
1283 { fidl::ObjectType::VMO.into_raw() },
1284 2147483648,
1285 >,
1286 fidl::encoding::DefaultFuchsiaResourceDialect,
1287 >(
1288 self.vdso.as_mut().map(
1289 <fidl::encoding::HandleType<
1290 fidl::Vmo,
1291 { fidl::ObjectType::VMO.into_raw() },
1292 2147483648,
1293 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1294 ),
1295 encoder,
1296 offset + cur_offset,
1297 depth,
1298 )?;
1299
1300 _prev_end_offset = cur_offset + envelope_size;
1301 if 5 > max_ordinal {
1302 return Ok(());
1303 }
1304
1305 let cur_offset: usize = (5 - 1) * envelope_size;
1308
1309 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1311
1312 fidl::encoding::encode_in_envelope_optional::<
1317 fidl::encoding::Endpoint<
1318 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1319 >,
1320 fidl::encoding::DefaultFuchsiaResourceDialect,
1321 >(
1322 self.driver_host_libs.as_mut().map(
1323 <fidl::encoding::Endpoint<
1324 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1325 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1326 ),
1327 encoder,
1328 offset + cur_offset,
1329 depth,
1330 )?;
1331
1332 _prev_end_offset = cur_offset + envelope_size;
1333 if 6 > max_ordinal {
1334 return Ok(());
1335 }
1336
1337 let cur_offset: usize = (6 - 1) * envelope_size;
1340
1341 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1343
1344 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DriverHostMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1349 self.driver_host.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DriverHostMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1350 encoder, offset + cur_offset, depth
1351 )?;
1352
1353 _prev_end_offset = cur_offset + envelope_size;
1354
1355 Ok(())
1356 }
1357 }
1358
1359 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1360 for DriverHostLauncherLaunchRequest
1361 {
1362 #[inline(always)]
1363 fn new_empty() -> Self {
1364 Self::default()
1365 }
1366
1367 unsafe fn decode(
1368 &mut self,
1369 decoder: &mut fidl::encoding::Decoder<
1370 '_,
1371 fidl::encoding::DefaultFuchsiaResourceDialect,
1372 >,
1373 offset: usize,
1374 mut depth: fidl::encoding::Depth,
1375 ) -> fidl::Result<()> {
1376 decoder.debug_check_bounds::<Self>(offset);
1377 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1378 None => return Err(fidl::Error::NotNullable),
1379 Some(len) => len,
1380 };
1381 if len == 0 {
1383 return Ok(());
1384 };
1385 depth.increment()?;
1386 let envelope_size = 8;
1387 let bytes_len = len * envelope_size;
1388 let offset = decoder.out_of_line_offset(bytes_len)?;
1389 let mut _next_ordinal_to_read = 0;
1391 let mut next_offset = offset;
1392 let end_offset = offset + bytes_len;
1393 _next_ordinal_to_read += 1;
1394 if next_offset >= end_offset {
1395 return Ok(());
1396 }
1397
1398 while _next_ordinal_to_read < 1 {
1400 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1401 _next_ordinal_to_read += 1;
1402 next_offset += envelope_size;
1403 }
1404
1405 let next_out_of_line = decoder.next_out_of_line();
1406 let handles_before = decoder.remaining_handles();
1407 if let Some((inlined, num_bytes, num_handles)) =
1408 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1409 {
1410 let member_inline_size = <fidl::encoding::HandleType<
1411 fidl::Process,
1412 { fidl::ObjectType::PROCESS.into_raw() },
1413 2147483648,
1414 > as fidl::encoding::TypeMarker>::inline_size(
1415 decoder.context
1416 );
1417 if inlined != (member_inline_size <= 4) {
1418 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1419 }
1420 let inner_offset;
1421 let mut inner_depth = depth.clone();
1422 if inlined {
1423 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1424 inner_offset = next_offset;
1425 } else {
1426 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1427 inner_depth.increment()?;
1428 }
1429 let val_ref =
1430 self.process.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Process, { fidl::ObjectType::PROCESS.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1431 fidl::decode!(fidl::encoding::HandleType<fidl::Process, { fidl::ObjectType::PROCESS.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1432 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1433 {
1434 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1435 }
1436 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1437 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1438 }
1439 }
1440
1441 next_offset += envelope_size;
1442 _next_ordinal_to_read += 1;
1443 if next_offset >= end_offset {
1444 return Ok(());
1445 }
1446
1447 while _next_ordinal_to_read < 2 {
1449 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1450 _next_ordinal_to_read += 1;
1451 next_offset += envelope_size;
1452 }
1453
1454 let next_out_of_line = decoder.next_out_of_line();
1455 let handles_before = decoder.remaining_handles();
1456 if let Some((inlined, num_bytes, num_handles)) =
1457 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1458 {
1459 let member_inline_size = <fidl::encoding::HandleType<
1460 fidl::Vmar,
1461 { fidl::ObjectType::VMAR.into_raw() },
1462 2147483648,
1463 > as fidl::encoding::TypeMarker>::inline_size(
1464 decoder.context
1465 );
1466 if inlined != (member_inline_size <= 4) {
1467 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1468 }
1469 let inner_offset;
1470 let mut inner_depth = depth.clone();
1471 if inlined {
1472 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1473 inner_offset = next_offset;
1474 } else {
1475 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1476 inner_depth.increment()?;
1477 }
1478 let val_ref =
1479 self.root_vmar.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmar, { fidl::ObjectType::VMAR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1480 fidl::decode!(fidl::encoding::HandleType<fidl::Vmar, { fidl::ObjectType::VMAR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1481 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1482 {
1483 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1484 }
1485 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1486 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1487 }
1488 }
1489
1490 next_offset += envelope_size;
1491 _next_ordinal_to_read += 1;
1492 if next_offset >= end_offset {
1493 return Ok(());
1494 }
1495
1496 while _next_ordinal_to_read < 3 {
1498 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1499 _next_ordinal_to_read += 1;
1500 next_offset += envelope_size;
1501 }
1502
1503 let next_out_of_line = decoder.next_out_of_line();
1504 let handles_before = decoder.remaining_handles();
1505 if let Some((inlined, num_bytes, num_handles)) =
1506 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1507 {
1508 let member_inline_size = <fidl::encoding::HandleType<
1509 fidl::Vmo,
1510 { fidl::ObjectType::VMO.into_raw() },
1511 2147483648,
1512 > as fidl::encoding::TypeMarker>::inline_size(
1513 decoder.context
1514 );
1515 if inlined != (member_inline_size <= 4) {
1516 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1517 }
1518 let inner_offset;
1519 let mut inner_depth = depth.clone();
1520 if inlined {
1521 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1522 inner_offset = next_offset;
1523 } else {
1524 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1525 inner_depth.increment()?;
1526 }
1527 let val_ref =
1528 self.driver_host_binary.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1529 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1530 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1531 {
1532 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1533 }
1534 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1535 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1536 }
1537 }
1538
1539 next_offset += envelope_size;
1540 _next_ordinal_to_read += 1;
1541 if next_offset >= end_offset {
1542 return Ok(());
1543 }
1544
1545 while _next_ordinal_to_read < 4 {
1547 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1548 _next_ordinal_to_read += 1;
1549 next_offset += envelope_size;
1550 }
1551
1552 let next_out_of_line = decoder.next_out_of_line();
1553 let handles_before = decoder.remaining_handles();
1554 if let Some((inlined, num_bytes, num_handles)) =
1555 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1556 {
1557 let member_inline_size = <fidl::encoding::HandleType<
1558 fidl::Vmo,
1559 { fidl::ObjectType::VMO.into_raw() },
1560 2147483648,
1561 > as fidl::encoding::TypeMarker>::inline_size(
1562 decoder.context
1563 );
1564 if inlined != (member_inline_size <= 4) {
1565 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1566 }
1567 let inner_offset;
1568 let mut inner_depth = depth.clone();
1569 if inlined {
1570 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1571 inner_offset = next_offset;
1572 } else {
1573 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1574 inner_depth.increment()?;
1575 }
1576 let val_ref =
1577 self.vdso.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1578 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1579 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1580 {
1581 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1582 }
1583 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1584 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1585 }
1586 }
1587
1588 next_offset += envelope_size;
1589 _next_ordinal_to_read += 1;
1590 if next_offset >= end_offset {
1591 return Ok(());
1592 }
1593
1594 while _next_ordinal_to_read < 5 {
1596 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1597 _next_ordinal_to_read += 1;
1598 next_offset += envelope_size;
1599 }
1600
1601 let next_out_of_line = decoder.next_out_of_line();
1602 let handles_before = decoder.remaining_handles();
1603 if let Some((inlined, num_bytes, num_handles)) =
1604 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1605 {
1606 let member_inline_size = <fidl::encoding::Endpoint<
1607 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1608 > as fidl::encoding::TypeMarker>::inline_size(
1609 decoder.context
1610 );
1611 if inlined != (member_inline_size <= 4) {
1612 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1613 }
1614 let inner_offset;
1615 let mut inner_depth = depth.clone();
1616 if inlined {
1617 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1618 inner_offset = next_offset;
1619 } else {
1620 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1621 inner_depth.increment()?;
1622 }
1623 let val_ref = self.driver_host_libs.get_or_insert_with(|| {
1624 fidl::new_empty!(
1625 fidl::encoding::Endpoint<
1626 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1627 >,
1628 fidl::encoding::DefaultFuchsiaResourceDialect
1629 )
1630 });
1631 fidl::decode!(
1632 fidl::encoding::Endpoint<
1633 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1634 >,
1635 fidl::encoding::DefaultFuchsiaResourceDialect,
1636 val_ref,
1637 decoder,
1638 inner_offset,
1639 inner_depth
1640 )?;
1641 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1642 {
1643 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1644 }
1645 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1646 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1647 }
1648 }
1649
1650 next_offset += envelope_size;
1651 _next_ordinal_to_read += 1;
1652 if next_offset >= end_offset {
1653 return Ok(());
1654 }
1655
1656 while _next_ordinal_to_read < 6 {
1658 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1659 _next_ordinal_to_read += 1;
1660 next_offset += envelope_size;
1661 }
1662
1663 let next_out_of_line = decoder.next_out_of_line();
1664 let handles_before = decoder.remaining_handles();
1665 if let Some((inlined, num_bytes, num_handles)) =
1666 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1667 {
1668 let member_inline_size = <fidl::encoding::Endpoint<
1669 fidl::endpoints::ServerEnd<DriverHostMarker>,
1670 > as fidl::encoding::TypeMarker>::inline_size(
1671 decoder.context
1672 );
1673 if inlined != (member_inline_size <= 4) {
1674 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1675 }
1676 let inner_offset;
1677 let mut inner_depth = depth.clone();
1678 if inlined {
1679 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1680 inner_offset = next_offset;
1681 } else {
1682 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1683 inner_depth.increment()?;
1684 }
1685 let val_ref = self.driver_host.get_or_insert_with(|| {
1686 fidl::new_empty!(
1687 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DriverHostMarker>>,
1688 fidl::encoding::DefaultFuchsiaResourceDialect
1689 )
1690 });
1691 fidl::decode!(
1692 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<DriverHostMarker>>,
1693 fidl::encoding::DefaultFuchsiaResourceDialect,
1694 val_ref,
1695 decoder,
1696 inner_offset,
1697 inner_depth
1698 )?;
1699 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1700 {
1701 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1702 }
1703 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1704 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1705 }
1706 }
1707
1708 next_offset += envelope_size;
1709
1710 while next_offset < end_offset {
1712 _next_ordinal_to_read += 1;
1713 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1714 next_offset += envelope_size;
1715 }
1716
1717 Ok(())
1718 }
1719 }
1720
1721 impl DriverHostLoadDriverRequest {
1722 #[inline(always)]
1723 fn max_ordinal_present(&self) -> u64 {
1724 if let Some(_) = self.additional_root_modules {
1725 return 4;
1726 }
1727 if let Some(_) = self.driver_libs {
1728 return 3;
1729 }
1730 if let Some(_) = self.driver_binary {
1731 return 2;
1732 }
1733 if let Some(_) = self.driver_soname {
1734 return 1;
1735 }
1736 0
1737 }
1738 }
1739
1740 impl fidl::encoding::ResourceTypeMarker for DriverHostLoadDriverRequest {
1741 type Borrowed<'a> = &'a mut Self;
1742 fn take_or_borrow<'a>(
1743 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1744 ) -> Self::Borrowed<'a> {
1745 value
1746 }
1747 }
1748
1749 unsafe impl fidl::encoding::TypeMarker for DriverHostLoadDriverRequest {
1750 type Owned = Self;
1751
1752 #[inline(always)]
1753 fn inline_align(_context: fidl::encoding::Context) -> usize {
1754 8
1755 }
1756
1757 #[inline(always)]
1758 fn inline_size(_context: fidl::encoding::Context) -> usize {
1759 16
1760 }
1761 }
1762
1763 unsafe impl
1764 fidl::encoding::Encode<
1765 DriverHostLoadDriverRequest,
1766 fidl::encoding::DefaultFuchsiaResourceDialect,
1767 > for &mut DriverHostLoadDriverRequest
1768 {
1769 unsafe fn encode(
1770 self,
1771 encoder: &mut fidl::encoding::Encoder<
1772 '_,
1773 fidl::encoding::DefaultFuchsiaResourceDialect,
1774 >,
1775 offset: usize,
1776 mut depth: fidl::encoding::Depth,
1777 ) -> fidl::Result<()> {
1778 encoder.debug_check_bounds::<DriverHostLoadDriverRequest>(offset);
1779 let max_ordinal: u64 = self.max_ordinal_present();
1781 encoder.write_num(max_ordinal, offset);
1782 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1783 if max_ordinal == 0 {
1785 return Ok(());
1786 }
1787 depth.increment()?;
1788 let envelope_size = 8;
1789 let bytes_len = max_ordinal as usize * envelope_size;
1790 #[allow(unused_variables)]
1791 let offset = encoder.out_of_line_offset(bytes_len);
1792 let mut _prev_end_offset: usize = 0;
1793 if 1 > max_ordinal {
1794 return Ok(());
1795 }
1796
1797 let cur_offset: usize = (1 - 1) * envelope_size;
1800
1801 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1803
1804 fidl::encoding::encode_in_envelope_optional::<
1809 fidl::encoding::BoundedString<255>,
1810 fidl::encoding::DefaultFuchsiaResourceDialect,
1811 >(
1812 self.driver_soname.as_ref().map(
1813 <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1814 ),
1815 encoder,
1816 offset + cur_offset,
1817 depth,
1818 )?;
1819
1820 _prev_end_offset = cur_offset + envelope_size;
1821 if 2 > max_ordinal {
1822 return Ok(());
1823 }
1824
1825 let cur_offset: usize = (2 - 1) * envelope_size;
1828
1829 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1831
1832 fidl::encoding::encode_in_envelope_optional::<
1837 fidl::encoding::HandleType<
1838 fidl::Vmo,
1839 { fidl::ObjectType::VMO.into_raw() },
1840 2147483648,
1841 >,
1842 fidl::encoding::DefaultFuchsiaResourceDialect,
1843 >(
1844 self.driver_binary.as_mut().map(
1845 <fidl::encoding::HandleType<
1846 fidl::Vmo,
1847 { fidl::ObjectType::VMO.into_raw() },
1848 2147483648,
1849 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1850 ),
1851 encoder,
1852 offset + cur_offset,
1853 depth,
1854 )?;
1855
1856 _prev_end_offset = cur_offset + envelope_size;
1857 if 3 > max_ordinal {
1858 return Ok(());
1859 }
1860
1861 let cur_offset: usize = (3 - 1) * envelope_size;
1864
1865 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1867
1868 fidl::encoding::encode_in_envelope_optional::<
1873 fidl::encoding::Endpoint<
1874 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1875 >,
1876 fidl::encoding::DefaultFuchsiaResourceDialect,
1877 >(
1878 self.driver_libs.as_mut().map(
1879 <fidl::encoding::Endpoint<
1880 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
1881 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1882 ),
1883 encoder,
1884 offset + cur_offset,
1885 depth,
1886 )?;
1887
1888 _prev_end_offset = cur_offset + envelope_size;
1889 if 4 > max_ordinal {
1890 return Ok(());
1891 }
1892
1893 let cur_offset: usize = (4 - 1) * envelope_size;
1896
1897 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1899
1900 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<RootModule>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1905 self.additional_root_modules.as_mut().map(<fidl::encoding::UnboundedVector<RootModule> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1906 encoder, offset + cur_offset, depth
1907 )?;
1908
1909 _prev_end_offset = cur_offset + envelope_size;
1910
1911 Ok(())
1912 }
1913 }
1914
1915 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1916 for DriverHostLoadDriverRequest
1917 {
1918 #[inline(always)]
1919 fn new_empty() -> Self {
1920 Self::default()
1921 }
1922
1923 unsafe fn decode(
1924 &mut self,
1925 decoder: &mut fidl::encoding::Decoder<
1926 '_,
1927 fidl::encoding::DefaultFuchsiaResourceDialect,
1928 >,
1929 offset: usize,
1930 mut depth: fidl::encoding::Depth,
1931 ) -> fidl::Result<()> {
1932 decoder.debug_check_bounds::<Self>(offset);
1933 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1934 None => return Err(fidl::Error::NotNullable),
1935 Some(len) => len,
1936 };
1937 if len == 0 {
1939 return Ok(());
1940 };
1941 depth.increment()?;
1942 let envelope_size = 8;
1943 let bytes_len = len * envelope_size;
1944 let offset = decoder.out_of_line_offset(bytes_len)?;
1945 let mut _next_ordinal_to_read = 0;
1947 let mut next_offset = offset;
1948 let end_offset = offset + bytes_len;
1949 _next_ordinal_to_read += 1;
1950 if next_offset >= end_offset {
1951 return Ok(());
1952 }
1953
1954 while _next_ordinal_to_read < 1 {
1956 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1957 _next_ordinal_to_read += 1;
1958 next_offset += envelope_size;
1959 }
1960
1961 let next_out_of_line = decoder.next_out_of_line();
1962 let handles_before = decoder.remaining_handles();
1963 if let Some((inlined, num_bytes, num_handles)) =
1964 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1965 {
1966 let member_inline_size =
1967 <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
1968 decoder.context,
1969 );
1970 if inlined != (member_inline_size <= 4) {
1971 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1972 }
1973 let inner_offset;
1974 let mut inner_depth = depth.clone();
1975 if inlined {
1976 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1977 inner_offset = next_offset;
1978 } else {
1979 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1980 inner_depth.increment()?;
1981 }
1982 let val_ref = self.driver_soname.get_or_insert_with(|| {
1983 fidl::new_empty!(
1984 fidl::encoding::BoundedString<255>,
1985 fidl::encoding::DefaultFuchsiaResourceDialect
1986 )
1987 });
1988 fidl::decode!(
1989 fidl::encoding::BoundedString<255>,
1990 fidl::encoding::DefaultFuchsiaResourceDialect,
1991 val_ref,
1992 decoder,
1993 inner_offset,
1994 inner_depth
1995 )?;
1996 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1997 {
1998 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1999 }
2000 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2001 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2002 }
2003 }
2004
2005 next_offset += envelope_size;
2006 _next_ordinal_to_read += 1;
2007 if next_offset >= end_offset {
2008 return Ok(());
2009 }
2010
2011 while _next_ordinal_to_read < 2 {
2013 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2014 _next_ordinal_to_read += 1;
2015 next_offset += envelope_size;
2016 }
2017
2018 let next_out_of_line = decoder.next_out_of_line();
2019 let handles_before = decoder.remaining_handles();
2020 if let Some((inlined, num_bytes, num_handles)) =
2021 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2022 {
2023 let member_inline_size = <fidl::encoding::HandleType<
2024 fidl::Vmo,
2025 { fidl::ObjectType::VMO.into_raw() },
2026 2147483648,
2027 > as fidl::encoding::TypeMarker>::inline_size(
2028 decoder.context
2029 );
2030 if inlined != (member_inline_size <= 4) {
2031 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2032 }
2033 let inner_offset;
2034 let mut inner_depth = depth.clone();
2035 if inlined {
2036 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2037 inner_offset = next_offset;
2038 } else {
2039 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2040 inner_depth.increment()?;
2041 }
2042 let val_ref =
2043 self.driver_binary.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2044 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2045 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2046 {
2047 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2048 }
2049 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2050 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2051 }
2052 }
2053
2054 next_offset += envelope_size;
2055 _next_ordinal_to_read += 1;
2056 if next_offset >= end_offset {
2057 return Ok(());
2058 }
2059
2060 while _next_ordinal_to_read < 3 {
2062 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2063 _next_ordinal_to_read += 1;
2064 next_offset += envelope_size;
2065 }
2066
2067 let next_out_of_line = decoder.next_out_of_line();
2068 let handles_before = decoder.remaining_handles();
2069 if let Some((inlined, num_bytes, num_handles)) =
2070 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2071 {
2072 let member_inline_size = <fidl::encoding::Endpoint<
2073 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
2074 > as fidl::encoding::TypeMarker>::inline_size(
2075 decoder.context
2076 );
2077 if inlined != (member_inline_size <= 4) {
2078 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2079 }
2080 let inner_offset;
2081 let mut inner_depth = depth.clone();
2082 if inlined {
2083 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2084 inner_offset = next_offset;
2085 } else {
2086 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2087 inner_depth.increment()?;
2088 }
2089 let val_ref = self.driver_libs.get_or_insert_with(|| {
2090 fidl::new_empty!(
2091 fidl::encoding::Endpoint<
2092 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
2093 >,
2094 fidl::encoding::DefaultFuchsiaResourceDialect
2095 )
2096 });
2097 fidl::decode!(
2098 fidl::encoding::Endpoint<
2099 fidl::endpoints::ClientEnd<fidl_fuchsia_io::DirectoryMarker>,
2100 >,
2101 fidl::encoding::DefaultFuchsiaResourceDialect,
2102 val_ref,
2103 decoder,
2104 inner_offset,
2105 inner_depth
2106 )?;
2107 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2108 {
2109 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2110 }
2111 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2112 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2113 }
2114 }
2115
2116 next_offset += envelope_size;
2117 _next_ordinal_to_read += 1;
2118 if next_offset >= end_offset {
2119 return Ok(());
2120 }
2121
2122 while _next_ordinal_to_read < 4 {
2124 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2125 _next_ordinal_to_read += 1;
2126 next_offset += envelope_size;
2127 }
2128
2129 let next_out_of_line = decoder.next_out_of_line();
2130 let handles_before = decoder.remaining_handles();
2131 if let Some((inlined, num_bytes, num_handles)) =
2132 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2133 {
2134 let member_inline_size = <fidl::encoding::UnboundedVector<RootModule> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2135 if inlined != (member_inline_size <= 4) {
2136 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2137 }
2138 let inner_offset;
2139 let mut inner_depth = depth.clone();
2140 if inlined {
2141 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2142 inner_offset = next_offset;
2143 } else {
2144 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2145 inner_depth.increment()?;
2146 }
2147 let val_ref = self.additional_root_modules.get_or_insert_with(|| {
2148 fidl::new_empty!(
2149 fidl::encoding::UnboundedVector<RootModule>,
2150 fidl::encoding::DefaultFuchsiaResourceDialect
2151 )
2152 });
2153 fidl::decode!(
2154 fidl::encoding::UnboundedVector<RootModule>,
2155 fidl::encoding::DefaultFuchsiaResourceDialect,
2156 val_ref,
2157 decoder,
2158 inner_offset,
2159 inner_depth
2160 )?;
2161 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2162 {
2163 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2164 }
2165 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2166 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2167 }
2168 }
2169
2170 next_offset += envelope_size;
2171
2172 while next_offset < end_offset {
2174 _next_ordinal_to_read += 1;
2175 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2176 next_offset += envelope_size;
2177 }
2178
2179 Ok(())
2180 }
2181 }
2182
2183 impl RootModule {
2184 #[inline(always)]
2185 fn max_ordinal_present(&self) -> u64 {
2186 if let Some(_) = self.binary {
2187 return 2;
2188 }
2189 if let Some(_) = self.name {
2190 return 1;
2191 }
2192 0
2193 }
2194 }
2195
2196 impl fidl::encoding::ResourceTypeMarker for RootModule {
2197 type Borrowed<'a> = &'a mut Self;
2198 fn take_or_borrow<'a>(
2199 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2200 ) -> Self::Borrowed<'a> {
2201 value
2202 }
2203 }
2204
2205 unsafe impl fidl::encoding::TypeMarker for RootModule {
2206 type Owned = Self;
2207
2208 #[inline(always)]
2209 fn inline_align(_context: fidl::encoding::Context) -> usize {
2210 8
2211 }
2212
2213 #[inline(always)]
2214 fn inline_size(_context: fidl::encoding::Context) -> usize {
2215 16
2216 }
2217 }
2218
2219 unsafe impl fidl::encoding::Encode<RootModule, fidl::encoding::DefaultFuchsiaResourceDialect>
2220 for &mut RootModule
2221 {
2222 unsafe fn encode(
2223 self,
2224 encoder: &mut fidl::encoding::Encoder<
2225 '_,
2226 fidl::encoding::DefaultFuchsiaResourceDialect,
2227 >,
2228 offset: usize,
2229 mut depth: fidl::encoding::Depth,
2230 ) -> fidl::Result<()> {
2231 encoder.debug_check_bounds::<RootModule>(offset);
2232 let max_ordinal: u64 = self.max_ordinal_present();
2234 encoder.write_num(max_ordinal, offset);
2235 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2236 if max_ordinal == 0 {
2238 return Ok(());
2239 }
2240 depth.increment()?;
2241 let envelope_size = 8;
2242 let bytes_len = max_ordinal as usize * envelope_size;
2243 #[allow(unused_variables)]
2244 let offset = encoder.out_of_line_offset(bytes_len);
2245 let mut _prev_end_offset: usize = 0;
2246 if 1 > max_ordinal {
2247 return Ok(());
2248 }
2249
2250 let cur_offset: usize = (1 - 1) * envelope_size;
2253
2254 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2256
2257 fidl::encoding::encode_in_envelope_optional::<
2262 fidl::encoding::BoundedString<255>,
2263 fidl::encoding::DefaultFuchsiaResourceDialect,
2264 >(
2265 self.name.as_ref().map(
2266 <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
2267 ),
2268 encoder,
2269 offset + cur_offset,
2270 depth,
2271 )?;
2272
2273 _prev_end_offset = cur_offset + envelope_size;
2274 if 2 > max_ordinal {
2275 return Ok(());
2276 }
2277
2278 let cur_offset: usize = (2 - 1) * envelope_size;
2281
2282 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2284
2285 fidl::encoding::encode_in_envelope_optional::<
2290 fidl::encoding::HandleType<
2291 fidl::Vmo,
2292 { fidl::ObjectType::VMO.into_raw() },
2293 2147483648,
2294 >,
2295 fidl::encoding::DefaultFuchsiaResourceDialect,
2296 >(
2297 self.binary.as_mut().map(
2298 <fidl::encoding::HandleType<
2299 fidl::Vmo,
2300 { fidl::ObjectType::VMO.into_raw() },
2301 2147483648,
2302 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2303 ),
2304 encoder,
2305 offset + cur_offset,
2306 depth,
2307 )?;
2308
2309 _prev_end_offset = cur_offset + envelope_size;
2310
2311 Ok(())
2312 }
2313 }
2314
2315 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for RootModule {
2316 #[inline(always)]
2317 fn new_empty() -> Self {
2318 Self::default()
2319 }
2320
2321 unsafe fn decode(
2322 &mut self,
2323 decoder: &mut fidl::encoding::Decoder<
2324 '_,
2325 fidl::encoding::DefaultFuchsiaResourceDialect,
2326 >,
2327 offset: usize,
2328 mut depth: fidl::encoding::Depth,
2329 ) -> fidl::Result<()> {
2330 decoder.debug_check_bounds::<Self>(offset);
2331 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2332 None => return Err(fidl::Error::NotNullable),
2333 Some(len) => len,
2334 };
2335 if len == 0 {
2337 return Ok(());
2338 };
2339 depth.increment()?;
2340 let envelope_size = 8;
2341 let bytes_len = len * envelope_size;
2342 let offset = decoder.out_of_line_offset(bytes_len)?;
2343 let mut _next_ordinal_to_read = 0;
2345 let mut next_offset = offset;
2346 let end_offset = offset + bytes_len;
2347 _next_ordinal_to_read += 1;
2348 if next_offset >= end_offset {
2349 return Ok(());
2350 }
2351
2352 while _next_ordinal_to_read < 1 {
2354 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2355 _next_ordinal_to_read += 1;
2356 next_offset += envelope_size;
2357 }
2358
2359 let next_out_of_line = decoder.next_out_of_line();
2360 let handles_before = decoder.remaining_handles();
2361 if let Some((inlined, num_bytes, num_handles)) =
2362 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2363 {
2364 let member_inline_size =
2365 <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2366 decoder.context,
2367 );
2368 if inlined != (member_inline_size <= 4) {
2369 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2370 }
2371 let inner_offset;
2372 let mut inner_depth = depth.clone();
2373 if inlined {
2374 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2375 inner_offset = next_offset;
2376 } else {
2377 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2378 inner_depth.increment()?;
2379 }
2380 let val_ref = self.name.get_or_insert_with(|| {
2381 fidl::new_empty!(
2382 fidl::encoding::BoundedString<255>,
2383 fidl::encoding::DefaultFuchsiaResourceDialect
2384 )
2385 });
2386 fidl::decode!(
2387 fidl::encoding::BoundedString<255>,
2388 fidl::encoding::DefaultFuchsiaResourceDialect,
2389 val_ref,
2390 decoder,
2391 inner_offset,
2392 inner_depth
2393 )?;
2394 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2395 {
2396 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2397 }
2398 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2399 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2400 }
2401 }
2402
2403 next_offset += envelope_size;
2404 _next_ordinal_to_read += 1;
2405 if next_offset >= end_offset {
2406 return Ok(());
2407 }
2408
2409 while _next_ordinal_to_read < 2 {
2411 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2412 _next_ordinal_to_read += 1;
2413 next_offset += envelope_size;
2414 }
2415
2416 let next_out_of_line = decoder.next_out_of_line();
2417 let handles_before = decoder.remaining_handles();
2418 if let Some((inlined, num_bytes, num_handles)) =
2419 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2420 {
2421 let member_inline_size = <fidl::encoding::HandleType<
2422 fidl::Vmo,
2423 { fidl::ObjectType::VMO.into_raw() },
2424 2147483648,
2425 > as fidl::encoding::TypeMarker>::inline_size(
2426 decoder.context
2427 );
2428 if inlined != (member_inline_size <= 4) {
2429 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2430 }
2431 let inner_offset;
2432 let mut inner_depth = depth.clone();
2433 if inlined {
2434 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2435 inner_offset = next_offset;
2436 } else {
2437 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2438 inner_depth.increment()?;
2439 }
2440 let val_ref =
2441 self.binary.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2442 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2443 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2444 {
2445 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2446 }
2447 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2448 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2449 }
2450 }
2451
2452 next_offset += envelope_size;
2453
2454 while next_offset < end_offset {
2456 _next_ordinal_to_read += 1;
2457 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2458 next_offset += envelope_size;
2459 }
2460
2461 Ok(())
2462 }
2463 }
2464}