fidl_fuchsia_starnix_runner/
fidl_fuchsia_starnix_runner.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![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_starnix_runner__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Default, PartialEq)]
15pub struct ManagerCreatePagerRequest {
16    /// The backing vmo to use in the pager.
17    pub backing_vmo: Option<fidl::Vmo>,
18    /// The block size for the pager to use.
19    pub block_size: Option<u64>,
20    /// The `Pager` instance that will serve the pager requests.
21    pub pager: Option<fidl::endpoints::ServerEnd<PagerMarker>>,
22    #[doc(hidden)]
23    pub __source_breaking: fidl::marker::SourceBreaking,
24}
25
26impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ManagerCreatePagerRequest {}
27
28#[derive(Debug, Default, PartialEq)]
29pub struct ManagerProxyWakeChannelRequest {
30    /// The job of the container that holds the other end of `container_channel`.
31    pub container_job: Option<fidl::Job>,
32    /// The channel endpoint that is connected to the container.
33    pub container_channel: Option<fidl::Channel>,
34    /// The channel endpoint that is connected to a component outside the container.
35    pub remote_channel: Option<fidl::Channel>,
36    /// The name of the proxy, used for debugging purposes.
37    pub name: Option<String>,
38    /// A counter that is used to count how many unhandled requests have been sent to the
39    /// container. If this counter is non-zero, the container will not be able to suspend.
40    ///
41    /// Each time the client handles a message on the proxied channel, it is expected to
42    /// decrement the counter by 1. This decrement should only happen once the client is
43    /// ready to allow suspension. Often this means that a new hanging get has been sent on
44    /// the proxied channel.
45    pub counter: Option<fidl::Counter>,
46    #[doc(hidden)]
47    pub __source_breaking: fidl::marker::SourceBreaking,
48}
49
50impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
51    for ManagerProxyWakeChannelRequest
52{
53}
54
55#[derive(Debug, Default, PartialEq)]
56pub struct ManagerRegisterWakeWatcherRequest {
57    /// The event that will be signaled when the container's wake status changes.
58    pub watcher: Option<fidl::EventPair>,
59    #[doc(hidden)]
60    pub __source_breaking: fidl::marker::SourceBreaking,
61}
62
63impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
64    for ManagerRegisterWakeWatcherRequest
65{
66}
67
68#[derive(Debug, Default, PartialEq)]
69pub struct ManagerSuspendContainerRequest {
70    /// The job of the container to suspend.
71    pub container_job: Option<fidl::Job>,
72    /// The event that is used to signal whether or not there are any active wake locks
73    /// in the container.
74    pub wake_locks: Option<fidl::EventPair>,
75    #[doc(hidden)]
76    pub __source_breaking: fidl::marker::SourceBreaking,
77}
78
79impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
80    for ManagerSuspendContainerRequest
81{
82}
83
84#[derive(Debug, Default, PartialEq)]
85pub struct PagerRegisterFileResponse {
86    /// A newly created child vmo.
87    pub vmo: Option<fidl::Vmo>,
88    #[doc(hidden)]
89    pub __source_breaking: fidl::marker::SourceBreaking,
90}
91
92impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for PagerRegisterFileResponse {}
93
94#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
95pub struct ManagerMarker;
96
97impl fidl::endpoints::ProtocolMarker for ManagerMarker {
98    type Proxy = ManagerProxy;
99    type RequestStream = ManagerRequestStream;
100    #[cfg(target_os = "fuchsia")]
101    type SynchronousProxy = ManagerSynchronousProxy;
102
103    const DEBUG_NAME: &'static str = "fuchsia.starnix.runner.Manager";
104}
105impl fidl::endpoints::DiscoverableProtocolMarker for ManagerMarker {}
106pub type ManagerSuspendContainerResult = Result<ManagerSuspendContainerResponse, SuspendError>;
107
108pub trait ManagerProxyInterface: Send + Sync {
109    type SuspendContainerResponseFut: std::future::Future<Output = Result<ManagerSuspendContainerResult, fidl::Error>>
110        + Send;
111    fn r#suspend_container(
112        &self,
113        payload: ManagerSuspendContainerRequest,
114    ) -> Self::SuspendContainerResponseFut;
115    fn r#proxy_wake_channel(
116        &self,
117        payload: ManagerProxyWakeChannelRequest,
118    ) -> Result<(), fidl::Error>;
119    type RegisterWakeWatcherResponseFut: std::future::Future<Output = Result<(), fidl::Error>>
120        + Send;
121    fn r#register_wake_watcher(
122        &self,
123        payload: ManagerRegisterWakeWatcherRequest,
124    ) -> Self::RegisterWakeWatcherResponseFut;
125    fn r#create_pager(&self, payload: ManagerCreatePagerRequest) -> Result<(), fidl::Error>;
126}
127#[derive(Debug)]
128#[cfg(target_os = "fuchsia")]
129pub struct ManagerSynchronousProxy {
130    client: fidl::client::sync::Client,
131}
132
133#[cfg(target_os = "fuchsia")]
134impl fidl::endpoints::SynchronousProxy for ManagerSynchronousProxy {
135    type Proxy = ManagerProxy;
136    type Protocol = ManagerMarker;
137
138    fn from_channel(inner: fidl::Channel) -> Self {
139        Self::new(inner)
140    }
141
142    fn into_channel(self) -> fidl::Channel {
143        self.client.into_channel()
144    }
145
146    fn as_channel(&self) -> &fidl::Channel {
147        self.client.as_channel()
148    }
149}
150
151#[cfg(target_os = "fuchsia")]
152impl ManagerSynchronousProxy {
153    pub fn new(channel: fidl::Channel) -> Self {
154        let protocol_name = <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
155        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
156    }
157
158    pub fn into_channel(self) -> fidl::Channel {
159        self.client.into_channel()
160    }
161
162    /// Waits until an event arrives and returns it. It is safe for other
163    /// threads to make concurrent requests while waiting for an event.
164    pub fn wait_for_event(
165        &self,
166        deadline: zx::MonotonicInstant,
167    ) -> Result<ManagerEvent, fidl::Error> {
168        ManagerEvent::decode(self.client.wait_for_event(deadline)?)
169    }
170
171    /// Suspends the container running in `job`.
172    ///
173    /// The call will return successfully when `wake_event` has been signaled. Returns
174    /// an error if `wake_locks` is signaled at the end of suspension, or an error is
175    /// encountered when suspending the container's processes.
176    pub fn r#suspend_container(
177        &self,
178        mut payload: ManagerSuspendContainerRequest,
179        ___deadline: zx::MonotonicInstant,
180    ) -> Result<ManagerSuspendContainerResult, fidl::Error> {
181        let _response = self.client.send_query::<
182            ManagerSuspendContainerRequest,
183            fidl::encoding::FlexibleResultType<ManagerSuspendContainerResponse, SuspendError>,
184        >(
185            &mut payload,
186            0x928527927c9f2a7,
187            fidl::encoding::DynamicFlags::FLEXIBLE,
188            ___deadline,
189        )?
190        .into_result::<ManagerMarker>("suspend_container")?;
191        Ok(_response.map(|x| x))
192    }
193
194    /// Creates a pass-through proxy that forwards messages between the `container_channel` and the
195    /// `remote_channel`.
196    ///
197    /// If any messages arrive on `remote_channel` while the container is suspended via
198    /// `SuspendContainer`, the container will be resumed and `counter` will be incremented.
199    ///
200    /// Once that message is handled by the container, and it's ok to suspend the container again
201    /// (relative to that message), the counter is expected to be decremented.
202    pub fn r#proxy_wake_channel(
203        &self,
204        mut payload: ManagerProxyWakeChannelRequest,
205    ) -> Result<(), fidl::Error> {
206        self.client.send::<ManagerProxyWakeChannelRequest>(
207            &mut payload,
208            0x46a374ab73b23714,
209            fidl::encoding::DynamicFlags::FLEXIBLE,
210        )
211    }
212
213    /// Registers an eventpair that will be signaled when the container is suspended or resumed.
214    /// The signals are ASLEEP(USER_1) and AWAKE(USER_0).
215    ///
216    /// The kernel returns AWAKE upon initial registration of the eventpair.
217    pub fn r#register_wake_watcher(
218        &self,
219        mut payload: ManagerRegisterWakeWatcherRequest,
220        ___deadline: zx::MonotonicInstant,
221    ) -> Result<(), fidl::Error> {
222        let _response = self.client.send_query::<
223            ManagerRegisterWakeWatcherRequest,
224            fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
225        >(
226            &mut payload,
227            0x456d74519eb65b41,
228            fidl::encoding::DynamicFlags::FLEXIBLE,
229            ___deadline,
230        )?
231        .into_result::<ManagerMarker>("register_wake_watcher")?;
232        Ok(_response)
233    }
234
235    /// Creates a `Pager` instance with the provided `backing_vmo` and `block_size`.
236    pub fn r#create_pager(
237        &self,
238        mut payload: ManagerCreatePagerRequest,
239    ) -> Result<(), fidl::Error> {
240        self.client.send::<ManagerCreatePagerRequest>(
241            &mut payload,
242            0x49d14958b736198b,
243            fidl::encoding::DynamicFlags::FLEXIBLE,
244        )
245    }
246}
247
248#[cfg(target_os = "fuchsia")]
249impl From<ManagerSynchronousProxy> for zx::Handle {
250    fn from(value: ManagerSynchronousProxy) -> Self {
251        value.into_channel().into()
252    }
253}
254
255#[cfg(target_os = "fuchsia")]
256impl From<fidl::Channel> for ManagerSynchronousProxy {
257    fn from(value: fidl::Channel) -> Self {
258        Self::new(value)
259    }
260}
261
262#[cfg(target_os = "fuchsia")]
263impl fidl::endpoints::FromClient for ManagerSynchronousProxy {
264    type Protocol = ManagerMarker;
265
266    fn from_client(value: fidl::endpoints::ClientEnd<ManagerMarker>) -> Self {
267        Self::new(value.into_channel())
268    }
269}
270
271#[derive(Debug, Clone)]
272pub struct ManagerProxy {
273    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
274}
275
276impl fidl::endpoints::Proxy for ManagerProxy {
277    type Protocol = ManagerMarker;
278
279    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
280        Self::new(inner)
281    }
282
283    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
284        self.client.into_channel().map_err(|client| Self { client })
285    }
286
287    fn as_channel(&self) -> &::fidl::AsyncChannel {
288        self.client.as_channel()
289    }
290}
291
292impl ManagerProxy {
293    /// Create a new Proxy for fuchsia.starnix.runner/Manager.
294    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
295        let protocol_name = <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
296        Self { client: fidl::client::Client::new(channel, protocol_name) }
297    }
298
299    /// Get a Stream of events from the remote end of the protocol.
300    ///
301    /// # Panics
302    ///
303    /// Panics if the event stream was already taken.
304    pub fn take_event_stream(&self) -> ManagerEventStream {
305        ManagerEventStream { event_receiver: self.client.take_event_receiver() }
306    }
307
308    /// Suspends the container running in `job`.
309    ///
310    /// The call will return successfully when `wake_event` has been signaled. Returns
311    /// an error if `wake_locks` is signaled at the end of suspension, or an error is
312    /// encountered when suspending the container's processes.
313    pub fn r#suspend_container(
314        &self,
315        mut payload: ManagerSuspendContainerRequest,
316    ) -> fidl::client::QueryResponseFut<
317        ManagerSuspendContainerResult,
318        fidl::encoding::DefaultFuchsiaResourceDialect,
319    > {
320        ManagerProxyInterface::r#suspend_container(self, payload)
321    }
322
323    /// Creates a pass-through proxy that forwards messages between the `container_channel` and the
324    /// `remote_channel`.
325    ///
326    /// If any messages arrive on `remote_channel` while the container is suspended via
327    /// `SuspendContainer`, the container will be resumed and `counter` will be incremented.
328    ///
329    /// Once that message is handled by the container, and it's ok to suspend the container again
330    /// (relative to that message), the counter is expected to be decremented.
331    pub fn r#proxy_wake_channel(
332        &self,
333        mut payload: ManagerProxyWakeChannelRequest,
334    ) -> Result<(), fidl::Error> {
335        ManagerProxyInterface::r#proxy_wake_channel(self, payload)
336    }
337
338    /// Registers an eventpair that will be signaled when the container is suspended or resumed.
339    /// The signals are ASLEEP(USER_1) and AWAKE(USER_0).
340    ///
341    /// The kernel returns AWAKE upon initial registration of the eventpair.
342    pub fn r#register_wake_watcher(
343        &self,
344        mut payload: ManagerRegisterWakeWatcherRequest,
345    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
346        ManagerProxyInterface::r#register_wake_watcher(self, payload)
347    }
348
349    /// Creates a `Pager` instance with the provided `backing_vmo` and `block_size`.
350    pub fn r#create_pager(
351        &self,
352        mut payload: ManagerCreatePagerRequest,
353    ) -> Result<(), fidl::Error> {
354        ManagerProxyInterface::r#create_pager(self, payload)
355    }
356}
357
358impl ManagerProxyInterface for ManagerProxy {
359    type SuspendContainerResponseFut = fidl::client::QueryResponseFut<
360        ManagerSuspendContainerResult,
361        fidl::encoding::DefaultFuchsiaResourceDialect,
362    >;
363    fn r#suspend_container(
364        &self,
365        mut payload: ManagerSuspendContainerRequest,
366    ) -> Self::SuspendContainerResponseFut {
367        fn _decode(
368            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
369        ) -> Result<ManagerSuspendContainerResult, fidl::Error> {
370            let _response = fidl::client::decode_transaction_body::<
371                fidl::encoding::FlexibleResultType<ManagerSuspendContainerResponse, SuspendError>,
372                fidl::encoding::DefaultFuchsiaResourceDialect,
373                0x928527927c9f2a7,
374            >(_buf?)?
375            .into_result::<ManagerMarker>("suspend_container")?;
376            Ok(_response.map(|x| x))
377        }
378        self.client
379            .send_query_and_decode::<ManagerSuspendContainerRequest, ManagerSuspendContainerResult>(
380                &mut payload,
381                0x928527927c9f2a7,
382                fidl::encoding::DynamicFlags::FLEXIBLE,
383                _decode,
384            )
385    }
386
387    fn r#proxy_wake_channel(
388        &self,
389        mut payload: ManagerProxyWakeChannelRequest,
390    ) -> Result<(), fidl::Error> {
391        self.client.send::<ManagerProxyWakeChannelRequest>(
392            &mut payload,
393            0x46a374ab73b23714,
394            fidl::encoding::DynamicFlags::FLEXIBLE,
395        )
396    }
397
398    type RegisterWakeWatcherResponseFut =
399        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
400    fn r#register_wake_watcher(
401        &self,
402        mut payload: ManagerRegisterWakeWatcherRequest,
403    ) -> Self::RegisterWakeWatcherResponseFut {
404        fn _decode(
405            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
406        ) -> Result<(), fidl::Error> {
407            let _response = fidl::client::decode_transaction_body::<
408                fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
409                fidl::encoding::DefaultFuchsiaResourceDialect,
410                0x456d74519eb65b41,
411            >(_buf?)?
412            .into_result::<ManagerMarker>("register_wake_watcher")?;
413            Ok(_response)
414        }
415        self.client.send_query_and_decode::<ManagerRegisterWakeWatcherRequest, ()>(
416            &mut payload,
417            0x456d74519eb65b41,
418            fidl::encoding::DynamicFlags::FLEXIBLE,
419            _decode,
420        )
421    }
422
423    fn r#create_pager(&self, mut payload: ManagerCreatePagerRequest) -> Result<(), fidl::Error> {
424        self.client.send::<ManagerCreatePagerRequest>(
425            &mut payload,
426            0x49d14958b736198b,
427            fidl::encoding::DynamicFlags::FLEXIBLE,
428        )
429    }
430}
431
432pub struct ManagerEventStream {
433    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
434}
435
436impl std::marker::Unpin for ManagerEventStream {}
437
438impl futures::stream::FusedStream for ManagerEventStream {
439    fn is_terminated(&self) -> bool {
440        self.event_receiver.is_terminated()
441    }
442}
443
444impl futures::Stream for ManagerEventStream {
445    type Item = Result<ManagerEvent, fidl::Error>;
446
447    fn poll_next(
448        mut self: std::pin::Pin<&mut Self>,
449        cx: &mut std::task::Context<'_>,
450    ) -> std::task::Poll<Option<Self::Item>> {
451        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
452            &mut self.event_receiver,
453            cx
454        )?) {
455            Some(buf) => std::task::Poll::Ready(Some(ManagerEvent::decode(buf))),
456            None => std::task::Poll::Ready(None),
457        }
458    }
459}
460
461#[derive(Debug)]
462pub enum ManagerEvent {
463    #[non_exhaustive]
464    _UnknownEvent {
465        /// Ordinal of the event that was sent.
466        ordinal: u64,
467    },
468}
469
470impl ManagerEvent {
471    /// Decodes a message buffer as a [`ManagerEvent`].
472    fn decode(
473        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
474    ) -> Result<ManagerEvent, fidl::Error> {
475        let (bytes, _handles) = buf.split_mut();
476        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
477        debug_assert_eq!(tx_header.tx_id, 0);
478        match tx_header.ordinal {
479            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
480                Ok(ManagerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
481            }
482            _ => Err(fidl::Error::UnknownOrdinal {
483                ordinal: tx_header.ordinal,
484                protocol_name: <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
485            }),
486        }
487    }
488}
489
490/// A Stream of incoming requests for fuchsia.starnix.runner/Manager.
491pub struct ManagerRequestStream {
492    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
493    is_terminated: bool,
494}
495
496impl std::marker::Unpin for ManagerRequestStream {}
497
498impl futures::stream::FusedStream for ManagerRequestStream {
499    fn is_terminated(&self) -> bool {
500        self.is_terminated
501    }
502}
503
504impl fidl::endpoints::RequestStream for ManagerRequestStream {
505    type Protocol = ManagerMarker;
506    type ControlHandle = ManagerControlHandle;
507
508    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
509        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
510    }
511
512    fn control_handle(&self) -> Self::ControlHandle {
513        ManagerControlHandle { inner: self.inner.clone() }
514    }
515
516    fn into_inner(
517        self,
518    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
519    {
520        (self.inner, self.is_terminated)
521    }
522
523    fn from_inner(
524        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
525        is_terminated: bool,
526    ) -> Self {
527        Self { inner, is_terminated }
528    }
529}
530
531impl futures::Stream for ManagerRequestStream {
532    type Item = Result<ManagerRequest, fidl::Error>;
533
534    fn poll_next(
535        mut self: std::pin::Pin<&mut Self>,
536        cx: &mut std::task::Context<'_>,
537    ) -> std::task::Poll<Option<Self::Item>> {
538        let this = &mut *self;
539        if this.inner.check_shutdown(cx) {
540            this.is_terminated = true;
541            return std::task::Poll::Ready(None);
542        }
543        if this.is_terminated {
544            panic!("polled ManagerRequestStream after completion");
545        }
546        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
547            |bytes, handles| {
548                match this.inner.channel().read_etc(cx, bytes, handles) {
549                    std::task::Poll::Ready(Ok(())) => {}
550                    std::task::Poll::Pending => return std::task::Poll::Pending,
551                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
552                        this.is_terminated = true;
553                        return std::task::Poll::Ready(None);
554                    }
555                    std::task::Poll::Ready(Err(e)) => {
556                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
557                            e.into(),
558                        ))))
559                    }
560                }
561
562                // A message has been received from the channel
563                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
564
565                std::task::Poll::Ready(Some(match header.ordinal {
566                    0x928527927c9f2a7 => {
567                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
568                        let mut req = fidl::new_empty!(
569                            ManagerSuspendContainerRequest,
570                            fidl::encoding::DefaultFuchsiaResourceDialect
571                        );
572                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerSuspendContainerRequest>(&header, _body_bytes, handles, &mut req)?;
573                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
574                        Ok(ManagerRequest::SuspendContainer {
575                            payload: req,
576                            responder: ManagerSuspendContainerResponder {
577                                control_handle: std::mem::ManuallyDrop::new(control_handle),
578                                tx_id: header.tx_id,
579                            },
580                        })
581                    }
582                    0x46a374ab73b23714 => {
583                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
584                        let mut req = fidl::new_empty!(
585                            ManagerProxyWakeChannelRequest,
586                            fidl::encoding::DefaultFuchsiaResourceDialect
587                        );
588                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerProxyWakeChannelRequest>(&header, _body_bytes, handles, &mut req)?;
589                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
590                        Ok(ManagerRequest::ProxyWakeChannel { payload: req, control_handle })
591                    }
592                    0x456d74519eb65b41 => {
593                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
594                        let mut req = fidl::new_empty!(
595                            ManagerRegisterWakeWatcherRequest,
596                            fidl::encoding::DefaultFuchsiaResourceDialect
597                        );
598                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerRegisterWakeWatcherRequest>(&header, _body_bytes, handles, &mut req)?;
599                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
600                        Ok(ManagerRequest::RegisterWakeWatcher {
601                            payload: req,
602                            responder: ManagerRegisterWakeWatcherResponder {
603                                control_handle: std::mem::ManuallyDrop::new(control_handle),
604                                tx_id: header.tx_id,
605                            },
606                        })
607                    }
608                    0x49d14958b736198b => {
609                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
610                        let mut req = fidl::new_empty!(
611                            ManagerCreatePagerRequest,
612                            fidl::encoding::DefaultFuchsiaResourceDialect
613                        );
614                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerCreatePagerRequest>(&header, _body_bytes, handles, &mut req)?;
615                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
616                        Ok(ManagerRequest::CreatePager { payload: req, control_handle })
617                    }
618                    _ if header.tx_id == 0
619                        && header
620                            .dynamic_flags()
621                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
622                    {
623                        Ok(ManagerRequest::_UnknownMethod {
624                            ordinal: header.ordinal,
625                            control_handle: ManagerControlHandle { inner: this.inner.clone() },
626                            method_type: fidl::MethodType::OneWay,
627                        })
628                    }
629                    _ if header
630                        .dynamic_flags()
631                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
632                    {
633                        this.inner.send_framework_err(
634                            fidl::encoding::FrameworkErr::UnknownMethod,
635                            header.tx_id,
636                            header.ordinal,
637                            header.dynamic_flags(),
638                            (bytes, handles),
639                        )?;
640                        Ok(ManagerRequest::_UnknownMethod {
641                            ordinal: header.ordinal,
642                            control_handle: ManagerControlHandle { inner: this.inner.clone() },
643                            method_type: fidl::MethodType::TwoWay,
644                        })
645                    }
646                    _ => Err(fidl::Error::UnknownOrdinal {
647                        ordinal: header.ordinal,
648                        protocol_name:
649                            <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
650                    }),
651                }))
652            },
653        )
654    }
655}
656
657#[derive(Debug)]
658pub enum ManagerRequest {
659    /// Suspends the container running in `job`.
660    ///
661    /// The call will return successfully when `wake_event` has been signaled. Returns
662    /// an error if `wake_locks` is signaled at the end of suspension, or an error is
663    /// encountered when suspending the container's processes.
664    SuspendContainer {
665        payload: ManagerSuspendContainerRequest,
666        responder: ManagerSuspendContainerResponder,
667    },
668    /// Creates a pass-through proxy that forwards messages between the `container_channel` and the
669    /// `remote_channel`.
670    ///
671    /// If any messages arrive on `remote_channel` while the container is suspended via
672    /// `SuspendContainer`, the container will be resumed and `counter` will be incremented.
673    ///
674    /// Once that message is handled by the container, and it's ok to suspend the container again
675    /// (relative to that message), the counter is expected to be decremented.
676    ProxyWakeChannel {
677        payload: ManagerProxyWakeChannelRequest,
678        control_handle: ManagerControlHandle,
679    },
680    /// Registers an eventpair that will be signaled when the container is suspended or resumed.
681    /// The signals are ASLEEP(USER_1) and AWAKE(USER_0).
682    ///
683    /// The kernel returns AWAKE upon initial registration of the eventpair.
684    RegisterWakeWatcher {
685        payload: ManagerRegisterWakeWatcherRequest,
686        responder: ManagerRegisterWakeWatcherResponder,
687    },
688    /// Creates a `Pager` instance with the provided `backing_vmo` and `block_size`.
689    CreatePager { payload: ManagerCreatePagerRequest, control_handle: ManagerControlHandle },
690    /// An interaction was received which does not match any known method.
691    #[non_exhaustive]
692    _UnknownMethod {
693        /// Ordinal of the method that was called.
694        ordinal: u64,
695        control_handle: ManagerControlHandle,
696        method_type: fidl::MethodType,
697    },
698}
699
700impl ManagerRequest {
701    #[allow(irrefutable_let_patterns)]
702    pub fn into_suspend_container(
703        self,
704    ) -> Option<(ManagerSuspendContainerRequest, ManagerSuspendContainerResponder)> {
705        if let ManagerRequest::SuspendContainer { payload, responder } = self {
706            Some((payload, responder))
707        } else {
708            None
709        }
710    }
711
712    #[allow(irrefutable_let_patterns)]
713    pub fn into_proxy_wake_channel(
714        self,
715    ) -> Option<(ManagerProxyWakeChannelRequest, ManagerControlHandle)> {
716        if let ManagerRequest::ProxyWakeChannel { payload, control_handle } = self {
717            Some((payload, control_handle))
718        } else {
719            None
720        }
721    }
722
723    #[allow(irrefutable_let_patterns)]
724    pub fn into_register_wake_watcher(
725        self,
726    ) -> Option<(ManagerRegisterWakeWatcherRequest, ManagerRegisterWakeWatcherResponder)> {
727        if let ManagerRequest::RegisterWakeWatcher { payload, responder } = self {
728            Some((payload, responder))
729        } else {
730            None
731        }
732    }
733
734    #[allow(irrefutable_let_patterns)]
735    pub fn into_create_pager(self) -> Option<(ManagerCreatePagerRequest, ManagerControlHandle)> {
736        if let ManagerRequest::CreatePager { payload, control_handle } = self {
737            Some((payload, control_handle))
738        } else {
739            None
740        }
741    }
742
743    /// Name of the method defined in FIDL
744    pub fn method_name(&self) -> &'static str {
745        match *self {
746            ManagerRequest::SuspendContainer { .. } => "suspend_container",
747            ManagerRequest::ProxyWakeChannel { .. } => "proxy_wake_channel",
748            ManagerRequest::RegisterWakeWatcher { .. } => "register_wake_watcher",
749            ManagerRequest::CreatePager { .. } => "create_pager",
750            ManagerRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
751                "unknown one-way method"
752            }
753            ManagerRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
754                "unknown two-way method"
755            }
756        }
757    }
758}
759
760#[derive(Debug, Clone)]
761pub struct ManagerControlHandle {
762    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
763}
764
765impl fidl::endpoints::ControlHandle for ManagerControlHandle {
766    fn shutdown(&self) {
767        self.inner.shutdown()
768    }
769    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
770        self.inner.shutdown_with_epitaph(status)
771    }
772
773    fn is_closed(&self) -> bool {
774        self.inner.channel().is_closed()
775    }
776    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
777        self.inner.channel().on_closed()
778    }
779
780    #[cfg(target_os = "fuchsia")]
781    fn signal_peer(
782        &self,
783        clear_mask: zx::Signals,
784        set_mask: zx::Signals,
785    ) -> Result<(), zx_status::Status> {
786        use fidl::Peered;
787        self.inner.channel().signal_peer(clear_mask, set_mask)
788    }
789}
790
791impl ManagerControlHandle {}
792
793#[must_use = "FIDL methods require a response to be sent"]
794#[derive(Debug)]
795pub struct ManagerSuspendContainerResponder {
796    control_handle: std::mem::ManuallyDrop<ManagerControlHandle>,
797    tx_id: u32,
798}
799
800/// Set the the channel to be shutdown (see [`ManagerControlHandle::shutdown`])
801/// if the responder is dropped without sending a response, so that the client
802/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
803impl std::ops::Drop for ManagerSuspendContainerResponder {
804    fn drop(&mut self) {
805        self.control_handle.shutdown();
806        // Safety: drops once, never accessed again
807        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
808    }
809}
810
811impl fidl::endpoints::Responder for ManagerSuspendContainerResponder {
812    type ControlHandle = ManagerControlHandle;
813
814    fn control_handle(&self) -> &ManagerControlHandle {
815        &self.control_handle
816    }
817
818    fn drop_without_shutdown(mut self) {
819        // Safety: drops once, never accessed again due to mem::forget
820        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
821        // Prevent Drop from running (which would shut down the channel)
822        std::mem::forget(self);
823    }
824}
825
826impl ManagerSuspendContainerResponder {
827    /// Sends a response to the FIDL transaction.
828    ///
829    /// Sets the channel to shutdown if an error occurs.
830    pub fn send(
831        self,
832        mut result: Result<&ManagerSuspendContainerResponse, SuspendError>,
833    ) -> Result<(), fidl::Error> {
834        let _result = self.send_raw(result);
835        if _result.is_err() {
836            self.control_handle.shutdown();
837        }
838        self.drop_without_shutdown();
839        _result
840    }
841
842    /// Similar to "send" but does not shutdown the channel if an error occurs.
843    pub fn send_no_shutdown_on_err(
844        self,
845        mut result: Result<&ManagerSuspendContainerResponse, SuspendError>,
846    ) -> Result<(), fidl::Error> {
847        let _result = self.send_raw(result);
848        self.drop_without_shutdown();
849        _result
850    }
851
852    fn send_raw(
853        &self,
854        mut result: Result<&ManagerSuspendContainerResponse, SuspendError>,
855    ) -> Result<(), fidl::Error> {
856        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
857            ManagerSuspendContainerResponse,
858            SuspendError,
859        >>(
860            fidl::encoding::FlexibleResult::new(result),
861            self.tx_id,
862            0x928527927c9f2a7,
863            fidl::encoding::DynamicFlags::FLEXIBLE,
864        )
865    }
866}
867
868#[must_use = "FIDL methods require a response to be sent"]
869#[derive(Debug)]
870pub struct ManagerRegisterWakeWatcherResponder {
871    control_handle: std::mem::ManuallyDrop<ManagerControlHandle>,
872    tx_id: u32,
873}
874
875/// Set the the channel to be shutdown (see [`ManagerControlHandle::shutdown`])
876/// if the responder is dropped without sending a response, so that the client
877/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
878impl std::ops::Drop for ManagerRegisterWakeWatcherResponder {
879    fn drop(&mut self) {
880        self.control_handle.shutdown();
881        // Safety: drops once, never accessed again
882        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
883    }
884}
885
886impl fidl::endpoints::Responder for ManagerRegisterWakeWatcherResponder {
887    type ControlHandle = ManagerControlHandle;
888
889    fn control_handle(&self) -> &ManagerControlHandle {
890        &self.control_handle
891    }
892
893    fn drop_without_shutdown(mut self) {
894        // Safety: drops once, never accessed again due to mem::forget
895        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
896        // Prevent Drop from running (which would shut down the channel)
897        std::mem::forget(self);
898    }
899}
900
901impl ManagerRegisterWakeWatcherResponder {
902    /// Sends a response to the FIDL transaction.
903    ///
904    /// Sets the channel to shutdown if an error occurs.
905    pub fn send(self) -> Result<(), fidl::Error> {
906        let _result = self.send_raw();
907        if _result.is_err() {
908            self.control_handle.shutdown();
909        }
910        self.drop_without_shutdown();
911        _result
912    }
913
914    /// Similar to "send" but does not shutdown the channel if an error occurs.
915    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
916        let _result = self.send_raw();
917        self.drop_without_shutdown();
918        _result
919    }
920
921    fn send_raw(&self) -> Result<(), fidl::Error> {
922        self.control_handle.inner.send::<fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>>(
923            fidl::encoding::Flexible::new(()),
924            self.tx_id,
925            0x456d74519eb65b41,
926            fidl::encoding::DynamicFlags::FLEXIBLE,
927        )
928    }
929}
930
931#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
932pub struct PagerMarker;
933
934impl fidl::endpoints::ProtocolMarker for PagerMarker {
935    type Proxy = PagerProxy;
936    type RequestStream = PagerRequestStream;
937    #[cfg(target_os = "fuchsia")]
938    type SynchronousProxy = PagerSynchronousProxy;
939
940    const DEBUG_NAME: &'static str = "(anonymous) Pager";
941}
942pub type PagerRegisterFileResult = Result<PagerRegisterFileResponse, i32>;
943
944pub trait PagerProxyInterface: Send + Sync {
945    type RegisterFileResponseFut: std::future::Future<Output = Result<PagerRegisterFileResult, fidl::Error>>
946        + Send;
947    fn r#register_file(&self, payload: &PagerRegisterFileRequest) -> Self::RegisterFileResponseFut;
948}
949#[derive(Debug)]
950#[cfg(target_os = "fuchsia")]
951pub struct PagerSynchronousProxy {
952    client: fidl::client::sync::Client,
953}
954
955#[cfg(target_os = "fuchsia")]
956impl fidl::endpoints::SynchronousProxy for PagerSynchronousProxy {
957    type Proxy = PagerProxy;
958    type Protocol = PagerMarker;
959
960    fn from_channel(inner: fidl::Channel) -> Self {
961        Self::new(inner)
962    }
963
964    fn into_channel(self) -> fidl::Channel {
965        self.client.into_channel()
966    }
967
968    fn as_channel(&self) -> &fidl::Channel {
969        self.client.as_channel()
970    }
971}
972
973#[cfg(target_os = "fuchsia")]
974impl PagerSynchronousProxy {
975    pub fn new(channel: fidl::Channel) -> Self {
976        let protocol_name = <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
977        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
978    }
979
980    pub fn into_channel(self) -> fidl::Channel {
981        self.client.into_channel()
982    }
983
984    /// Waits until an event arrives and returns it. It is safe for other
985    /// threads to make concurrent requests while waiting for an event.
986    pub fn wait_for_event(
987        &self,
988        deadline: zx::MonotonicInstant,
989    ) -> Result<PagerEvent, fidl::Error> {
990        PagerEvent::decode(self.client.wait_for_event(deadline)?)
991    }
992
993    /// Registers a file with the pager.
994    pub fn r#register_file(
995        &self,
996        mut payload: &PagerRegisterFileRequest,
997        ___deadline: zx::MonotonicInstant,
998    ) -> Result<PagerRegisterFileResult, fidl::Error> {
999        let _response = self.client.send_query::<
1000            PagerRegisterFileRequest,
1001            fidl::encoding::FlexibleResultType<PagerRegisterFileResponse, i32>,
1002        >(
1003            payload,
1004            0x4f85a2ce6cae4aed,
1005            fidl::encoding::DynamicFlags::FLEXIBLE,
1006            ___deadline,
1007        )?
1008        .into_result::<PagerMarker>("register_file")?;
1009        Ok(_response.map(|x| x))
1010    }
1011}
1012
1013#[cfg(target_os = "fuchsia")]
1014impl From<PagerSynchronousProxy> for zx::Handle {
1015    fn from(value: PagerSynchronousProxy) -> Self {
1016        value.into_channel().into()
1017    }
1018}
1019
1020#[cfg(target_os = "fuchsia")]
1021impl From<fidl::Channel> for PagerSynchronousProxy {
1022    fn from(value: fidl::Channel) -> Self {
1023        Self::new(value)
1024    }
1025}
1026
1027#[cfg(target_os = "fuchsia")]
1028impl fidl::endpoints::FromClient for PagerSynchronousProxy {
1029    type Protocol = PagerMarker;
1030
1031    fn from_client(value: fidl::endpoints::ClientEnd<PagerMarker>) -> Self {
1032        Self::new(value.into_channel())
1033    }
1034}
1035
1036#[derive(Debug, Clone)]
1037pub struct PagerProxy {
1038    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1039}
1040
1041impl fidl::endpoints::Proxy for PagerProxy {
1042    type Protocol = PagerMarker;
1043
1044    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1045        Self::new(inner)
1046    }
1047
1048    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1049        self.client.into_channel().map_err(|client| Self { client })
1050    }
1051
1052    fn as_channel(&self) -> &::fidl::AsyncChannel {
1053        self.client.as_channel()
1054    }
1055}
1056
1057impl PagerProxy {
1058    /// Create a new Proxy for fuchsia.starnix.runner/Pager.
1059    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1060        let protocol_name = <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1061        Self { client: fidl::client::Client::new(channel, protocol_name) }
1062    }
1063
1064    /// Get a Stream of events from the remote end of the protocol.
1065    ///
1066    /// # Panics
1067    ///
1068    /// Panics if the event stream was already taken.
1069    pub fn take_event_stream(&self) -> PagerEventStream {
1070        PagerEventStream { event_receiver: self.client.take_event_receiver() }
1071    }
1072
1073    /// Registers a file with the pager.
1074    pub fn r#register_file(
1075        &self,
1076        mut payload: &PagerRegisterFileRequest,
1077    ) -> fidl::client::QueryResponseFut<
1078        PagerRegisterFileResult,
1079        fidl::encoding::DefaultFuchsiaResourceDialect,
1080    > {
1081        PagerProxyInterface::r#register_file(self, payload)
1082    }
1083}
1084
1085impl PagerProxyInterface for PagerProxy {
1086    type RegisterFileResponseFut = fidl::client::QueryResponseFut<
1087        PagerRegisterFileResult,
1088        fidl::encoding::DefaultFuchsiaResourceDialect,
1089    >;
1090    fn r#register_file(
1091        &self,
1092        mut payload: &PagerRegisterFileRequest,
1093    ) -> Self::RegisterFileResponseFut {
1094        fn _decode(
1095            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1096        ) -> Result<PagerRegisterFileResult, fidl::Error> {
1097            let _response = fidl::client::decode_transaction_body::<
1098                fidl::encoding::FlexibleResultType<PagerRegisterFileResponse, i32>,
1099                fidl::encoding::DefaultFuchsiaResourceDialect,
1100                0x4f85a2ce6cae4aed,
1101            >(_buf?)?
1102            .into_result::<PagerMarker>("register_file")?;
1103            Ok(_response.map(|x| x))
1104        }
1105        self.client.send_query_and_decode::<PagerRegisterFileRequest, PagerRegisterFileResult>(
1106            payload,
1107            0x4f85a2ce6cae4aed,
1108            fidl::encoding::DynamicFlags::FLEXIBLE,
1109            _decode,
1110        )
1111    }
1112}
1113
1114pub struct PagerEventStream {
1115    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1116}
1117
1118impl std::marker::Unpin for PagerEventStream {}
1119
1120impl futures::stream::FusedStream for PagerEventStream {
1121    fn is_terminated(&self) -> bool {
1122        self.event_receiver.is_terminated()
1123    }
1124}
1125
1126impl futures::Stream for PagerEventStream {
1127    type Item = Result<PagerEvent, fidl::Error>;
1128
1129    fn poll_next(
1130        mut self: std::pin::Pin<&mut Self>,
1131        cx: &mut std::task::Context<'_>,
1132    ) -> std::task::Poll<Option<Self::Item>> {
1133        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1134            &mut self.event_receiver,
1135            cx
1136        )?) {
1137            Some(buf) => std::task::Poll::Ready(Some(PagerEvent::decode(buf))),
1138            None => std::task::Poll::Ready(None),
1139        }
1140    }
1141}
1142
1143#[derive(Debug)]
1144pub enum PagerEvent {
1145    #[non_exhaustive]
1146    _UnknownEvent {
1147        /// Ordinal of the event that was sent.
1148        ordinal: u64,
1149    },
1150}
1151
1152impl PagerEvent {
1153    /// Decodes a message buffer as a [`PagerEvent`].
1154    fn decode(
1155        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1156    ) -> Result<PagerEvent, fidl::Error> {
1157        let (bytes, _handles) = buf.split_mut();
1158        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1159        debug_assert_eq!(tx_header.tx_id, 0);
1160        match tx_header.ordinal {
1161            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1162                Ok(PagerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1163            }
1164            _ => Err(fidl::Error::UnknownOrdinal {
1165                ordinal: tx_header.ordinal,
1166                protocol_name: <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1167            }),
1168        }
1169    }
1170}
1171
1172/// A Stream of incoming requests for fuchsia.starnix.runner/Pager.
1173pub struct PagerRequestStream {
1174    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1175    is_terminated: bool,
1176}
1177
1178impl std::marker::Unpin for PagerRequestStream {}
1179
1180impl futures::stream::FusedStream for PagerRequestStream {
1181    fn is_terminated(&self) -> bool {
1182        self.is_terminated
1183    }
1184}
1185
1186impl fidl::endpoints::RequestStream for PagerRequestStream {
1187    type Protocol = PagerMarker;
1188    type ControlHandle = PagerControlHandle;
1189
1190    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1191        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1192    }
1193
1194    fn control_handle(&self) -> Self::ControlHandle {
1195        PagerControlHandle { inner: self.inner.clone() }
1196    }
1197
1198    fn into_inner(
1199        self,
1200    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1201    {
1202        (self.inner, self.is_terminated)
1203    }
1204
1205    fn from_inner(
1206        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1207        is_terminated: bool,
1208    ) -> Self {
1209        Self { inner, is_terminated }
1210    }
1211}
1212
1213impl futures::Stream for PagerRequestStream {
1214    type Item = Result<PagerRequest, fidl::Error>;
1215
1216    fn poll_next(
1217        mut self: std::pin::Pin<&mut Self>,
1218        cx: &mut std::task::Context<'_>,
1219    ) -> std::task::Poll<Option<Self::Item>> {
1220        let this = &mut *self;
1221        if this.inner.check_shutdown(cx) {
1222            this.is_terminated = true;
1223            return std::task::Poll::Ready(None);
1224        }
1225        if this.is_terminated {
1226            panic!("polled PagerRequestStream after completion");
1227        }
1228        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1229            |bytes, handles| {
1230                match this.inner.channel().read_etc(cx, bytes, handles) {
1231                    std::task::Poll::Ready(Ok(())) => {}
1232                    std::task::Poll::Pending => return std::task::Poll::Pending,
1233                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1234                        this.is_terminated = true;
1235                        return std::task::Poll::Ready(None);
1236                    }
1237                    std::task::Poll::Ready(Err(e)) => {
1238                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1239                            e.into(),
1240                        ))))
1241                    }
1242                }
1243
1244                // A message has been received from the channel
1245                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1246
1247                std::task::Poll::Ready(Some(match header.ordinal {
1248                    0x4f85a2ce6cae4aed => {
1249                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1250                        let mut req = fidl::new_empty!(
1251                            PagerRegisterFileRequest,
1252                            fidl::encoding::DefaultFuchsiaResourceDialect
1253                        );
1254                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PagerRegisterFileRequest>(&header, _body_bytes, handles, &mut req)?;
1255                        let control_handle = PagerControlHandle { inner: this.inner.clone() };
1256                        Ok(PagerRequest::RegisterFile {
1257                            payload: req,
1258                            responder: PagerRegisterFileResponder {
1259                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1260                                tx_id: header.tx_id,
1261                            },
1262                        })
1263                    }
1264                    _ if header.tx_id == 0
1265                        && header
1266                            .dynamic_flags()
1267                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1268                    {
1269                        Ok(PagerRequest::_UnknownMethod {
1270                            ordinal: header.ordinal,
1271                            control_handle: PagerControlHandle { inner: this.inner.clone() },
1272                            method_type: fidl::MethodType::OneWay,
1273                        })
1274                    }
1275                    _ if header
1276                        .dynamic_flags()
1277                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1278                    {
1279                        this.inner.send_framework_err(
1280                            fidl::encoding::FrameworkErr::UnknownMethod,
1281                            header.tx_id,
1282                            header.ordinal,
1283                            header.dynamic_flags(),
1284                            (bytes, handles),
1285                        )?;
1286                        Ok(PagerRequest::_UnknownMethod {
1287                            ordinal: header.ordinal,
1288                            control_handle: PagerControlHandle { inner: this.inner.clone() },
1289                            method_type: fidl::MethodType::TwoWay,
1290                        })
1291                    }
1292                    _ => Err(fidl::Error::UnknownOrdinal {
1293                        ordinal: header.ordinal,
1294                        protocol_name: <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1295                    }),
1296                }))
1297            },
1298        )
1299    }
1300}
1301
1302#[derive(Debug)]
1303pub enum PagerRequest {
1304    /// Registers a file with the pager.
1305    RegisterFile { payload: PagerRegisterFileRequest, responder: PagerRegisterFileResponder },
1306    /// An interaction was received which does not match any known method.
1307    #[non_exhaustive]
1308    _UnknownMethod {
1309        /// Ordinal of the method that was called.
1310        ordinal: u64,
1311        control_handle: PagerControlHandle,
1312        method_type: fidl::MethodType,
1313    },
1314}
1315
1316impl PagerRequest {
1317    #[allow(irrefutable_let_patterns)]
1318    pub fn into_register_file(
1319        self,
1320    ) -> Option<(PagerRegisterFileRequest, PagerRegisterFileResponder)> {
1321        if let PagerRequest::RegisterFile { payload, responder } = self {
1322            Some((payload, responder))
1323        } else {
1324            None
1325        }
1326    }
1327
1328    /// Name of the method defined in FIDL
1329    pub fn method_name(&self) -> &'static str {
1330        match *self {
1331            PagerRequest::RegisterFile { .. } => "register_file",
1332            PagerRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
1333                "unknown one-way method"
1334            }
1335            PagerRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
1336                "unknown two-way method"
1337            }
1338        }
1339    }
1340}
1341
1342#[derive(Debug, Clone)]
1343pub struct PagerControlHandle {
1344    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1345}
1346
1347impl fidl::endpoints::ControlHandle for PagerControlHandle {
1348    fn shutdown(&self) {
1349        self.inner.shutdown()
1350    }
1351    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1352        self.inner.shutdown_with_epitaph(status)
1353    }
1354
1355    fn is_closed(&self) -> bool {
1356        self.inner.channel().is_closed()
1357    }
1358    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1359        self.inner.channel().on_closed()
1360    }
1361
1362    #[cfg(target_os = "fuchsia")]
1363    fn signal_peer(
1364        &self,
1365        clear_mask: zx::Signals,
1366        set_mask: zx::Signals,
1367    ) -> Result<(), zx_status::Status> {
1368        use fidl::Peered;
1369        self.inner.channel().signal_peer(clear_mask, set_mask)
1370    }
1371}
1372
1373impl PagerControlHandle {}
1374
1375#[must_use = "FIDL methods require a response to be sent"]
1376#[derive(Debug)]
1377pub struct PagerRegisterFileResponder {
1378    control_handle: std::mem::ManuallyDrop<PagerControlHandle>,
1379    tx_id: u32,
1380}
1381
1382/// Set the the channel to be shutdown (see [`PagerControlHandle::shutdown`])
1383/// if the responder is dropped without sending a response, so that the client
1384/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1385impl std::ops::Drop for PagerRegisterFileResponder {
1386    fn drop(&mut self) {
1387        self.control_handle.shutdown();
1388        // Safety: drops once, never accessed again
1389        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1390    }
1391}
1392
1393impl fidl::endpoints::Responder for PagerRegisterFileResponder {
1394    type ControlHandle = PagerControlHandle;
1395
1396    fn control_handle(&self) -> &PagerControlHandle {
1397        &self.control_handle
1398    }
1399
1400    fn drop_without_shutdown(mut self) {
1401        // Safety: drops once, never accessed again due to mem::forget
1402        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1403        // Prevent Drop from running (which would shut down the channel)
1404        std::mem::forget(self);
1405    }
1406}
1407
1408impl PagerRegisterFileResponder {
1409    /// Sends a response to the FIDL transaction.
1410    ///
1411    /// Sets the channel to shutdown if an error occurs.
1412    pub fn send(
1413        self,
1414        mut result: Result<PagerRegisterFileResponse, i32>,
1415    ) -> Result<(), fidl::Error> {
1416        let _result = self.send_raw(result);
1417        if _result.is_err() {
1418            self.control_handle.shutdown();
1419        }
1420        self.drop_without_shutdown();
1421        _result
1422    }
1423
1424    /// Similar to "send" but does not shutdown the channel if an error occurs.
1425    pub fn send_no_shutdown_on_err(
1426        self,
1427        mut result: Result<PagerRegisterFileResponse, i32>,
1428    ) -> Result<(), fidl::Error> {
1429        let _result = self.send_raw(result);
1430        self.drop_without_shutdown();
1431        _result
1432    }
1433
1434    fn send_raw(
1435        &self,
1436        mut result: Result<PagerRegisterFileResponse, i32>,
1437    ) -> Result<(), fidl::Error> {
1438        self.control_handle
1439            .inner
1440            .send::<fidl::encoding::FlexibleResultType<PagerRegisterFileResponse, i32>>(
1441                fidl::encoding::FlexibleResult::new(result.as_mut().map_err(|e| *e)),
1442                self.tx_id,
1443                0x4f85a2ce6cae4aed,
1444                fidl::encoding::DynamicFlags::FLEXIBLE,
1445            )
1446    }
1447}
1448
1449mod internal {
1450    use super::*;
1451
1452    impl ManagerCreatePagerRequest {
1453        #[inline(always)]
1454        fn max_ordinal_present(&self) -> u64 {
1455            if let Some(_) = self.pager {
1456                return 3;
1457            }
1458            if let Some(_) = self.block_size {
1459                return 2;
1460            }
1461            if let Some(_) = self.backing_vmo {
1462                return 1;
1463            }
1464            0
1465        }
1466    }
1467
1468    impl fidl::encoding::ResourceTypeMarker for ManagerCreatePagerRequest {
1469        type Borrowed<'a> = &'a mut Self;
1470        fn take_or_borrow<'a>(
1471            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1472        ) -> Self::Borrowed<'a> {
1473            value
1474        }
1475    }
1476
1477    unsafe impl fidl::encoding::TypeMarker for ManagerCreatePagerRequest {
1478        type Owned = Self;
1479
1480        #[inline(always)]
1481        fn inline_align(_context: fidl::encoding::Context) -> usize {
1482            8
1483        }
1484
1485        #[inline(always)]
1486        fn inline_size(_context: fidl::encoding::Context) -> usize {
1487            16
1488        }
1489    }
1490
1491    unsafe impl
1492        fidl::encoding::Encode<
1493            ManagerCreatePagerRequest,
1494            fidl::encoding::DefaultFuchsiaResourceDialect,
1495        > for &mut ManagerCreatePagerRequest
1496    {
1497        unsafe fn encode(
1498            self,
1499            encoder: &mut fidl::encoding::Encoder<
1500                '_,
1501                fidl::encoding::DefaultFuchsiaResourceDialect,
1502            >,
1503            offset: usize,
1504            mut depth: fidl::encoding::Depth,
1505        ) -> fidl::Result<()> {
1506            encoder.debug_check_bounds::<ManagerCreatePagerRequest>(offset);
1507            // Vector header
1508            let max_ordinal: u64 = self.max_ordinal_present();
1509            encoder.write_num(max_ordinal, offset);
1510            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1511            // Calling encoder.out_of_line_offset(0) is not allowed.
1512            if max_ordinal == 0 {
1513                return Ok(());
1514            }
1515            depth.increment()?;
1516            let envelope_size = 8;
1517            let bytes_len = max_ordinal as usize * envelope_size;
1518            #[allow(unused_variables)]
1519            let offset = encoder.out_of_line_offset(bytes_len);
1520            let mut _prev_end_offset: usize = 0;
1521            if 1 > max_ordinal {
1522                return Ok(());
1523            }
1524
1525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1526            // are envelope_size bytes.
1527            let cur_offset: usize = (1 - 1) * envelope_size;
1528
1529            // Zero reserved fields.
1530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1531
1532            // Safety:
1533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1535            //   envelope_size bytes, there is always sufficient room.
1536            fidl::encoding::encode_in_envelope_optional::<
1537                fidl::encoding::HandleType<
1538                    fidl::Vmo,
1539                    { fidl::ObjectType::VMO.into_raw() },
1540                    2147483648,
1541                >,
1542                fidl::encoding::DefaultFuchsiaResourceDialect,
1543            >(
1544                self.backing_vmo.as_mut().map(
1545                    <fidl::encoding::HandleType<
1546                        fidl::Vmo,
1547                        { fidl::ObjectType::VMO.into_raw() },
1548                        2147483648,
1549                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1550                ),
1551                encoder,
1552                offset + cur_offset,
1553                depth,
1554            )?;
1555
1556            _prev_end_offset = cur_offset + envelope_size;
1557            if 2 > max_ordinal {
1558                return Ok(());
1559            }
1560
1561            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1562            // are envelope_size bytes.
1563            let cur_offset: usize = (2 - 1) * envelope_size;
1564
1565            // Zero reserved fields.
1566            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1567
1568            // Safety:
1569            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1570            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1571            //   envelope_size bytes, there is always sufficient room.
1572            fidl::encoding::encode_in_envelope_optional::<
1573                u64,
1574                fidl::encoding::DefaultFuchsiaResourceDialect,
1575            >(
1576                self.block_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1577                encoder,
1578                offset + cur_offset,
1579                depth,
1580            )?;
1581
1582            _prev_end_offset = cur_offset + envelope_size;
1583            if 3 > max_ordinal {
1584                return Ok(());
1585            }
1586
1587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1588            // are envelope_size bytes.
1589            let cur_offset: usize = (3 - 1) * envelope_size;
1590
1591            // Zero reserved fields.
1592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1593
1594            // Safety:
1595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1597            //   envelope_size bytes, there is always sufficient room.
1598            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1599            self.pager.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1600            encoder, offset + cur_offset, depth
1601        )?;
1602
1603            _prev_end_offset = cur_offset + envelope_size;
1604
1605            Ok(())
1606        }
1607    }
1608
1609    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1610        for ManagerCreatePagerRequest
1611    {
1612        #[inline(always)]
1613        fn new_empty() -> Self {
1614            Self::default()
1615        }
1616
1617        unsafe fn decode(
1618            &mut self,
1619            decoder: &mut fidl::encoding::Decoder<
1620                '_,
1621                fidl::encoding::DefaultFuchsiaResourceDialect,
1622            >,
1623            offset: usize,
1624            mut depth: fidl::encoding::Depth,
1625        ) -> fidl::Result<()> {
1626            decoder.debug_check_bounds::<Self>(offset);
1627            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1628                None => return Err(fidl::Error::NotNullable),
1629                Some(len) => len,
1630            };
1631            // Calling decoder.out_of_line_offset(0) is not allowed.
1632            if len == 0 {
1633                return Ok(());
1634            };
1635            depth.increment()?;
1636            let envelope_size = 8;
1637            let bytes_len = len * envelope_size;
1638            let offset = decoder.out_of_line_offset(bytes_len)?;
1639            // Decode the envelope for each type.
1640            let mut _next_ordinal_to_read = 0;
1641            let mut next_offset = offset;
1642            let end_offset = offset + bytes_len;
1643            _next_ordinal_to_read += 1;
1644            if next_offset >= end_offset {
1645                return Ok(());
1646            }
1647
1648            // Decode unknown envelopes for gaps in ordinals.
1649            while _next_ordinal_to_read < 1 {
1650                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1651                _next_ordinal_to_read += 1;
1652                next_offset += envelope_size;
1653            }
1654
1655            let next_out_of_line = decoder.next_out_of_line();
1656            let handles_before = decoder.remaining_handles();
1657            if let Some((inlined, num_bytes, num_handles)) =
1658                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1659            {
1660                let member_inline_size = <fidl::encoding::HandleType<
1661                    fidl::Vmo,
1662                    { fidl::ObjectType::VMO.into_raw() },
1663                    2147483648,
1664                > as fidl::encoding::TypeMarker>::inline_size(
1665                    decoder.context
1666                );
1667                if inlined != (member_inline_size <= 4) {
1668                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1669                }
1670                let inner_offset;
1671                let mut inner_depth = depth.clone();
1672                if inlined {
1673                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1674                    inner_offset = next_offset;
1675                } else {
1676                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1677                    inner_depth.increment()?;
1678                }
1679                let val_ref =
1680                self.backing_vmo.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1681                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1682                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1683                {
1684                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1685                }
1686                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1687                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1688                }
1689            }
1690
1691            next_offset += envelope_size;
1692            _next_ordinal_to_read += 1;
1693            if next_offset >= end_offset {
1694                return Ok(());
1695            }
1696
1697            // Decode unknown envelopes for gaps in ordinals.
1698            while _next_ordinal_to_read < 2 {
1699                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1700                _next_ordinal_to_read += 1;
1701                next_offset += envelope_size;
1702            }
1703
1704            let next_out_of_line = decoder.next_out_of_line();
1705            let handles_before = decoder.remaining_handles();
1706            if let Some((inlined, num_bytes, num_handles)) =
1707                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1708            {
1709                let member_inline_size =
1710                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1711                if inlined != (member_inline_size <= 4) {
1712                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1713                }
1714                let inner_offset;
1715                let mut inner_depth = depth.clone();
1716                if inlined {
1717                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1718                    inner_offset = next_offset;
1719                } else {
1720                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1721                    inner_depth.increment()?;
1722                }
1723                let val_ref = self.block_size.get_or_insert_with(|| {
1724                    fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect)
1725                });
1726                fidl::decode!(
1727                    u64,
1728                    fidl::encoding::DefaultFuchsiaResourceDialect,
1729                    val_ref,
1730                    decoder,
1731                    inner_offset,
1732                    inner_depth
1733                )?;
1734                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1735                {
1736                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1737                }
1738                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1739                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1740                }
1741            }
1742
1743            next_offset += envelope_size;
1744            _next_ordinal_to_read += 1;
1745            if next_offset >= end_offset {
1746                return Ok(());
1747            }
1748
1749            // Decode unknown envelopes for gaps in ordinals.
1750            while _next_ordinal_to_read < 3 {
1751                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1752                _next_ordinal_to_read += 1;
1753                next_offset += envelope_size;
1754            }
1755
1756            let next_out_of_line = decoder.next_out_of_line();
1757            let handles_before = decoder.remaining_handles();
1758            if let Some((inlined, num_bytes, num_handles)) =
1759                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1760            {
1761                let member_inline_size = <fidl::encoding::Endpoint<
1762                    fidl::endpoints::ServerEnd<PagerMarker>,
1763                > as fidl::encoding::TypeMarker>::inline_size(
1764                    decoder.context
1765                );
1766                if inlined != (member_inline_size <= 4) {
1767                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1768                }
1769                let inner_offset;
1770                let mut inner_depth = depth.clone();
1771                if inlined {
1772                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1773                    inner_offset = next_offset;
1774                } else {
1775                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1776                    inner_depth.increment()?;
1777                }
1778                let val_ref = self.pager.get_or_insert_with(|| {
1779                    fidl::new_empty!(
1780                        fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>>,
1781                        fidl::encoding::DefaultFuchsiaResourceDialect
1782                    )
1783                });
1784                fidl::decode!(
1785                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>>,
1786                    fidl::encoding::DefaultFuchsiaResourceDialect,
1787                    val_ref,
1788                    decoder,
1789                    inner_offset,
1790                    inner_depth
1791                )?;
1792                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1793                {
1794                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1795                }
1796                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1797                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1798                }
1799            }
1800
1801            next_offset += envelope_size;
1802
1803            // Decode the remaining unknown envelopes.
1804            while next_offset < end_offset {
1805                _next_ordinal_to_read += 1;
1806                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1807                next_offset += envelope_size;
1808            }
1809
1810            Ok(())
1811        }
1812    }
1813
1814    impl ManagerProxyWakeChannelRequest {
1815        #[inline(always)]
1816        fn max_ordinal_present(&self) -> u64 {
1817            if let Some(_) = self.counter {
1818                return 5;
1819            }
1820            if let Some(_) = self.name {
1821                return 4;
1822            }
1823            if let Some(_) = self.remote_channel {
1824                return 3;
1825            }
1826            if let Some(_) = self.container_channel {
1827                return 2;
1828            }
1829            if let Some(_) = self.container_job {
1830                return 1;
1831            }
1832            0
1833        }
1834    }
1835
1836    impl fidl::encoding::ResourceTypeMarker for ManagerProxyWakeChannelRequest {
1837        type Borrowed<'a> = &'a mut Self;
1838        fn take_or_borrow<'a>(
1839            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1840        ) -> Self::Borrowed<'a> {
1841            value
1842        }
1843    }
1844
1845    unsafe impl fidl::encoding::TypeMarker for ManagerProxyWakeChannelRequest {
1846        type Owned = Self;
1847
1848        #[inline(always)]
1849        fn inline_align(_context: fidl::encoding::Context) -> usize {
1850            8
1851        }
1852
1853        #[inline(always)]
1854        fn inline_size(_context: fidl::encoding::Context) -> usize {
1855            16
1856        }
1857    }
1858
1859    unsafe impl
1860        fidl::encoding::Encode<
1861            ManagerProxyWakeChannelRequest,
1862            fidl::encoding::DefaultFuchsiaResourceDialect,
1863        > for &mut ManagerProxyWakeChannelRequest
1864    {
1865        unsafe fn encode(
1866            self,
1867            encoder: &mut fidl::encoding::Encoder<
1868                '_,
1869                fidl::encoding::DefaultFuchsiaResourceDialect,
1870            >,
1871            offset: usize,
1872            mut depth: fidl::encoding::Depth,
1873        ) -> fidl::Result<()> {
1874            encoder.debug_check_bounds::<ManagerProxyWakeChannelRequest>(offset);
1875            // Vector header
1876            let max_ordinal: u64 = self.max_ordinal_present();
1877            encoder.write_num(max_ordinal, offset);
1878            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1879            // Calling encoder.out_of_line_offset(0) is not allowed.
1880            if max_ordinal == 0 {
1881                return Ok(());
1882            }
1883            depth.increment()?;
1884            let envelope_size = 8;
1885            let bytes_len = max_ordinal as usize * envelope_size;
1886            #[allow(unused_variables)]
1887            let offset = encoder.out_of_line_offset(bytes_len);
1888            let mut _prev_end_offset: usize = 0;
1889            if 1 > max_ordinal {
1890                return Ok(());
1891            }
1892
1893            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1894            // are envelope_size bytes.
1895            let cur_offset: usize = (1 - 1) * envelope_size;
1896
1897            // Zero reserved fields.
1898            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1899
1900            // Safety:
1901            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1902            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1903            //   envelope_size bytes, there is always sufficient room.
1904            fidl::encoding::encode_in_envelope_optional::<
1905                fidl::encoding::HandleType<
1906                    fidl::Job,
1907                    { fidl::ObjectType::JOB.into_raw() },
1908                    2147483648,
1909                >,
1910                fidl::encoding::DefaultFuchsiaResourceDialect,
1911            >(
1912                self.container_job.as_mut().map(
1913                    <fidl::encoding::HandleType<
1914                        fidl::Job,
1915                        { fidl::ObjectType::JOB.into_raw() },
1916                        2147483648,
1917                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1918                ),
1919                encoder,
1920                offset + cur_offset,
1921                depth,
1922            )?;
1923
1924            _prev_end_offset = cur_offset + envelope_size;
1925            if 2 > max_ordinal {
1926                return Ok(());
1927            }
1928
1929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1930            // are envelope_size bytes.
1931            let cur_offset: usize = (2 - 1) * envelope_size;
1932
1933            // Zero reserved fields.
1934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1935
1936            // Safety:
1937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1939            //   envelope_size bytes, there is always sufficient room.
1940            fidl::encoding::encode_in_envelope_optional::<
1941                fidl::encoding::HandleType<
1942                    fidl::Channel,
1943                    { fidl::ObjectType::CHANNEL.into_raw() },
1944                    2147483648,
1945                >,
1946                fidl::encoding::DefaultFuchsiaResourceDialect,
1947            >(
1948                self.container_channel.as_mut().map(
1949                    <fidl::encoding::HandleType<
1950                        fidl::Channel,
1951                        { fidl::ObjectType::CHANNEL.into_raw() },
1952                        2147483648,
1953                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1954                ),
1955                encoder,
1956                offset + cur_offset,
1957                depth,
1958            )?;
1959
1960            _prev_end_offset = cur_offset + envelope_size;
1961            if 3 > max_ordinal {
1962                return Ok(());
1963            }
1964
1965            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1966            // are envelope_size bytes.
1967            let cur_offset: usize = (3 - 1) * envelope_size;
1968
1969            // Zero reserved fields.
1970            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1971
1972            // Safety:
1973            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1974            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1975            //   envelope_size bytes, there is always sufficient room.
1976            fidl::encoding::encode_in_envelope_optional::<
1977                fidl::encoding::HandleType<
1978                    fidl::Channel,
1979                    { fidl::ObjectType::CHANNEL.into_raw() },
1980                    2147483648,
1981                >,
1982                fidl::encoding::DefaultFuchsiaResourceDialect,
1983            >(
1984                self.remote_channel.as_mut().map(
1985                    <fidl::encoding::HandleType<
1986                        fidl::Channel,
1987                        { fidl::ObjectType::CHANNEL.into_raw() },
1988                        2147483648,
1989                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1990                ),
1991                encoder,
1992                offset + cur_offset,
1993                depth,
1994            )?;
1995
1996            _prev_end_offset = cur_offset + envelope_size;
1997            if 4 > max_ordinal {
1998                return Ok(());
1999            }
2000
2001            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2002            // are envelope_size bytes.
2003            let cur_offset: usize = (4 - 1) * envelope_size;
2004
2005            // Zero reserved fields.
2006            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2007
2008            // Safety:
2009            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2010            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2011            //   envelope_size bytes, there is always sufficient room.
2012            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, fidl::encoding::DefaultFuchsiaResourceDialect>(
2013            self.name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
2014            encoder, offset + cur_offset, depth
2015        )?;
2016
2017            _prev_end_offset = cur_offset + envelope_size;
2018            if 5 > max_ordinal {
2019                return Ok(());
2020            }
2021
2022            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2023            // are envelope_size bytes.
2024            let cur_offset: usize = (5 - 1) * envelope_size;
2025
2026            // Zero reserved fields.
2027            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2028
2029            // Safety:
2030            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2031            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2032            //   envelope_size bytes, there is always sufficient room.
2033            fidl::encoding::encode_in_envelope_optional::<
2034                fidl::encoding::HandleType<
2035                    fidl::Counter,
2036                    { fidl::ObjectType::COUNTER.into_raw() },
2037                    2147483648,
2038                >,
2039                fidl::encoding::DefaultFuchsiaResourceDialect,
2040            >(
2041                self.counter.as_mut().map(
2042                    <fidl::encoding::HandleType<
2043                        fidl::Counter,
2044                        { fidl::ObjectType::COUNTER.into_raw() },
2045                        2147483648,
2046                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2047                ),
2048                encoder,
2049                offset + cur_offset,
2050                depth,
2051            )?;
2052
2053            _prev_end_offset = cur_offset + envelope_size;
2054
2055            Ok(())
2056        }
2057    }
2058
2059    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2060        for ManagerProxyWakeChannelRequest
2061    {
2062        #[inline(always)]
2063        fn new_empty() -> Self {
2064            Self::default()
2065        }
2066
2067        unsafe fn decode(
2068            &mut self,
2069            decoder: &mut fidl::encoding::Decoder<
2070                '_,
2071                fidl::encoding::DefaultFuchsiaResourceDialect,
2072            >,
2073            offset: usize,
2074            mut depth: fidl::encoding::Depth,
2075        ) -> fidl::Result<()> {
2076            decoder.debug_check_bounds::<Self>(offset);
2077            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2078                None => return Err(fidl::Error::NotNullable),
2079                Some(len) => len,
2080            };
2081            // Calling decoder.out_of_line_offset(0) is not allowed.
2082            if len == 0 {
2083                return Ok(());
2084            };
2085            depth.increment()?;
2086            let envelope_size = 8;
2087            let bytes_len = len * envelope_size;
2088            let offset = decoder.out_of_line_offset(bytes_len)?;
2089            // Decode the envelope for each type.
2090            let mut _next_ordinal_to_read = 0;
2091            let mut next_offset = offset;
2092            let end_offset = offset + bytes_len;
2093            _next_ordinal_to_read += 1;
2094            if next_offset >= end_offset {
2095                return Ok(());
2096            }
2097
2098            // Decode unknown envelopes for gaps in ordinals.
2099            while _next_ordinal_to_read < 1 {
2100                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2101                _next_ordinal_to_read += 1;
2102                next_offset += envelope_size;
2103            }
2104
2105            let next_out_of_line = decoder.next_out_of_line();
2106            let handles_before = decoder.remaining_handles();
2107            if let Some((inlined, num_bytes, num_handles)) =
2108                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2109            {
2110                let member_inline_size = <fidl::encoding::HandleType<
2111                    fidl::Job,
2112                    { fidl::ObjectType::JOB.into_raw() },
2113                    2147483648,
2114                > as fidl::encoding::TypeMarker>::inline_size(
2115                    decoder.context
2116                );
2117                if inlined != (member_inline_size <= 4) {
2118                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2119                }
2120                let inner_offset;
2121                let mut inner_depth = depth.clone();
2122                if inlined {
2123                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2124                    inner_offset = next_offset;
2125                } else {
2126                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2127                    inner_depth.increment()?;
2128                }
2129                let val_ref =
2130                self.container_job.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2131                fidl::decode!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2133                {
2134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2135                }
2136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2138                }
2139            }
2140
2141            next_offset += envelope_size;
2142            _next_ordinal_to_read += 1;
2143            if next_offset >= end_offset {
2144                return Ok(());
2145            }
2146
2147            // Decode unknown envelopes for gaps in ordinals.
2148            while _next_ordinal_to_read < 2 {
2149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2150                _next_ordinal_to_read += 1;
2151                next_offset += envelope_size;
2152            }
2153
2154            let next_out_of_line = decoder.next_out_of_line();
2155            let handles_before = decoder.remaining_handles();
2156            if let Some((inlined, num_bytes, num_handles)) =
2157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2158            {
2159                let member_inline_size = <fidl::encoding::HandleType<
2160                    fidl::Channel,
2161                    { fidl::ObjectType::CHANNEL.into_raw() },
2162                    2147483648,
2163                > as fidl::encoding::TypeMarker>::inline_size(
2164                    decoder.context
2165                );
2166                if inlined != (member_inline_size <= 4) {
2167                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2168                }
2169                let inner_offset;
2170                let mut inner_depth = depth.clone();
2171                if inlined {
2172                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2173                    inner_offset = next_offset;
2174                } else {
2175                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2176                    inner_depth.increment()?;
2177                }
2178                let val_ref =
2179                self.container_channel.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2180                fidl::decode!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2181                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2182                {
2183                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2184                }
2185                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2186                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2187                }
2188            }
2189
2190            next_offset += envelope_size;
2191            _next_ordinal_to_read += 1;
2192            if next_offset >= end_offset {
2193                return Ok(());
2194            }
2195
2196            // Decode unknown envelopes for gaps in ordinals.
2197            while _next_ordinal_to_read < 3 {
2198                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2199                _next_ordinal_to_read += 1;
2200                next_offset += envelope_size;
2201            }
2202
2203            let next_out_of_line = decoder.next_out_of_line();
2204            let handles_before = decoder.remaining_handles();
2205            if let Some((inlined, num_bytes, num_handles)) =
2206                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2207            {
2208                let member_inline_size = <fidl::encoding::HandleType<
2209                    fidl::Channel,
2210                    { fidl::ObjectType::CHANNEL.into_raw() },
2211                    2147483648,
2212                > as fidl::encoding::TypeMarker>::inline_size(
2213                    decoder.context
2214                );
2215                if inlined != (member_inline_size <= 4) {
2216                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2217                }
2218                let inner_offset;
2219                let mut inner_depth = depth.clone();
2220                if inlined {
2221                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2222                    inner_offset = next_offset;
2223                } else {
2224                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2225                    inner_depth.increment()?;
2226                }
2227                let val_ref =
2228                self.remote_channel.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2229                fidl::decode!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2230                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2231                {
2232                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2233                }
2234                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2235                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2236                }
2237            }
2238
2239            next_offset += envelope_size;
2240            _next_ordinal_to_read += 1;
2241            if next_offset >= end_offset {
2242                return Ok(());
2243            }
2244
2245            // Decode unknown envelopes for gaps in ordinals.
2246            while _next_ordinal_to_read < 4 {
2247                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2248                _next_ordinal_to_read += 1;
2249                next_offset += envelope_size;
2250            }
2251
2252            let next_out_of_line = decoder.next_out_of_line();
2253            let handles_before = decoder.remaining_handles();
2254            if let Some((inlined, num_bytes, num_handles)) =
2255                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2256            {
2257                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2258                if inlined != (member_inline_size <= 4) {
2259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2260                }
2261                let inner_offset;
2262                let mut inner_depth = depth.clone();
2263                if inlined {
2264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2265                    inner_offset = next_offset;
2266                } else {
2267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2268                    inner_depth.increment()?;
2269                }
2270                let val_ref = self.name.get_or_insert_with(|| {
2271                    fidl::new_empty!(
2272                        fidl::encoding::BoundedString<1024>,
2273                        fidl::encoding::DefaultFuchsiaResourceDialect
2274                    )
2275                });
2276                fidl::decode!(
2277                    fidl::encoding::BoundedString<1024>,
2278                    fidl::encoding::DefaultFuchsiaResourceDialect,
2279                    val_ref,
2280                    decoder,
2281                    inner_offset,
2282                    inner_depth
2283                )?;
2284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2285                {
2286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2287                }
2288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2290                }
2291            }
2292
2293            next_offset += envelope_size;
2294            _next_ordinal_to_read += 1;
2295            if next_offset >= end_offset {
2296                return Ok(());
2297            }
2298
2299            // Decode unknown envelopes for gaps in ordinals.
2300            while _next_ordinal_to_read < 5 {
2301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2302                _next_ordinal_to_read += 1;
2303                next_offset += envelope_size;
2304            }
2305
2306            let next_out_of_line = decoder.next_out_of_line();
2307            let handles_before = decoder.remaining_handles();
2308            if let Some((inlined, num_bytes, num_handles)) =
2309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2310            {
2311                let member_inline_size = <fidl::encoding::HandleType<
2312                    fidl::Counter,
2313                    { fidl::ObjectType::COUNTER.into_raw() },
2314                    2147483648,
2315                > as fidl::encoding::TypeMarker>::inline_size(
2316                    decoder.context
2317                );
2318                if inlined != (member_inline_size <= 4) {
2319                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2320                }
2321                let inner_offset;
2322                let mut inner_depth = depth.clone();
2323                if inlined {
2324                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2325                    inner_offset = next_offset;
2326                } else {
2327                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2328                    inner_depth.increment()?;
2329                }
2330                let val_ref =
2331                self.counter.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Counter, { fidl::ObjectType::COUNTER.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2332                fidl::decode!(fidl::encoding::HandleType<fidl::Counter, { fidl::ObjectType::COUNTER.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2334                {
2335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2336                }
2337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2339                }
2340            }
2341
2342            next_offset += envelope_size;
2343
2344            // Decode the remaining unknown envelopes.
2345            while next_offset < end_offset {
2346                _next_ordinal_to_read += 1;
2347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2348                next_offset += envelope_size;
2349            }
2350
2351            Ok(())
2352        }
2353    }
2354
2355    impl ManagerRegisterWakeWatcherRequest {
2356        #[inline(always)]
2357        fn max_ordinal_present(&self) -> u64 {
2358            if let Some(_) = self.watcher {
2359                return 1;
2360            }
2361            0
2362        }
2363    }
2364
2365    impl fidl::encoding::ResourceTypeMarker for ManagerRegisterWakeWatcherRequest {
2366        type Borrowed<'a> = &'a mut Self;
2367        fn take_or_borrow<'a>(
2368            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2369        ) -> Self::Borrowed<'a> {
2370            value
2371        }
2372    }
2373
2374    unsafe impl fidl::encoding::TypeMarker for ManagerRegisterWakeWatcherRequest {
2375        type Owned = Self;
2376
2377        #[inline(always)]
2378        fn inline_align(_context: fidl::encoding::Context) -> usize {
2379            8
2380        }
2381
2382        #[inline(always)]
2383        fn inline_size(_context: fidl::encoding::Context) -> usize {
2384            16
2385        }
2386    }
2387
2388    unsafe impl
2389        fidl::encoding::Encode<
2390            ManagerRegisterWakeWatcherRequest,
2391            fidl::encoding::DefaultFuchsiaResourceDialect,
2392        > for &mut ManagerRegisterWakeWatcherRequest
2393    {
2394        unsafe fn encode(
2395            self,
2396            encoder: &mut fidl::encoding::Encoder<
2397                '_,
2398                fidl::encoding::DefaultFuchsiaResourceDialect,
2399            >,
2400            offset: usize,
2401            mut depth: fidl::encoding::Depth,
2402        ) -> fidl::Result<()> {
2403            encoder.debug_check_bounds::<ManagerRegisterWakeWatcherRequest>(offset);
2404            // Vector header
2405            let max_ordinal: u64 = self.max_ordinal_present();
2406            encoder.write_num(max_ordinal, offset);
2407            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2408            // Calling encoder.out_of_line_offset(0) is not allowed.
2409            if max_ordinal == 0 {
2410                return Ok(());
2411            }
2412            depth.increment()?;
2413            let envelope_size = 8;
2414            let bytes_len = max_ordinal as usize * envelope_size;
2415            #[allow(unused_variables)]
2416            let offset = encoder.out_of_line_offset(bytes_len);
2417            let mut _prev_end_offset: usize = 0;
2418            if 1 > max_ordinal {
2419                return Ok(());
2420            }
2421
2422            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2423            // are envelope_size bytes.
2424            let cur_offset: usize = (1 - 1) * envelope_size;
2425
2426            // Zero reserved fields.
2427            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2428
2429            // Safety:
2430            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2431            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2432            //   envelope_size bytes, there is always sufficient room.
2433            fidl::encoding::encode_in_envelope_optional::<
2434                fidl::encoding::HandleType<
2435                    fidl::EventPair,
2436                    { fidl::ObjectType::EVENTPAIR.into_raw() },
2437                    2147483648,
2438                >,
2439                fidl::encoding::DefaultFuchsiaResourceDialect,
2440            >(
2441                self.watcher.as_mut().map(
2442                    <fidl::encoding::HandleType<
2443                        fidl::EventPair,
2444                        { fidl::ObjectType::EVENTPAIR.into_raw() },
2445                        2147483648,
2446                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2447                ),
2448                encoder,
2449                offset + cur_offset,
2450                depth,
2451            )?;
2452
2453            _prev_end_offset = cur_offset + envelope_size;
2454
2455            Ok(())
2456        }
2457    }
2458
2459    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2460        for ManagerRegisterWakeWatcherRequest
2461    {
2462        #[inline(always)]
2463        fn new_empty() -> Self {
2464            Self::default()
2465        }
2466
2467        unsafe fn decode(
2468            &mut self,
2469            decoder: &mut fidl::encoding::Decoder<
2470                '_,
2471                fidl::encoding::DefaultFuchsiaResourceDialect,
2472            >,
2473            offset: usize,
2474            mut depth: fidl::encoding::Depth,
2475        ) -> fidl::Result<()> {
2476            decoder.debug_check_bounds::<Self>(offset);
2477            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2478                None => return Err(fidl::Error::NotNullable),
2479                Some(len) => len,
2480            };
2481            // Calling decoder.out_of_line_offset(0) is not allowed.
2482            if len == 0 {
2483                return Ok(());
2484            };
2485            depth.increment()?;
2486            let envelope_size = 8;
2487            let bytes_len = len * envelope_size;
2488            let offset = decoder.out_of_line_offset(bytes_len)?;
2489            // Decode the envelope for each type.
2490            let mut _next_ordinal_to_read = 0;
2491            let mut next_offset = offset;
2492            let end_offset = offset + bytes_len;
2493            _next_ordinal_to_read += 1;
2494            if next_offset >= end_offset {
2495                return Ok(());
2496            }
2497
2498            // Decode unknown envelopes for gaps in ordinals.
2499            while _next_ordinal_to_read < 1 {
2500                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2501                _next_ordinal_to_read += 1;
2502                next_offset += envelope_size;
2503            }
2504
2505            let next_out_of_line = decoder.next_out_of_line();
2506            let handles_before = decoder.remaining_handles();
2507            if let Some((inlined, num_bytes, num_handles)) =
2508                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2509            {
2510                let member_inline_size = <fidl::encoding::HandleType<
2511                    fidl::EventPair,
2512                    { fidl::ObjectType::EVENTPAIR.into_raw() },
2513                    2147483648,
2514                > as fidl::encoding::TypeMarker>::inline_size(
2515                    decoder.context
2516                );
2517                if inlined != (member_inline_size <= 4) {
2518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2519                }
2520                let inner_offset;
2521                let mut inner_depth = depth.clone();
2522                if inlined {
2523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2524                    inner_offset = next_offset;
2525                } else {
2526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2527                    inner_depth.increment()?;
2528                }
2529                let val_ref =
2530                self.watcher.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2531                fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2533                {
2534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2535                }
2536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2538                }
2539            }
2540
2541            next_offset += envelope_size;
2542
2543            // Decode the remaining unknown envelopes.
2544            while next_offset < end_offset {
2545                _next_ordinal_to_read += 1;
2546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2547                next_offset += envelope_size;
2548            }
2549
2550            Ok(())
2551        }
2552    }
2553
2554    impl ManagerSuspendContainerRequest {
2555        #[inline(always)]
2556        fn max_ordinal_present(&self) -> u64 {
2557            if let Some(_) = self.wake_locks {
2558                return 2;
2559            }
2560            if let Some(_) = self.container_job {
2561                return 1;
2562            }
2563            0
2564        }
2565    }
2566
2567    impl fidl::encoding::ResourceTypeMarker for ManagerSuspendContainerRequest {
2568        type Borrowed<'a> = &'a mut Self;
2569        fn take_or_borrow<'a>(
2570            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2571        ) -> Self::Borrowed<'a> {
2572            value
2573        }
2574    }
2575
2576    unsafe impl fidl::encoding::TypeMarker for ManagerSuspendContainerRequest {
2577        type Owned = Self;
2578
2579        #[inline(always)]
2580        fn inline_align(_context: fidl::encoding::Context) -> usize {
2581            8
2582        }
2583
2584        #[inline(always)]
2585        fn inline_size(_context: fidl::encoding::Context) -> usize {
2586            16
2587        }
2588    }
2589
2590    unsafe impl
2591        fidl::encoding::Encode<
2592            ManagerSuspendContainerRequest,
2593            fidl::encoding::DefaultFuchsiaResourceDialect,
2594        > for &mut ManagerSuspendContainerRequest
2595    {
2596        unsafe fn encode(
2597            self,
2598            encoder: &mut fidl::encoding::Encoder<
2599                '_,
2600                fidl::encoding::DefaultFuchsiaResourceDialect,
2601            >,
2602            offset: usize,
2603            mut depth: fidl::encoding::Depth,
2604        ) -> fidl::Result<()> {
2605            encoder.debug_check_bounds::<ManagerSuspendContainerRequest>(offset);
2606            // Vector header
2607            let max_ordinal: u64 = self.max_ordinal_present();
2608            encoder.write_num(max_ordinal, offset);
2609            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2610            // Calling encoder.out_of_line_offset(0) is not allowed.
2611            if max_ordinal == 0 {
2612                return Ok(());
2613            }
2614            depth.increment()?;
2615            let envelope_size = 8;
2616            let bytes_len = max_ordinal as usize * envelope_size;
2617            #[allow(unused_variables)]
2618            let offset = encoder.out_of_line_offset(bytes_len);
2619            let mut _prev_end_offset: usize = 0;
2620            if 1 > max_ordinal {
2621                return Ok(());
2622            }
2623
2624            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2625            // are envelope_size bytes.
2626            let cur_offset: usize = (1 - 1) * envelope_size;
2627
2628            // Zero reserved fields.
2629            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2630
2631            // Safety:
2632            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2633            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2634            //   envelope_size bytes, there is always sufficient room.
2635            fidl::encoding::encode_in_envelope_optional::<
2636                fidl::encoding::HandleType<
2637                    fidl::Job,
2638                    { fidl::ObjectType::JOB.into_raw() },
2639                    2147483648,
2640                >,
2641                fidl::encoding::DefaultFuchsiaResourceDialect,
2642            >(
2643                self.container_job.as_mut().map(
2644                    <fidl::encoding::HandleType<
2645                        fidl::Job,
2646                        { fidl::ObjectType::JOB.into_raw() },
2647                        2147483648,
2648                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2649                ),
2650                encoder,
2651                offset + cur_offset,
2652                depth,
2653            )?;
2654
2655            _prev_end_offset = cur_offset + envelope_size;
2656            if 2 > max_ordinal {
2657                return Ok(());
2658            }
2659
2660            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2661            // are envelope_size bytes.
2662            let cur_offset: usize = (2 - 1) * envelope_size;
2663
2664            // Zero reserved fields.
2665            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2666
2667            // Safety:
2668            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2669            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2670            //   envelope_size bytes, there is always sufficient room.
2671            fidl::encoding::encode_in_envelope_optional::<
2672                fidl::encoding::HandleType<
2673                    fidl::EventPair,
2674                    { fidl::ObjectType::EVENTPAIR.into_raw() },
2675                    2147483648,
2676                >,
2677                fidl::encoding::DefaultFuchsiaResourceDialect,
2678            >(
2679                self.wake_locks.as_mut().map(
2680                    <fidl::encoding::HandleType<
2681                        fidl::EventPair,
2682                        { fidl::ObjectType::EVENTPAIR.into_raw() },
2683                        2147483648,
2684                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2685                ),
2686                encoder,
2687                offset + cur_offset,
2688                depth,
2689            )?;
2690
2691            _prev_end_offset = cur_offset + envelope_size;
2692
2693            Ok(())
2694        }
2695    }
2696
2697    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2698        for ManagerSuspendContainerRequest
2699    {
2700        #[inline(always)]
2701        fn new_empty() -> Self {
2702            Self::default()
2703        }
2704
2705        unsafe fn decode(
2706            &mut self,
2707            decoder: &mut fidl::encoding::Decoder<
2708                '_,
2709                fidl::encoding::DefaultFuchsiaResourceDialect,
2710            >,
2711            offset: usize,
2712            mut depth: fidl::encoding::Depth,
2713        ) -> fidl::Result<()> {
2714            decoder.debug_check_bounds::<Self>(offset);
2715            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2716                None => return Err(fidl::Error::NotNullable),
2717                Some(len) => len,
2718            };
2719            // Calling decoder.out_of_line_offset(0) is not allowed.
2720            if len == 0 {
2721                return Ok(());
2722            };
2723            depth.increment()?;
2724            let envelope_size = 8;
2725            let bytes_len = len * envelope_size;
2726            let offset = decoder.out_of_line_offset(bytes_len)?;
2727            // Decode the envelope for each type.
2728            let mut _next_ordinal_to_read = 0;
2729            let mut next_offset = offset;
2730            let end_offset = offset + bytes_len;
2731            _next_ordinal_to_read += 1;
2732            if next_offset >= end_offset {
2733                return Ok(());
2734            }
2735
2736            // Decode unknown envelopes for gaps in ordinals.
2737            while _next_ordinal_to_read < 1 {
2738                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2739                _next_ordinal_to_read += 1;
2740                next_offset += envelope_size;
2741            }
2742
2743            let next_out_of_line = decoder.next_out_of_line();
2744            let handles_before = decoder.remaining_handles();
2745            if let Some((inlined, num_bytes, num_handles)) =
2746                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2747            {
2748                let member_inline_size = <fidl::encoding::HandleType<
2749                    fidl::Job,
2750                    { fidl::ObjectType::JOB.into_raw() },
2751                    2147483648,
2752                > as fidl::encoding::TypeMarker>::inline_size(
2753                    decoder.context
2754                );
2755                if inlined != (member_inline_size <= 4) {
2756                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2757                }
2758                let inner_offset;
2759                let mut inner_depth = depth.clone();
2760                if inlined {
2761                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2762                    inner_offset = next_offset;
2763                } else {
2764                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2765                    inner_depth.increment()?;
2766                }
2767                let val_ref =
2768                self.container_job.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2769                fidl::decode!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2770                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2771                {
2772                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2773                }
2774                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2775                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2776                }
2777            }
2778
2779            next_offset += envelope_size;
2780            _next_ordinal_to_read += 1;
2781            if next_offset >= end_offset {
2782                return Ok(());
2783            }
2784
2785            // Decode unknown envelopes for gaps in ordinals.
2786            while _next_ordinal_to_read < 2 {
2787                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2788                _next_ordinal_to_read += 1;
2789                next_offset += envelope_size;
2790            }
2791
2792            let next_out_of_line = decoder.next_out_of_line();
2793            let handles_before = decoder.remaining_handles();
2794            if let Some((inlined, num_bytes, num_handles)) =
2795                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2796            {
2797                let member_inline_size = <fidl::encoding::HandleType<
2798                    fidl::EventPair,
2799                    { fidl::ObjectType::EVENTPAIR.into_raw() },
2800                    2147483648,
2801                > as fidl::encoding::TypeMarker>::inline_size(
2802                    decoder.context
2803                );
2804                if inlined != (member_inline_size <= 4) {
2805                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2806                }
2807                let inner_offset;
2808                let mut inner_depth = depth.clone();
2809                if inlined {
2810                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2811                    inner_offset = next_offset;
2812                } else {
2813                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2814                    inner_depth.increment()?;
2815                }
2816                let val_ref =
2817                self.wake_locks.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2818                fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2819                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2820                {
2821                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2822                }
2823                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2824                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2825                }
2826            }
2827
2828            next_offset += envelope_size;
2829
2830            // Decode the remaining unknown envelopes.
2831            while next_offset < end_offset {
2832                _next_ordinal_to_read += 1;
2833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2834                next_offset += envelope_size;
2835            }
2836
2837            Ok(())
2838        }
2839    }
2840
2841    impl PagerRegisterFileResponse {
2842        #[inline(always)]
2843        fn max_ordinal_present(&self) -> u64 {
2844            if let Some(_) = self.vmo {
2845                return 1;
2846            }
2847            0
2848        }
2849    }
2850
2851    impl fidl::encoding::ResourceTypeMarker for PagerRegisterFileResponse {
2852        type Borrowed<'a> = &'a mut Self;
2853        fn take_or_borrow<'a>(
2854            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2855        ) -> Self::Borrowed<'a> {
2856            value
2857        }
2858    }
2859
2860    unsafe impl fidl::encoding::TypeMarker for PagerRegisterFileResponse {
2861        type Owned = Self;
2862
2863        #[inline(always)]
2864        fn inline_align(_context: fidl::encoding::Context) -> usize {
2865            8
2866        }
2867
2868        #[inline(always)]
2869        fn inline_size(_context: fidl::encoding::Context) -> usize {
2870            16
2871        }
2872    }
2873
2874    unsafe impl
2875        fidl::encoding::Encode<
2876            PagerRegisterFileResponse,
2877            fidl::encoding::DefaultFuchsiaResourceDialect,
2878        > for &mut PagerRegisterFileResponse
2879    {
2880        unsafe fn encode(
2881            self,
2882            encoder: &mut fidl::encoding::Encoder<
2883                '_,
2884                fidl::encoding::DefaultFuchsiaResourceDialect,
2885            >,
2886            offset: usize,
2887            mut depth: fidl::encoding::Depth,
2888        ) -> fidl::Result<()> {
2889            encoder.debug_check_bounds::<PagerRegisterFileResponse>(offset);
2890            // Vector header
2891            let max_ordinal: u64 = self.max_ordinal_present();
2892            encoder.write_num(max_ordinal, offset);
2893            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2894            // Calling encoder.out_of_line_offset(0) is not allowed.
2895            if max_ordinal == 0 {
2896                return Ok(());
2897            }
2898            depth.increment()?;
2899            let envelope_size = 8;
2900            let bytes_len = max_ordinal as usize * envelope_size;
2901            #[allow(unused_variables)]
2902            let offset = encoder.out_of_line_offset(bytes_len);
2903            let mut _prev_end_offset: usize = 0;
2904            if 1 > max_ordinal {
2905                return Ok(());
2906            }
2907
2908            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2909            // are envelope_size bytes.
2910            let cur_offset: usize = (1 - 1) * envelope_size;
2911
2912            // Zero reserved fields.
2913            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2914
2915            // Safety:
2916            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2917            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2918            //   envelope_size bytes, there is always sufficient room.
2919            fidl::encoding::encode_in_envelope_optional::<
2920                fidl::encoding::HandleType<
2921                    fidl::Vmo,
2922                    { fidl::ObjectType::VMO.into_raw() },
2923                    2147483648,
2924                >,
2925                fidl::encoding::DefaultFuchsiaResourceDialect,
2926            >(
2927                self.vmo.as_mut().map(
2928                    <fidl::encoding::HandleType<
2929                        fidl::Vmo,
2930                        { fidl::ObjectType::VMO.into_raw() },
2931                        2147483648,
2932                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2933                ),
2934                encoder,
2935                offset + cur_offset,
2936                depth,
2937            )?;
2938
2939            _prev_end_offset = cur_offset + envelope_size;
2940
2941            Ok(())
2942        }
2943    }
2944
2945    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2946        for PagerRegisterFileResponse
2947    {
2948        #[inline(always)]
2949        fn new_empty() -> Self {
2950            Self::default()
2951        }
2952
2953        unsafe fn decode(
2954            &mut self,
2955            decoder: &mut fidl::encoding::Decoder<
2956                '_,
2957                fidl::encoding::DefaultFuchsiaResourceDialect,
2958            >,
2959            offset: usize,
2960            mut depth: fidl::encoding::Depth,
2961        ) -> fidl::Result<()> {
2962            decoder.debug_check_bounds::<Self>(offset);
2963            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2964                None => return Err(fidl::Error::NotNullable),
2965                Some(len) => len,
2966            };
2967            // Calling decoder.out_of_line_offset(0) is not allowed.
2968            if len == 0 {
2969                return Ok(());
2970            };
2971            depth.increment()?;
2972            let envelope_size = 8;
2973            let bytes_len = len * envelope_size;
2974            let offset = decoder.out_of_line_offset(bytes_len)?;
2975            // Decode the envelope for each type.
2976            let mut _next_ordinal_to_read = 0;
2977            let mut next_offset = offset;
2978            let end_offset = offset + bytes_len;
2979            _next_ordinal_to_read += 1;
2980            if next_offset >= end_offset {
2981                return Ok(());
2982            }
2983
2984            // Decode unknown envelopes for gaps in ordinals.
2985            while _next_ordinal_to_read < 1 {
2986                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2987                _next_ordinal_to_read += 1;
2988                next_offset += envelope_size;
2989            }
2990
2991            let next_out_of_line = decoder.next_out_of_line();
2992            let handles_before = decoder.remaining_handles();
2993            if let Some((inlined, num_bytes, num_handles)) =
2994                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2995            {
2996                let member_inline_size = <fidl::encoding::HandleType<
2997                    fidl::Vmo,
2998                    { fidl::ObjectType::VMO.into_raw() },
2999                    2147483648,
3000                > as fidl::encoding::TypeMarker>::inline_size(
3001                    decoder.context
3002                );
3003                if inlined != (member_inline_size <= 4) {
3004                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3005                }
3006                let inner_offset;
3007                let mut inner_depth = depth.clone();
3008                if inlined {
3009                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3010                    inner_offset = next_offset;
3011                } else {
3012                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3013                    inner_depth.increment()?;
3014                }
3015                let val_ref =
3016                self.vmo.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3017                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3018                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3019                {
3020                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3021                }
3022                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3023                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3024                }
3025            }
3026
3027            next_offset += envelope_size;
3028
3029            // Decode the remaining unknown envelopes.
3030            while next_offset < end_offset {
3031                _next_ordinal_to_read += 1;
3032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3033                next_offset += envelope_size;
3034            }
3035
3036            Ok(())
3037        }
3038    }
3039}