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 ManagerAddWakeSourceRequest {
16    /// The job of the container that is meant to be woken by `signals` on `handle`.
17    pub container_job: Option<fidl::Job>,
18    /// The name of the wake source, used for debugging purposes.
19    pub name: Option<String>,
20    /// A handle that is used to prevent the container from suspending when `signals` are
21    /// raised. If one of `signals` is raised while the container is suspended, the
22    /// container will be woken up.
23    pub handle: Option<fidl::NullableHandle>,
24    /// The signals on `handle` that are meant to wake the container.
25    pub signals: Option<u32>,
26    #[doc(hidden)]
27    pub __source_breaking: fidl::marker::SourceBreaking,
28}
29
30impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
31    for ManagerAddWakeSourceRequest
32{
33}
34
35#[derive(Debug, Default, PartialEq)]
36pub struct ManagerCreatePagerRequest {
37    /// The backing vmo to use in the pager.
38    pub backing_vmo: Option<fidl::Vmo>,
39    /// The block size for the pager to use.
40    pub block_size: Option<u64>,
41    /// The `Pager` instance that will serve the pager requests.
42    pub pager: Option<fidl::endpoints::ServerEnd<PagerMarker>>,
43    #[doc(hidden)]
44    pub __source_breaking: fidl::marker::SourceBreaking,
45}
46
47impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ManagerCreatePagerRequest {}
48
49#[derive(Debug, Default, PartialEq)]
50pub struct ManagerProxyWakeChannelRequest {
51    /// The job of the container that holds the other end of `container_channel`.
52    pub container_job: Option<fidl::Job>,
53    /// The channel endpoint that is connected to the container.
54    pub container_channel: Option<fidl::Channel>,
55    /// The channel endpoint that is connected to a component outside the container.
56    pub remote_channel: Option<fidl::Channel>,
57    /// The name of the proxy, used for debugging purposes.
58    pub name: Option<String>,
59    /// A counter that is used to count how many unhandled requests have been sent to the
60    /// container. If this counter is non-zero, the container will not be able to suspend.
61    ///
62    /// Each time the client handles a message on the proxied channel, it is expected to
63    /// decrement the counter by 1. This decrement should only happen once the client is
64    /// ready to allow suspension. Often this means that a new hanging get has been sent on
65    /// the proxied channel.
66    pub counter: Option<fidl::Counter>,
67    #[doc(hidden)]
68    pub __source_breaking: fidl::marker::SourceBreaking,
69}
70
71impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
72    for ManagerProxyWakeChannelRequest
73{
74}
75
76#[derive(Debug, Default, PartialEq)]
77pub struct ManagerRegisterWakeWatcherRequest {
78    /// The event that will be signaled when the container's wake status changes.
79    pub watcher: Option<fidl::EventPair>,
80    #[doc(hidden)]
81    pub __source_breaking: fidl::marker::SourceBreaking,
82}
83
84impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
85    for ManagerRegisterWakeWatcherRequest
86{
87}
88
89#[derive(Debug, Default, PartialEq)]
90pub struct ManagerRemoveWakeSourceRequest {
91    /// The job of the container that `handle` is associated with.
92    pub container_job: Option<fidl::Job>,
93    /// The handle to the wake source that is to be removed.
94    pub handle: Option<fidl::NullableHandle>,
95    #[doc(hidden)]
96    pub __source_breaking: fidl::marker::SourceBreaking,
97}
98
99impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
100    for ManagerRemoveWakeSourceRequest
101{
102}
103
104#[derive(Debug, Default, PartialEq)]
105pub struct ManagerSuspendContainerRequest {
106    /// The job of the container to suspend.
107    pub container_job: Option<fidl::Job>,
108    /// The event that is used to signal whether or not there are any active wake locks
109    /// in the container.
110    pub wake_locks: Option<fidl::EventPair>,
111    #[doc(hidden)]
112    pub __source_breaking: fidl::marker::SourceBreaking,
113}
114
115impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
116    for ManagerSuspendContainerRequest
117{
118}
119
120#[derive(Debug, Default, PartialEq)]
121pub struct PagerRegisterFileResponse {
122    /// A newly created child vmo.
123    pub vmo: Option<fidl::Vmo>,
124    #[doc(hidden)]
125    pub __source_breaking: fidl::marker::SourceBreaking,
126}
127
128impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for PagerRegisterFileResponse {}
129
130#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
131pub struct ManagerMarker;
132
133impl fidl::endpoints::ProtocolMarker for ManagerMarker {
134    type Proxy = ManagerProxy;
135    type RequestStream = ManagerRequestStream;
136    #[cfg(target_os = "fuchsia")]
137    type SynchronousProxy = ManagerSynchronousProxy;
138
139    const DEBUG_NAME: &'static str = "fuchsia.starnix.runner.Manager";
140}
141impl fidl::endpoints::DiscoverableProtocolMarker for ManagerMarker {}
142pub type ManagerSuspendContainerResult = Result<ManagerSuspendContainerResponse, SuspendError>;
143
144pub trait ManagerProxyInterface: Send + Sync {
145    type SuspendContainerResponseFut: std::future::Future<Output = Result<ManagerSuspendContainerResult, fidl::Error>>
146        + Send;
147    fn r#suspend_container(
148        &self,
149        payload: ManagerSuspendContainerRequest,
150    ) -> Self::SuspendContainerResponseFut;
151    fn r#proxy_wake_channel(
152        &self,
153        payload: ManagerProxyWakeChannelRequest,
154    ) -> Result<(), fidl::Error>;
155    fn r#add_wake_source(&self, payload: ManagerAddWakeSourceRequest) -> Result<(), fidl::Error>;
156    fn r#remove_wake_source(
157        &self,
158        payload: ManagerRemoveWakeSourceRequest,
159    ) -> Result<(), fidl::Error>;
160    type RegisterWakeWatcherResponseFut: std::future::Future<Output = Result<(), fidl::Error>>
161        + Send;
162    fn r#register_wake_watcher(
163        &self,
164        payload: ManagerRegisterWakeWatcherRequest,
165    ) -> Self::RegisterWakeWatcherResponseFut;
166    fn r#create_pager(&self, payload: ManagerCreatePagerRequest) -> Result<(), fidl::Error>;
167}
168#[derive(Debug)]
169#[cfg(target_os = "fuchsia")]
170pub struct ManagerSynchronousProxy {
171    client: fidl::client::sync::Client,
172}
173
174#[cfg(target_os = "fuchsia")]
175impl fidl::endpoints::SynchronousProxy for ManagerSynchronousProxy {
176    type Proxy = ManagerProxy;
177    type Protocol = ManagerMarker;
178
179    fn from_channel(inner: fidl::Channel) -> Self {
180        Self::new(inner)
181    }
182
183    fn into_channel(self) -> fidl::Channel {
184        self.client.into_channel()
185    }
186
187    fn as_channel(&self) -> &fidl::Channel {
188        self.client.as_channel()
189    }
190}
191
192#[cfg(target_os = "fuchsia")]
193impl ManagerSynchronousProxy {
194    pub fn new(channel: fidl::Channel) -> Self {
195        let protocol_name = <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
196        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
197    }
198
199    pub fn into_channel(self) -> fidl::Channel {
200        self.client.into_channel()
201    }
202
203    /// Waits until an event arrives and returns it. It is safe for other
204    /// threads to make concurrent requests while waiting for an event.
205    pub fn wait_for_event(
206        &self,
207        deadline: zx::MonotonicInstant,
208    ) -> Result<ManagerEvent, fidl::Error> {
209        ManagerEvent::decode(self.client.wait_for_event(deadline)?)
210    }
211
212    /// Suspends the container running in `job`.
213    ///
214    /// The call will return successfully when `wake_event` has been signaled. Returns
215    /// an error if `wake_locks` is signaled at the end of suspension, or an error is
216    /// encountered when suspending the container's processes.
217    pub fn r#suspend_container(
218        &self,
219        mut payload: ManagerSuspendContainerRequest,
220        ___deadline: zx::MonotonicInstant,
221    ) -> Result<ManagerSuspendContainerResult, fidl::Error> {
222        let _response = self.client.send_query::<
223            ManagerSuspendContainerRequest,
224            fidl::encoding::FlexibleResultType<ManagerSuspendContainerResponse, SuspendError>,
225        >(
226            &mut payload,
227            0x928527927c9f2a7,
228            fidl::encoding::DynamicFlags::FLEXIBLE,
229            ___deadline,
230        )?
231        .into_result::<ManagerMarker>("suspend_container")?;
232        Ok(_response.map(|x| x))
233    }
234
235    /// Creates a pass-through proxy that forwards messages between the `container_channel` and the
236    /// `remote_channel`.
237    ///
238    /// If any messages arrive on `remote_channel` while the container is suspended via
239    /// `SuspendContainer`, the container will be resumed and `counter` will be incremented.
240    ///
241    /// Once that message is handled by the container, and it's ok to suspend the container again
242    /// (relative to that message), the counter is expected to be decremented.
243    pub fn r#proxy_wake_channel(
244        &self,
245        mut payload: ManagerProxyWakeChannelRequest,
246    ) -> Result<(), fidl::Error> {
247        self.client.send::<ManagerProxyWakeChannelRequest>(
248            &mut payload,
249            0x46a374ab73b23714,
250            fidl::encoding::DynamicFlags::FLEXIBLE,
251        )
252    }
253
254    /// Adds `signals` on `handle` as a way to prevent the container from suspending, or wake it
255    /// if it is already suspended.
256    pub fn r#add_wake_source(
257        &self,
258        mut payload: ManagerAddWakeSourceRequest,
259    ) -> Result<(), fidl::Error> {
260        self.client.send::<ManagerAddWakeSourceRequest>(
261            &mut payload,
262            0x45e94269f9722ac,
263            fidl::encoding::DynamicFlags::FLEXIBLE,
264        )
265    }
266
267    /// Removes a wake source handle from the `container_job`.
268    ///
269    /// If the container is currently suspended, the `handle` may still wake the container if
270    /// its signals are raised. To ensure that the wake source never wakes the container again
271    /// after this call, the client must make sure that the signals are cleared and not raised
272    /// again.
273    pub fn r#remove_wake_source(
274        &self,
275        mut payload: ManagerRemoveWakeSourceRequest,
276    ) -> Result<(), fidl::Error> {
277        self.client.send::<ManagerRemoveWakeSourceRequest>(
278            &mut payload,
279            0x25d311f5e801501a,
280            fidl::encoding::DynamicFlags::FLEXIBLE,
281        )
282    }
283
284    /// Registers an eventpair that will be signaled when the container is suspended or resumed.
285    /// The signals are ASLEEP(USER_1) and AWAKE(USER_0).
286    ///
287    /// The kernel returns AWAKE upon initial registration of the eventpair.
288    pub fn r#register_wake_watcher(
289        &self,
290        mut payload: ManagerRegisterWakeWatcherRequest,
291        ___deadline: zx::MonotonicInstant,
292    ) -> Result<(), fidl::Error> {
293        let _response = self.client.send_query::<
294            ManagerRegisterWakeWatcherRequest,
295            fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
296        >(
297            &mut payload,
298            0x456d74519eb65b41,
299            fidl::encoding::DynamicFlags::FLEXIBLE,
300            ___deadline,
301        )?
302        .into_result::<ManagerMarker>("register_wake_watcher")?;
303        Ok(_response)
304    }
305
306    /// Creates a `Pager` instance with the provided `backing_vmo` and `block_size`.
307    pub fn r#create_pager(
308        &self,
309        mut payload: ManagerCreatePagerRequest,
310    ) -> Result<(), fidl::Error> {
311        self.client.send::<ManagerCreatePagerRequest>(
312            &mut payload,
313            0x49d14958b736198b,
314            fidl::encoding::DynamicFlags::FLEXIBLE,
315        )
316    }
317}
318
319#[cfg(target_os = "fuchsia")]
320impl From<ManagerSynchronousProxy> for zx::NullableHandle {
321    fn from(value: ManagerSynchronousProxy) -> Self {
322        value.into_channel().into()
323    }
324}
325
326#[cfg(target_os = "fuchsia")]
327impl From<fidl::Channel> for ManagerSynchronousProxy {
328    fn from(value: fidl::Channel) -> Self {
329        Self::new(value)
330    }
331}
332
333#[cfg(target_os = "fuchsia")]
334impl fidl::endpoints::FromClient for ManagerSynchronousProxy {
335    type Protocol = ManagerMarker;
336
337    fn from_client(value: fidl::endpoints::ClientEnd<ManagerMarker>) -> Self {
338        Self::new(value.into_channel())
339    }
340}
341
342#[derive(Debug, Clone)]
343pub struct ManagerProxy {
344    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
345}
346
347impl fidl::endpoints::Proxy for ManagerProxy {
348    type Protocol = ManagerMarker;
349
350    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
351        Self::new(inner)
352    }
353
354    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
355        self.client.into_channel().map_err(|client| Self { client })
356    }
357
358    fn as_channel(&self) -> &::fidl::AsyncChannel {
359        self.client.as_channel()
360    }
361}
362
363impl ManagerProxy {
364    /// Create a new Proxy for fuchsia.starnix.runner/Manager.
365    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
366        let protocol_name = <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
367        Self { client: fidl::client::Client::new(channel, protocol_name) }
368    }
369
370    /// Get a Stream of events from the remote end of the protocol.
371    ///
372    /// # Panics
373    ///
374    /// Panics if the event stream was already taken.
375    pub fn take_event_stream(&self) -> ManagerEventStream {
376        ManagerEventStream { event_receiver: self.client.take_event_receiver() }
377    }
378
379    /// Suspends the container running in `job`.
380    ///
381    /// The call will return successfully when `wake_event` has been signaled. Returns
382    /// an error if `wake_locks` is signaled at the end of suspension, or an error is
383    /// encountered when suspending the container's processes.
384    pub fn r#suspend_container(
385        &self,
386        mut payload: ManagerSuspendContainerRequest,
387    ) -> fidl::client::QueryResponseFut<
388        ManagerSuspendContainerResult,
389        fidl::encoding::DefaultFuchsiaResourceDialect,
390    > {
391        ManagerProxyInterface::r#suspend_container(self, payload)
392    }
393
394    /// Creates a pass-through proxy that forwards messages between the `container_channel` and the
395    /// `remote_channel`.
396    ///
397    /// If any messages arrive on `remote_channel` while the container is suspended via
398    /// `SuspendContainer`, the container will be resumed and `counter` will be incremented.
399    ///
400    /// Once that message is handled by the container, and it's ok to suspend the container again
401    /// (relative to that message), the counter is expected to be decremented.
402    pub fn r#proxy_wake_channel(
403        &self,
404        mut payload: ManagerProxyWakeChannelRequest,
405    ) -> Result<(), fidl::Error> {
406        ManagerProxyInterface::r#proxy_wake_channel(self, payload)
407    }
408
409    /// Adds `signals` on `handle` as a way to prevent the container from suspending, or wake it
410    /// if it is already suspended.
411    pub fn r#add_wake_source(
412        &self,
413        mut payload: ManagerAddWakeSourceRequest,
414    ) -> Result<(), fidl::Error> {
415        ManagerProxyInterface::r#add_wake_source(self, payload)
416    }
417
418    /// Removes a wake source handle from the `container_job`.
419    ///
420    /// If the container is currently suspended, the `handle` may still wake the container if
421    /// its signals are raised. To ensure that the wake source never wakes the container again
422    /// after this call, the client must make sure that the signals are cleared and not raised
423    /// again.
424    pub fn r#remove_wake_source(
425        &self,
426        mut payload: ManagerRemoveWakeSourceRequest,
427    ) -> Result<(), fidl::Error> {
428        ManagerProxyInterface::r#remove_wake_source(self, payload)
429    }
430
431    /// Registers an eventpair that will be signaled when the container is suspended or resumed.
432    /// The signals are ASLEEP(USER_1) and AWAKE(USER_0).
433    ///
434    /// The kernel returns AWAKE upon initial registration of the eventpair.
435    pub fn r#register_wake_watcher(
436        &self,
437        mut payload: ManagerRegisterWakeWatcherRequest,
438    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
439        ManagerProxyInterface::r#register_wake_watcher(self, payload)
440    }
441
442    /// Creates a `Pager` instance with the provided `backing_vmo` and `block_size`.
443    pub fn r#create_pager(
444        &self,
445        mut payload: ManagerCreatePagerRequest,
446    ) -> Result<(), fidl::Error> {
447        ManagerProxyInterface::r#create_pager(self, payload)
448    }
449}
450
451impl ManagerProxyInterface for ManagerProxy {
452    type SuspendContainerResponseFut = fidl::client::QueryResponseFut<
453        ManagerSuspendContainerResult,
454        fidl::encoding::DefaultFuchsiaResourceDialect,
455    >;
456    fn r#suspend_container(
457        &self,
458        mut payload: ManagerSuspendContainerRequest,
459    ) -> Self::SuspendContainerResponseFut {
460        fn _decode(
461            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
462        ) -> Result<ManagerSuspendContainerResult, fidl::Error> {
463            let _response = fidl::client::decode_transaction_body::<
464                fidl::encoding::FlexibleResultType<ManagerSuspendContainerResponse, SuspendError>,
465                fidl::encoding::DefaultFuchsiaResourceDialect,
466                0x928527927c9f2a7,
467            >(_buf?)?
468            .into_result::<ManagerMarker>("suspend_container")?;
469            Ok(_response.map(|x| x))
470        }
471        self.client
472            .send_query_and_decode::<ManagerSuspendContainerRequest, ManagerSuspendContainerResult>(
473                &mut payload,
474                0x928527927c9f2a7,
475                fidl::encoding::DynamicFlags::FLEXIBLE,
476                _decode,
477            )
478    }
479
480    fn r#proxy_wake_channel(
481        &self,
482        mut payload: ManagerProxyWakeChannelRequest,
483    ) -> Result<(), fidl::Error> {
484        self.client.send::<ManagerProxyWakeChannelRequest>(
485            &mut payload,
486            0x46a374ab73b23714,
487            fidl::encoding::DynamicFlags::FLEXIBLE,
488        )
489    }
490
491    fn r#add_wake_source(
492        &self,
493        mut payload: ManagerAddWakeSourceRequest,
494    ) -> Result<(), fidl::Error> {
495        self.client.send::<ManagerAddWakeSourceRequest>(
496            &mut payload,
497            0x45e94269f9722ac,
498            fidl::encoding::DynamicFlags::FLEXIBLE,
499        )
500    }
501
502    fn r#remove_wake_source(
503        &self,
504        mut payload: ManagerRemoveWakeSourceRequest,
505    ) -> Result<(), fidl::Error> {
506        self.client.send::<ManagerRemoveWakeSourceRequest>(
507            &mut payload,
508            0x25d311f5e801501a,
509            fidl::encoding::DynamicFlags::FLEXIBLE,
510        )
511    }
512
513    type RegisterWakeWatcherResponseFut =
514        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
515    fn r#register_wake_watcher(
516        &self,
517        mut payload: ManagerRegisterWakeWatcherRequest,
518    ) -> Self::RegisterWakeWatcherResponseFut {
519        fn _decode(
520            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
521        ) -> Result<(), fidl::Error> {
522            let _response = fidl::client::decode_transaction_body::<
523                fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
524                fidl::encoding::DefaultFuchsiaResourceDialect,
525                0x456d74519eb65b41,
526            >(_buf?)?
527            .into_result::<ManagerMarker>("register_wake_watcher")?;
528            Ok(_response)
529        }
530        self.client.send_query_and_decode::<ManagerRegisterWakeWatcherRequest, ()>(
531            &mut payload,
532            0x456d74519eb65b41,
533            fidl::encoding::DynamicFlags::FLEXIBLE,
534            _decode,
535        )
536    }
537
538    fn r#create_pager(&self, mut payload: ManagerCreatePagerRequest) -> Result<(), fidl::Error> {
539        self.client.send::<ManagerCreatePagerRequest>(
540            &mut payload,
541            0x49d14958b736198b,
542            fidl::encoding::DynamicFlags::FLEXIBLE,
543        )
544    }
545}
546
547pub struct ManagerEventStream {
548    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
549}
550
551impl std::marker::Unpin for ManagerEventStream {}
552
553impl futures::stream::FusedStream for ManagerEventStream {
554    fn is_terminated(&self) -> bool {
555        self.event_receiver.is_terminated()
556    }
557}
558
559impl futures::Stream for ManagerEventStream {
560    type Item = Result<ManagerEvent, fidl::Error>;
561
562    fn poll_next(
563        mut self: std::pin::Pin<&mut Self>,
564        cx: &mut std::task::Context<'_>,
565    ) -> std::task::Poll<Option<Self::Item>> {
566        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
567            &mut self.event_receiver,
568            cx
569        )?) {
570            Some(buf) => std::task::Poll::Ready(Some(ManagerEvent::decode(buf))),
571            None => std::task::Poll::Ready(None),
572        }
573    }
574}
575
576#[derive(Debug)]
577pub enum ManagerEvent {
578    #[non_exhaustive]
579    _UnknownEvent {
580        /// Ordinal of the event that was sent.
581        ordinal: u64,
582    },
583}
584
585impl ManagerEvent {
586    /// Decodes a message buffer as a [`ManagerEvent`].
587    fn decode(
588        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
589    ) -> Result<ManagerEvent, fidl::Error> {
590        let (bytes, _handles) = buf.split_mut();
591        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
592        debug_assert_eq!(tx_header.tx_id, 0);
593        match tx_header.ordinal {
594            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
595                Ok(ManagerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
596            }
597            _ => Err(fidl::Error::UnknownOrdinal {
598                ordinal: tx_header.ordinal,
599                protocol_name: <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
600            }),
601        }
602    }
603}
604
605/// A Stream of incoming requests for fuchsia.starnix.runner/Manager.
606pub struct ManagerRequestStream {
607    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
608    is_terminated: bool,
609}
610
611impl std::marker::Unpin for ManagerRequestStream {}
612
613impl futures::stream::FusedStream for ManagerRequestStream {
614    fn is_terminated(&self) -> bool {
615        self.is_terminated
616    }
617}
618
619impl fidl::endpoints::RequestStream for ManagerRequestStream {
620    type Protocol = ManagerMarker;
621    type ControlHandle = ManagerControlHandle;
622
623    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
624        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
625    }
626
627    fn control_handle(&self) -> Self::ControlHandle {
628        ManagerControlHandle { inner: self.inner.clone() }
629    }
630
631    fn into_inner(
632        self,
633    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
634    {
635        (self.inner, self.is_terminated)
636    }
637
638    fn from_inner(
639        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
640        is_terminated: bool,
641    ) -> Self {
642        Self { inner, is_terminated }
643    }
644}
645
646impl futures::Stream for ManagerRequestStream {
647    type Item = Result<ManagerRequest, fidl::Error>;
648
649    fn poll_next(
650        mut self: std::pin::Pin<&mut Self>,
651        cx: &mut std::task::Context<'_>,
652    ) -> std::task::Poll<Option<Self::Item>> {
653        let this = &mut *self;
654        if this.inner.check_shutdown(cx) {
655            this.is_terminated = true;
656            return std::task::Poll::Ready(None);
657        }
658        if this.is_terminated {
659            panic!("polled ManagerRequestStream after completion");
660        }
661        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
662            |bytes, handles| {
663                match this.inner.channel().read_etc(cx, bytes, handles) {
664                    std::task::Poll::Ready(Ok(())) => {}
665                    std::task::Poll::Pending => return std::task::Poll::Pending,
666                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
667                        this.is_terminated = true;
668                        return std::task::Poll::Ready(None);
669                    }
670                    std::task::Poll::Ready(Err(e)) => {
671                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
672                            e.into(),
673                        ))));
674                    }
675                }
676
677                // A message has been received from the channel
678                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
679
680                std::task::Poll::Ready(Some(match header.ordinal {
681                    0x928527927c9f2a7 => {
682                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
683                        let mut req = fidl::new_empty!(
684                            ManagerSuspendContainerRequest,
685                            fidl::encoding::DefaultFuchsiaResourceDialect
686                        );
687                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerSuspendContainerRequest>(&header, _body_bytes, handles, &mut req)?;
688                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
689                        Ok(ManagerRequest::SuspendContainer {
690                            payload: req,
691                            responder: ManagerSuspendContainerResponder {
692                                control_handle: std::mem::ManuallyDrop::new(control_handle),
693                                tx_id: header.tx_id,
694                            },
695                        })
696                    }
697                    0x46a374ab73b23714 => {
698                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
699                        let mut req = fidl::new_empty!(
700                            ManagerProxyWakeChannelRequest,
701                            fidl::encoding::DefaultFuchsiaResourceDialect
702                        );
703                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerProxyWakeChannelRequest>(&header, _body_bytes, handles, &mut req)?;
704                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
705                        Ok(ManagerRequest::ProxyWakeChannel { payload: req, control_handle })
706                    }
707                    0x45e94269f9722ac => {
708                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
709                        let mut req = fidl::new_empty!(
710                            ManagerAddWakeSourceRequest,
711                            fidl::encoding::DefaultFuchsiaResourceDialect
712                        );
713                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerAddWakeSourceRequest>(&header, _body_bytes, handles, &mut req)?;
714                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
715                        Ok(ManagerRequest::AddWakeSource { payload: req, control_handle })
716                    }
717                    0x25d311f5e801501a => {
718                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
719                        let mut req = fidl::new_empty!(
720                            ManagerRemoveWakeSourceRequest,
721                            fidl::encoding::DefaultFuchsiaResourceDialect
722                        );
723                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerRemoveWakeSourceRequest>(&header, _body_bytes, handles, &mut req)?;
724                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
725                        Ok(ManagerRequest::RemoveWakeSource { payload: req, control_handle })
726                    }
727                    0x456d74519eb65b41 => {
728                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
729                        let mut req = fidl::new_empty!(
730                            ManagerRegisterWakeWatcherRequest,
731                            fidl::encoding::DefaultFuchsiaResourceDialect
732                        );
733                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerRegisterWakeWatcherRequest>(&header, _body_bytes, handles, &mut req)?;
734                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
735                        Ok(ManagerRequest::RegisterWakeWatcher {
736                            payload: req,
737                            responder: ManagerRegisterWakeWatcherResponder {
738                                control_handle: std::mem::ManuallyDrop::new(control_handle),
739                                tx_id: header.tx_id,
740                            },
741                        })
742                    }
743                    0x49d14958b736198b => {
744                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
745                        let mut req = fidl::new_empty!(
746                            ManagerCreatePagerRequest,
747                            fidl::encoding::DefaultFuchsiaResourceDialect
748                        );
749                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ManagerCreatePagerRequest>(&header, _body_bytes, handles, &mut req)?;
750                        let control_handle = ManagerControlHandle { inner: this.inner.clone() };
751                        Ok(ManagerRequest::CreatePager { payload: req, control_handle })
752                    }
753                    _ if header.tx_id == 0
754                        && header
755                            .dynamic_flags()
756                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
757                    {
758                        Ok(ManagerRequest::_UnknownMethod {
759                            ordinal: header.ordinal,
760                            control_handle: ManagerControlHandle { inner: this.inner.clone() },
761                            method_type: fidl::MethodType::OneWay,
762                        })
763                    }
764                    _ if header
765                        .dynamic_flags()
766                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
767                    {
768                        this.inner.send_framework_err(
769                            fidl::encoding::FrameworkErr::UnknownMethod,
770                            header.tx_id,
771                            header.ordinal,
772                            header.dynamic_flags(),
773                            (bytes, handles),
774                        )?;
775                        Ok(ManagerRequest::_UnknownMethod {
776                            ordinal: header.ordinal,
777                            control_handle: ManagerControlHandle { inner: this.inner.clone() },
778                            method_type: fidl::MethodType::TwoWay,
779                        })
780                    }
781                    _ => Err(fidl::Error::UnknownOrdinal {
782                        ordinal: header.ordinal,
783                        protocol_name:
784                            <ManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
785                    }),
786                }))
787            },
788        )
789    }
790}
791
792#[derive(Debug)]
793pub enum ManagerRequest {
794    /// Suspends the container running in `job`.
795    ///
796    /// The call will return successfully when `wake_event` has been signaled. Returns
797    /// an error if `wake_locks` is signaled at the end of suspension, or an error is
798    /// encountered when suspending the container's processes.
799    SuspendContainer {
800        payload: ManagerSuspendContainerRequest,
801        responder: ManagerSuspendContainerResponder,
802    },
803    /// Creates a pass-through proxy that forwards messages between the `container_channel` and the
804    /// `remote_channel`.
805    ///
806    /// If any messages arrive on `remote_channel` while the container is suspended via
807    /// `SuspendContainer`, the container will be resumed and `counter` will be incremented.
808    ///
809    /// Once that message is handled by the container, and it's ok to suspend the container again
810    /// (relative to that message), the counter is expected to be decremented.
811    ProxyWakeChannel {
812        payload: ManagerProxyWakeChannelRequest,
813        control_handle: ManagerControlHandle,
814    },
815    /// Adds `signals` on `handle` as a way to prevent the container from suspending, or wake it
816    /// if it is already suspended.
817    AddWakeSource { payload: ManagerAddWakeSourceRequest, control_handle: ManagerControlHandle },
818    /// Removes a wake source handle from the `container_job`.
819    ///
820    /// If the container is currently suspended, the `handle` may still wake the container if
821    /// its signals are raised. To ensure that the wake source never wakes the container again
822    /// after this call, the client must make sure that the signals are cleared and not raised
823    /// again.
824    RemoveWakeSource {
825        payload: ManagerRemoveWakeSourceRequest,
826        control_handle: ManagerControlHandle,
827    },
828    /// Registers an eventpair that will be signaled when the container is suspended or resumed.
829    /// The signals are ASLEEP(USER_1) and AWAKE(USER_0).
830    ///
831    /// The kernel returns AWAKE upon initial registration of the eventpair.
832    RegisterWakeWatcher {
833        payload: ManagerRegisterWakeWatcherRequest,
834        responder: ManagerRegisterWakeWatcherResponder,
835    },
836    /// Creates a `Pager` instance with the provided `backing_vmo` and `block_size`.
837    CreatePager { payload: ManagerCreatePagerRequest, control_handle: ManagerControlHandle },
838    /// An interaction was received which does not match any known method.
839    #[non_exhaustive]
840    _UnknownMethod {
841        /// Ordinal of the method that was called.
842        ordinal: u64,
843        control_handle: ManagerControlHandle,
844        method_type: fidl::MethodType,
845    },
846}
847
848impl ManagerRequest {
849    #[allow(irrefutable_let_patterns)]
850    pub fn into_suspend_container(
851        self,
852    ) -> Option<(ManagerSuspendContainerRequest, ManagerSuspendContainerResponder)> {
853        if let ManagerRequest::SuspendContainer { payload, responder } = self {
854            Some((payload, responder))
855        } else {
856            None
857        }
858    }
859
860    #[allow(irrefutable_let_patterns)]
861    pub fn into_proxy_wake_channel(
862        self,
863    ) -> Option<(ManagerProxyWakeChannelRequest, ManagerControlHandle)> {
864        if let ManagerRequest::ProxyWakeChannel { payload, control_handle } = self {
865            Some((payload, control_handle))
866        } else {
867            None
868        }
869    }
870
871    #[allow(irrefutable_let_patterns)]
872    pub fn into_add_wake_source(
873        self,
874    ) -> Option<(ManagerAddWakeSourceRequest, ManagerControlHandle)> {
875        if let ManagerRequest::AddWakeSource { payload, control_handle } = self {
876            Some((payload, control_handle))
877        } else {
878            None
879        }
880    }
881
882    #[allow(irrefutable_let_patterns)]
883    pub fn into_remove_wake_source(
884        self,
885    ) -> Option<(ManagerRemoveWakeSourceRequest, ManagerControlHandle)> {
886        if let ManagerRequest::RemoveWakeSource { payload, control_handle } = self {
887            Some((payload, control_handle))
888        } else {
889            None
890        }
891    }
892
893    #[allow(irrefutable_let_patterns)]
894    pub fn into_register_wake_watcher(
895        self,
896    ) -> Option<(ManagerRegisterWakeWatcherRequest, ManagerRegisterWakeWatcherResponder)> {
897        if let ManagerRequest::RegisterWakeWatcher { payload, responder } = self {
898            Some((payload, responder))
899        } else {
900            None
901        }
902    }
903
904    #[allow(irrefutable_let_patterns)]
905    pub fn into_create_pager(self) -> Option<(ManagerCreatePagerRequest, ManagerControlHandle)> {
906        if let ManagerRequest::CreatePager { payload, control_handle } = self {
907            Some((payload, control_handle))
908        } else {
909            None
910        }
911    }
912
913    /// Name of the method defined in FIDL
914    pub fn method_name(&self) -> &'static str {
915        match *self {
916            ManagerRequest::SuspendContainer { .. } => "suspend_container",
917            ManagerRequest::ProxyWakeChannel { .. } => "proxy_wake_channel",
918            ManagerRequest::AddWakeSource { .. } => "add_wake_source",
919            ManagerRequest::RemoveWakeSource { .. } => "remove_wake_source",
920            ManagerRequest::RegisterWakeWatcher { .. } => "register_wake_watcher",
921            ManagerRequest::CreatePager { .. } => "create_pager",
922            ManagerRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
923                "unknown one-way method"
924            }
925            ManagerRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
926                "unknown two-way method"
927            }
928        }
929    }
930}
931
932#[derive(Debug, Clone)]
933pub struct ManagerControlHandle {
934    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
935}
936
937impl fidl::endpoints::ControlHandle for ManagerControlHandle {
938    fn shutdown(&self) {
939        self.inner.shutdown()
940    }
941
942    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
943        self.inner.shutdown_with_epitaph(status)
944    }
945
946    fn is_closed(&self) -> bool {
947        self.inner.channel().is_closed()
948    }
949    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
950        self.inner.channel().on_closed()
951    }
952
953    #[cfg(target_os = "fuchsia")]
954    fn signal_peer(
955        &self,
956        clear_mask: zx::Signals,
957        set_mask: zx::Signals,
958    ) -> Result<(), zx_status::Status> {
959        use fidl::Peered;
960        self.inner.channel().signal_peer(clear_mask, set_mask)
961    }
962}
963
964impl ManagerControlHandle {}
965
966#[must_use = "FIDL methods require a response to be sent"]
967#[derive(Debug)]
968pub struct ManagerSuspendContainerResponder {
969    control_handle: std::mem::ManuallyDrop<ManagerControlHandle>,
970    tx_id: u32,
971}
972
973/// Set the the channel to be shutdown (see [`ManagerControlHandle::shutdown`])
974/// if the responder is dropped without sending a response, so that the client
975/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
976impl std::ops::Drop for ManagerSuspendContainerResponder {
977    fn drop(&mut self) {
978        self.control_handle.shutdown();
979        // Safety: drops once, never accessed again
980        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
981    }
982}
983
984impl fidl::endpoints::Responder for ManagerSuspendContainerResponder {
985    type ControlHandle = ManagerControlHandle;
986
987    fn control_handle(&self) -> &ManagerControlHandle {
988        &self.control_handle
989    }
990
991    fn drop_without_shutdown(mut self) {
992        // Safety: drops once, never accessed again due to mem::forget
993        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
994        // Prevent Drop from running (which would shut down the channel)
995        std::mem::forget(self);
996    }
997}
998
999impl ManagerSuspendContainerResponder {
1000    /// Sends a response to the FIDL transaction.
1001    ///
1002    /// Sets the channel to shutdown if an error occurs.
1003    pub fn send(
1004        self,
1005        mut result: Result<&ManagerSuspendContainerResponse, SuspendError>,
1006    ) -> Result<(), fidl::Error> {
1007        let _result = self.send_raw(result);
1008        if _result.is_err() {
1009            self.control_handle.shutdown();
1010        }
1011        self.drop_without_shutdown();
1012        _result
1013    }
1014
1015    /// Similar to "send" but does not shutdown the channel if an error occurs.
1016    pub fn send_no_shutdown_on_err(
1017        self,
1018        mut result: Result<&ManagerSuspendContainerResponse, SuspendError>,
1019    ) -> Result<(), fidl::Error> {
1020        let _result = self.send_raw(result);
1021        self.drop_without_shutdown();
1022        _result
1023    }
1024
1025    fn send_raw(
1026        &self,
1027        mut result: Result<&ManagerSuspendContainerResponse, SuspendError>,
1028    ) -> Result<(), fidl::Error> {
1029        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1030            ManagerSuspendContainerResponse,
1031            SuspendError,
1032        >>(
1033            fidl::encoding::FlexibleResult::new(result),
1034            self.tx_id,
1035            0x928527927c9f2a7,
1036            fidl::encoding::DynamicFlags::FLEXIBLE,
1037        )
1038    }
1039}
1040
1041#[must_use = "FIDL methods require a response to be sent"]
1042#[derive(Debug)]
1043pub struct ManagerRegisterWakeWatcherResponder {
1044    control_handle: std::mem::ManuallyDrop<ManagerControlHandle>,
1045    tx_id: u32,
1046}
1047
1048/// Set the the channel to be shutdown (see [`ManagerControlHandle::shutdown`])
1049/// if the responder is dropped without sending a response, so that the client
1050/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1051impl std::ops::Drop for ManagerRegisterWakeWatcherResponder {
1052    fn drop(&mut self) {
1053        self.control_handle.shutdown();
1054        // Safety: drops once, never accessed again
1055        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1056    }
1057}
1058
1059impl fidl::endpoints::Responder for ManagerRegisterWakeWatcherResponder {
1060    type ControlHandle = ManagerControlHandle;
1061
1062    fn control_handle(&self) -> &ManagerControlHandle {
1063        &self.control_handle
1064    }
1065
1066    fn drop_without_shutdown(mut self) {
1067        // Safety: drops once, never accessed again due to mem::forget
1068        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1069        // Prevent Drop from running (which would shut down the channel)
1070        std::mem::forget(self);
1071    }
1072}
1073
1074impl ManagerRegisterWakeWatcherResponder {
1075    /// Sends a response to the FIDL transaction.
1076    ///
1077    /// Sets the channel to shutdown if an error occurs.
1078    pub fn send(self) -> Result<(), fidl::Error> {
1079        let _result = self.send_raw();
1080        if _result.is_err() {
1081            self.control_handle.shutdown();
1082        }
1083        self.drop_without_shutdown();
1084        _result
1085    }
1086
1087    /// Similar to "send" but does not shutdown the channel if an error occurs.
1088    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
1089        let _result = self.send_raw();
1090        self.drop_without_shutdown();
1091        _result
1092    }
1093
1094    fn send_raw(&self) -> Result<(), fidl::Error> {
1095        self.control_handle.inner.send::<fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>>(
1096            fidl::encoding::Flexible::new(()),
1097            self.tx_id,
1098            0x456d74519eb65b41,
1099            fidl::encoding::DynamicFlags::FLEXIBLE,
1100        )
1101    }
1102}
1103
1104#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1105pub struct PagerMarker;
1106
1107impl fidl::endpoints::ProtocolMarker for PagerMarker {
1108    type Proxy = PagerProxy;
1109    type RequestStream = PagerRequestStream;
1110    #[cfg(target_os = "fuchsia")]
1111    type SynchronousProxy = PagerSynchronousProxy;
1112
1113    const DEBUG_NAME: &'static str = "(anonymous) Pager";
1114}
1115pub type PagerRegisterFileResult = Result<PagerRegisterFileResponse, i32>;
1116
1117pub trait PagerProxyInterface: Send + Sync {
1118    type RegisterFileResponseFut: std::future::Future<Output = Result<PagerRegisterFileResult, fidl::Error>>
1119        + Send;
1120    fn r#register_file(&self, payload: &PagerRegisterFileRequest) -> Self::RegisterFileResponseFut;
1121}
1122#[derive(Debug)]
1123#[cfg(target_os = "fuchsia")]
1124pub struct PagerSynchronousProxy {
1125    client: fidl::client::sync::Client,
1126}
1127
1128#[cfg(target_os = "fuchsia")]
1129impl fidl::endpoints::SynchronousProxy for PagerSynchronousProxy {
1130    type Proxy = PagerProxy;
1131    type Protocol = PagerMarker;
1132
1133    fn from_channel(inner: fidl::Channel) -> Self {
1134        Self::new(inner)
1135    }
1136
1137    fn into_channel(self) -> fidl::Channel {
1138        self.client.into_channel()
1139    }
1140
1141    fn as_channel(&self) -> &fidl::Channel {
1142        self.client.as_channel()
1143    }
1144}
1145
1146#[cfg(target_os = "fuchsia")]
1147impl PagerSynchronousProxy {
1148    pub fn new(channel: fidl::Channel) -> Self {
1149        let protocol_name = <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1150        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1151    }
1152
1153    pub fn into_channel(self) -> fidl::Channel {
1154        self.client.into_channel()
1155    }
1156
1157    /// Waits until an event arrives and returns it. It is safe for other
1158    /// threads to make concurrent requests while waiting for an event.
1159    pub fn wait_for_event(
1160        &self,
1161        deadline: zx::MonotonicInstant,
1162    ) -> Result<PagerEvent, fidl::Error> {
1163        PagerEvent::decode(self.client.wait_for_event(deadline)?)
1164    }
1165
1166    /// Registers a file with the pager.
1167    pub fn r#register_file(
1168        &self,
1169        mut payload: &PagerRegisterFileRequest,
1170        ___deadline: zx::MonotonicInstant,
1171    ) -> Result<PagerRegisterFileResult, fidl::Error> {
1172        let _response = self.client.send_query::<
1173            PagerRegisterFileRequest,
1174            fidl::encoding::FlexibleResultType<PagerRegisterFileResponse, i32>,
1175        >(
1176            payload,
1177            0x4f85a2ce6cae4aed,
1178            fidl::encoding::DynamicFlags::FLEXIBLE,
1179            ___deadline,
1180        )?
1181        .into_result::<PagerMarker>("register_file")?;
1182        Ok(_response.map(|x| x))
1183    }
1184}
1185
1186#[cfg(target_os = "fuchsia")]
1187impl From<PagerSynchronousProxy> for zx::NullableHandle {
1188    fn from(value: PagerSynchronousProxy) -> Self {
1189        value.into_channel().into()
1190    }
1191}
1192
1193#[cfg(target_os = "fuchsia")]
1194impl From<fidl::Channel> for PagerSynchronousProxy {
1195    fn from(value: fidl::Channel) -> Self {
1196        Self::new(value)
1197    }
1198}
1199
1200#[cfg(target_os = "fuchsia")]
1201impl fidl::endpoints::FromClient for PagerSynchronousProxy {
1202    type Protocol = PagerMarker;
1203
1204    fn from_client(value: fidl::endpoints::ClientEnd<PagerMarker>) -> Self {
1205        Self::new(value.into_channel())
1206    }
1207}
1208
1209#[derive(Debug, Clone)]
1210pub struct PagerProxy {
1211    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1212}
1213
1214impl fidl::endpoints::Proxy for PagerProxy {
1215    type Protocol = PagerMarker;
1216
1217    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1218        Self::new(inner)
1219    }
1220
1221    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1222        self.client.into_channel().map_err(|client| Self { client })
1223    }
1224
1225    fn as_channel(&self) -> &::fidl::AsyncChannel {
1226        self.client.as_channel()
1227    }
1228}
1229
1230impl PagerProxy {
1231    /// Create a new Proxy for fuchsia.starnix.runner/Pager.
1232    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1233        let protocol_name = <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1234        Self { client: fidl::client::Client::new(channel, protocol_name) }
1235    }
1236
1237    /// Get a Stream of events from the remote end of the protocol.
1238    ///
1239    /// # Panics
1240    ///
1241    /// Panics if the event stream was already taken.
1242    pub fn take_event_stream(&self) -> PagerEventStream {
1243        PagerEventStream { event_receiver: self.client.take_event_receiver() }
1244    }
1245
1246    /// Registers a file with the pager.
1247    pub fn r#register_file(
1248        &self,
1249        mut payload: &PagerRegisterFileRequest,
1250    ) -> fidl::client::QueryResponseFut<
1251        PagerRegisterFileResult,
1252        fidl::encoding::DefaultFuchsiaResourceDialect,
1253    > {
1254        PagerProxyInterface::r#register_file(self, payload)
1255    }
1256}
1257
1258impl PagerProxyInterface for PagerProxy {
1259    type RegisterFileResponseFut = fidl::client::QueryResponseFut<
1260        PagerRegisterFileResult,
1261        fidl::encoding::DefaultFuchsiaResourceDialect,
1262    >;
1263    fn r#register_file(
1264        &self,
1265        mut payload: &PagerRegisterFileRequest,
1266    ) -> Self::RegisterFileResponseFut {
1267        fn _decode(
1268            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1269        ) -> Result<PagerRegisterFileResult, fidl::Error> {
1270            let _response = fidl::client::decode_transaction_body::<
1271                fidl::encoding::FlexibleResultType<PagerRegisterFileResponse, i32>,
1272                fidl::encoding::DefaultFuchsiaResourceDialect,
1273                0x4f85a2ce6cae4aed,
1274            >(_buf?)?
1275            .into_result::<PagerMarker>("register_file")?;
1276            Ok(_response.map(|x| x))
1277        }
1278        self.client.send_query_and_decode::<PagerRegisterFileRequest, PagerRegisterFileResult>(
1279            payload,
1280            0x4f85a2ce6cae4aed,
1281            fidl::encoding::DynamicFlags::FLEXIBLE,
1282            _decode,
1283        )
1284    }
1285}
1286
1287pub struct PagerEventStream {
1288    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1289}
1290
1291impl std::marker::Unpin for PagerEventStream {}
1292
1293impl futures::stream::FusedStream for PagerEventStream {
1294    fn is_terminated(&self) -> bool {
1295        self.event_receiver.is_terminated()
1296    }
1297}
1298
1299impl futures::Stream for PagerEventStream {
1300    type Item = Result<PagerEvent, fidl::Error>;
1301
1302    fn poll_next(
1303        mut self: std::pin::Pin<&mut Self>,
1304        cx: &mut std::task::Context<'_>,
1305    ) -> std::task::Poll<Option<Self::Item>> {
1306        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1307            &mut self.event_receiver,
1308            cx
1309        )?) {
1310            Some(buf) => std::task::Poll::Ready(Some(PagerEvent::decode(buf))),
1311            None => std::task::Poll::Ready(None),
1312        }
1313    }
1314}
1315
1316#[derive(Debug)]
1317pub enum PagerEvent {
1318    #[non_exhaustive]
1319    _UnknownEvent {
1320        /// Ordinal of the event that was sent.
1321        ordinal: u64,
1322    },
1323}
1324
1325impl PagerEvent {
1326    /// Decodes a message buffer as a [`PagerEvent`].
1327    fn decode(
1328        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1329    ) -> Result<PagerEvent, fidl::Error> {
1330        let (bytes, _handles) = buf.split_mut();
1331        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1332        debug_assert_eq!(tx_header.tx_id, 0);
1333        match tx_header.ordinal {
1334            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1335                Ok(PagerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1336            }
1337            _ => Err(fidl::Error::UnknownOrdinal {
1338                ordinal: tx_header.ordinal,
1339                protocol_name: <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1340            }),
1341        }
1342    }
1343}
1344
1345/// A Stream of incoming requests for fuchsia.starnix.runner/Pager.
1346pub struct PagerRequestStream {
1347    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1348    is_terminated: bool,
1349}
1350
1351impl std::marker::Unpin for PagerRequestStream {}
1352
1353impl futures::stream::FusedStream for PagerRequestStream {
1354    fn is_terminated(&self) -> bool {
1355        self.is_terminated
1356    }
1357}
1358
1359impl fidl::endpoints::RequestStream for PagerRequestStream {
1360    type Protocol = PagerMarker;
1361    type ControlHandle = PagerControlHandle;
1362
1363    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1364        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1365    }
1366
1367    fn control_handle(&self) -> Self::ControlHandle {
1368        PagerControlHandle { inner: self.inner.clone() }
1369    }
1370
1371    fn into_inner(
1372        self,
1373    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1374    {
1375        (self.inner, self.is_terminated)
1376    }
1377
1378    fn from_inner(
1379        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1380        is_terminated: bool,
1381    ) -> Self {
1382        Self { inner, is_terminated }
1383    }
1384}
1385
1386impl futures::Stream for PagerRequestStream {
1387    type Item = Result<PagerRequest, fidl::Error>;
1388
1389    fn poll_next(
1390        mut self: std::pin::Pin<&mut Self>,
1391        cx: &mut std::task::Context<'_>,
1392    ) -> std::task::Poll<Option<Self::Item>> {
1393        let this = &mut *self;
1394        if this.inner.check_shutdown(cx) {
1395            this.is_terminated = true;
1396            return std::task::Poll::Ready(None);
1397        }
1398        if this.is_terminated {
1399            panic!("polled PagerRequestStream after completion");
1400        }
1401        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1402            |bytes, handles| {
1403                match this.inner.channel().read_etc(cx, bytes, handles) {
1404                    std::task::Poll::Ready(Ok(())) => {}
1405                    std::task::Poll::Pending => return std::task::Poll::Pending,
1406                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1407                        this.is_terminated = true;
1408                        return std::task::Poll::Ready(None);
1409                    }
1410                    std::task::Poll::Ready(Err(e)) => {
1411                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1412                            e.into(),
1413                        ))));
1414                    }
1415                }
1416
1417                // A message has been received from the channel
1418                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1419
1420                std::task::Poll::Ready(Some(match header.ordinal {
1421                    0x4f85a2ce6cae4aed => {
1422                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1423                        let mut req = fidl::new_empty!(
1424                            PagerRegisterFileRequest,
1425                            fidl::encoding::DefaultFuchsiaResourceDialect
1426                        );
1427                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PagerRegisterFileRequest>(&header, _body_bytes, handles, &mut req)?;
1428                        let control_handle = PagerControlHandle { inner: this.inner.clone() };
1429                        Ok(PagerRequest::RegisterFile {
1430                            payload: req,
1431                            responder: PagerRegisterFileResponder {
1432                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1433                                tx_id: header.tx_id,
1434                            },
1435                        })
1436                    }
1437                    _ if header.tx_id == 0
1438                        && header
1439                            .dynamic_flags()
1440                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1441                    {
1442                        Ok(PagerRequest::_UnknownMethod {
1443                            ordinal: header.ordinal,
1444                            control_handle: PagerControlHandle { inner: this.inner.clone() },
1445                            method_type: fidl::MethodType::OneWay,
1446                        })
1447                    }
1448                    _ if header
1449                        .dynamic_flags()
1450                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1451                    {
1452                        this.inner.send_framework_err(
1453                            fidl::encoding::FrameworkErr::UnknownMethod,
1454                            header.tx_id,
1455                            header.ordinal,
1456                            header.dynamic_flags(),
1457                            (bytes, handles),
1458                        )?;
1459                        Ok(PagerRequest::_UnknownMethod {
1460                            ordinal: header.ordinal,
1461                            control_handle: PagerControlHandle { inner: this.inner.clone() },
1462                            method_type: fidl::MethodType::TwoWay,
1463                        })
1464                    }
1465                    _ => Err(fidl::Error::UnknownOrdinal {
1466                        ordinal: header.ordinal,
1467                        protocol_name: <PagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1468                    }),
1469                }))
1470            },
1471        )
1472    }
1473}
1474
1475#[derive(Debug)]
1476pub enum PagerRequest {
1477    /// Registers a file with the pager.
1478    RegisterFile { payload: PagerRegisterFileRequest, responder: PagerRegisterFileResponder },
1479    /// An interaction was received which does not match any known method.
1480    #[non_exhaustive]
1481    _UnknownMethod {
1482        /// Ordinal of the method that was called.
1483        ordinal: u64,
1484        control_handle: PagerControlHandle,
1485        method_type: fidl::MethodType,
1486    },
1487}
1488
1489impl PagerRequest {
1490    #[allow(irrefutable_let_patterns)]
1491    pub fn into_register_file(
1492        self,
1493    ) -> Option<(PagerRegisterFileRequest, PagerRegisterFileResponder)> {
1494        if let PagerRequest::RegisterFile { payload, responder } = self {
1495            Some((payload, responder))
1496        } else {
1497            None
1498        }
1499    }
1500
1501    /// Name of the method defined in FIDL
1502    pub fn method_name(&self) -> &'static str {
1503        match *self {
1504            PagerRequest::RegisterFile { .. } => "register_file",
1505            PagerRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
1506                "unknown one-way method"
1507            }
1508            PagerRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
1509                "unknown two-way method"
1510            }
1511        }
1512    }
1513}
1514
1515#[derive(Debug, Clone)]
1516pub struct PagerControlHandle {
1517    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1518}
1519
1520impl fidl::endpoints::ControlHandle for PagerControlHandle {
1521    fn shutdown(&self) {
1522        self.inner.shutdown()
1523    }
1524
1525    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1526        self.inner.shutdown_with_epitaph(status)
1527    }
1528
1529    fn is_closed(&self) -> bool {
1530        self.inner.channel().is_closed()
1531    }
1532    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1533        self.inner.channel().on_closed()
1534    }
1535
1536    #[cfg(target_os = "fuchsia")]
1537    fn signal_peer(
1538        &self,
1539        clear_mask: zx::Signals,
1540        set_mask: zx::Signals,
1541    ) -> Result<(), zx_status::Status> {
1542        use fidl::Peered;
1543        self.inner.channel().signal_peer(clear_mask, set_mask)
1544    }
1545}
1546
1547impl PagerControlHandle {}
1548
1549#[must_use = "FIDL methods require a response to be sent"]
1550#[derive(Debug)]
1551pub struct PagerRegisterFileResponder {
1552    control_handle: std::mem::ManuallyDrop<PagerControlHandle>,
1553    tx_id: u32,
1554}
1555
1556/// Set the the channel to be shutdown (see [`PagerControlHandle::shutdown`])
1557/// if the responder is dropped without sending a response, so that the client
1558/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1559impl std::ops::Drop for PagerRegisterFileResponder {
1560    fn drop(&mut self) {
1561        self.control_handle.shutdown();
1562        // Safety: drops once, never accessed again
1563        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1564    }
1565}
1566
1567impl fidl::endpoints::Responder for PagerRegisterFileResponder {
1568    type ControlHandle = PagerControlHandle;
1569
1570    fn control_handle(&self) -> &PagerControlHandle {
1571        &self.control_handle
1572    }
1573
1574    fn drop_without_shutdown(mut self) {
1575        // Safety: drops once, never accessed again due to mem::forget
1576        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1577        // Prevent Drop from running (which would shut down the channel)
1578        std::mem::forget(self);
1579    }
1580}
1581
1582impl PagerRegisterFileResponder {
1583    /// Sends a response to the FIDL transaction.
1584    ///
1585    /// Sets the channel to shutdown if an error occurs.
1586    pub fn send(
1587        self,
1588        mut result: Result<PagerRegisterFileResponse, i32>,
1589    ) -> Result<(), fidl::Error> {
1590        let _result = self.send_raw(result);
1591        if _result.is_err() {
1592            self.control_handle.shutdown();
1593        }
1594        self.drop_without_shutdown();
1595        _result
1596    }
1597
1598    /// Similar to "send" but does not shutdown the channel if an error occurs.
1599    pub fn send_no_shutdown_on_err(
1600        self,
1601        mut result: Result<PagerRegisterFileResponse, i32>,
1602    ) -> Result<(), fidl::Error> {
1603        let _result = self.send_raw(result);
1604        self.drop_without_shutdown();
1605        _result
1606    }
1607
1608    fn send_raw(
1609        &self,
1610        mut result: Result<PagerRegisterFileResponse, i32>,
1611    ) -> Result<(), fidl::Error> {
1612        self.control_handle
1613            .inner
1614            .send::<fidl::encoding::FlexibleResultType<PagerRegisterFileResponse, i32>>(
1615                fidl::encoding::FlexibleResult::new(result.as_mut().map_err(|e| *e)),
1616                self.tx_id,
1617                0x4f85a2ce6cae4aed,
1618                fidl::encoding::DynamicFlags::FLEXIBLE,
1619            )
1620    }
1621}
1622
1623mod internal {
1624    use super::*;
1625
1626    impl ManagerAddWakeSourceRequest {
1627        #[inline(always)]
1628        fn max_ordinal_present(&self) -> u64 {
1629            if let Some(_) = self.signals {
1630                return 4;
1631            }
1632            if let Some(_) = self.handle {
1633                return 3;
1634            }
1635            if let Some(_) = self.name {
1636                return 2;
1637            }
1638            if let Some(_) = self.container_job {
1639                return 1;
1640            }
1641            0
1642        }
1643    }
1644
1645    impl fidl::encoding::ResourceTypeMarker for ManagerAddWakeSourceRequest {
1646        type Borrowed<'a> = &'a mut Self;
1647        fn take_or_borrow<'a>(
1648            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1649        ) -> Self::Borrowed<'a> {
1650            value
1651        }
1652    }
1653
1654    unsafe impl fidl::encoding::TypeMarker for ManagerAddWakeSourceRequest {
1655        type Owned = Self;
1656
1657        #[inline(always)]
1658        fn inline_align(_context: fidl::encoding::Context) -> usize {
1659            8
1660        }
1661
1662        #[inline(always)]
1663        fn inline_size(_context: fidl::encoding::Context) -> usize {
1664            16
1665        }
1666    }
1667
1668    unsafe impl
1669        fidl::encoding::Encode<
1670            ManagerAddWakeSourceRequest,
1671            fidl::encoding::DefaultFuchsiaResourceDialect,
1672        > for &mut ManagerAddWakeSourceRequest
1673    {
1674        unsafe fn encode(
1675            self,
1676            encoder: &mut fidl::encoding::Encoder<
1677                '_,
1678                fidl::encoding::DefaultFuchsiaResourceDialect,
1679            >,
1680            offset: usize,
1681            mut depth: fidl::encoding::Depth,
1682        ) -> fidl::Result<()> {
1683            encoder.debug_check_bounds::<ManagerAddWakeSourceRequest>(offset);
1684            // Vector header
1685            let max_ordinal: u64 = self.max_ordinal_present();
1686            encoder.write_num(max_ordinal, offset);
1687            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1688            // Calling encoder.out_of_line_offset(0) is not allowed.
1689            if max_ordinal == 0 {
1690                return Ok(());
1691            }
1692            depth.increment()?;
1693            let envelope_size = 8;
1694            let bytes_len = max_ordinal as usize * envelope_size;
1695            #[allow(unused_variables)]
1696            let offset = encoder.out_of_line_offset(bytes_len);
1697            let mut _prev_end_offset: usize = 0;
1698            if 1 > max_ordinal {
1699                return Ok(());
1700            }
1701
1702            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1703            // are envelope_size bytes.
1704            let cur_offset: usize = (1 - 1) * envelope_size;
1705
1706            // Zero reserved fields.
1707            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1708
1709            // Safety:
1710            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1711            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1712            //   envelope_size bytes, there is always sufficient room.
1713            fidl::encoding::encode_in_envelope_optional::<
1714                fidl::encoding::HandleType<
1715                    fidl::Job,
1716                    { fidl::ObjectType::JOB.into_raw() },
1717                    2147483648,
1718                >,
1719                fidl::encoding::DefaultFuchsiaResourceDialect,
1720            >(
1721                self.container_job.as_mut().map(
1722                    <fidl::encoding::HandleType<
1723                        fidl::Job,
1724                        { fidl::ObjectType::JOB.into_raw() },
1725                        2147483648,
1726                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1727                ),
1728                encoder,
1729                offset + cur_offset,
1730                depth,
1731            )?;
1732
1733            _prev_end_offset = cur_offset + envelope_size;
1734            if 2 > max_ordinal {
1735                return Ok(());
1736            }
1737
1738            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1739            // are envelope_size bytes.
1740            let cur_offset: usize = (2 - 1) * envelope_size;
1741
1742            // Zero reserved fields.
1743            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1744
1745            // Safety:
1746            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1747            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1748            //   envelope_size bytes, there is always sufficient room.
1749            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1750            self.name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
1751            encoder, offset + cur_offset, depth
1752        )?;
1753
1754            _prev_end_offset = cur_offset + envelope_size;
1755            if 3 > max_ordinal {
1756                return Ok(());
1757            }
1758
1759            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1760            // are envelope_size bytes.
1761            let cur_offset: usize = (3 - 1) * envelope_size;
1762
1763            // Zero reserved fields.
1764            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1765
1766            // Safety:
1767            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1768            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1769            //   envelope_size bytes, there is always sufficient room.
1770            fidl::encoding::encode_in_envelope_optional::<
1771                fidl::encoding::HandleType<
1772                    fidl::NullableHandle,
1773                    { fidl::ObjectType::NONE.into_raw() },
1774                    2147483648,
1775                >,
1776                fidl::encoding::DefaultFuchsiaResourceDialect,
1777            >(
1778                self.handle.as_mut().map(
1779                    <fidl::encoding::HandleType<
1780                        fidl::NullableHandle,
1781                        { fidl::ObjectType::NONE.into_raw() },
1782                        2147483648,
1783                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1784                ),
1785                encoder,
1786                offset + cur_offset,
1787                depth,
1788            )?;
1789
1790            _prev_end_offset = cur_offset + envelope_size;
1791            if 4 > max_ordinal {
1792                return Ok(());
1793            }
1794
1795            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1796            // are envelope_size bytes.
1797            let cur_offset: usize = (4 - 1) * envelope_size;
1798
1799            // Zero reserved fields.
1800            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1801
1802            // Safety:
1803            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1804            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1805            //   envelope_size bytes, there is always sufficient room.
1806            fidl::encoding::encode_in_envelope_optional::<
1807                u32,
1808                fidl::encoding::DefaultFuchsiaResourceDialect,
1809            >(
1810                self.signals.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1811                encoder,
1812                offset + cur_offset,
1813                depth,
1814            )?;
1815
1816            _prev_end_offset = cur_offset + envelope_size;
1817
1818            Ok(())
1819        }
1820    }
1821
1822    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1823        for ManagerAddWakeSourceRequest
1824    {
1825        #[inline(always)]
1826        fn new_empty() -> Self {
1827            Self::default()
1828        }
1829
1830        unsafe fn decode(
1831            &mut self,
1832            decoder: &mut fidl::encoding::Decoder<
1833                '_,
1834                fidl::encoding::DefaultFuchsiaResourceDialect,
1835            >,
1836            offset: usize,
1837            mut depth: fidl::encoding::Depth,
1838        ) -> fidl::Result<()> {
1839            decoder.debug_check_bounds::<Self>(offset);
1840            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1841                None => return Err(fidl::Error::NotNullable),
1842                Some(len) => len,
1843            };
1844            // Calling decoder.out_of_line_offset(0) is not allowed.
1845            if len == 0 {
1846                return Ok(());
1847            };
1848            depth.increment()?;
1849            let envelope_size = 8;
1850            let bytes_len = len * envelope_size;
1851            let offset = decoder.out_of_line_offset(bytes_len)?;
1852            // Decode the envelope for each type.
1853            let mut _next_ordinal_to_read = 0;
1854            let mut next_offset = offset;
1855            let end_offset = offset + bytes_len;
1856            _next_ordinal_to_read += 1;
1857            if next_offset >= end_offset {
1858                return Ok(());
1859            }
1860
1861            // Decode unknown envelopes for gaps in ordinals.
1862            while _next_ordinal_to_read < 1 {
1863                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1864                _next_ordinal_to_read += 1;
1865                next_offset += envelope_size;
1866            }
1867
1868            let next_out_of_line = decoder.next_out_of_line();
1869            let handles_before = decoder.remaining_handles();
1870            if let Some((inlined, num_bytes, num_handles)) =
1871                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1872            {
1873                let member_inline_size = <fidl::encoding::HandleType<
1874                    fidl::Job,
1875                    { fidl::ObjectType::JOB.into_raw() },
1876                    2147483648,
1877                > as fidl::encoding::TypeMarker>::inline_size(
1878                    decoder.context
1879                );
1880                if inlined != (member_inline_size <= 4) {
1881                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1882                }
1883                let inner_offset;
1884                let mut inner_depth = depth.clone();
1885                if inlined {
1886                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1887                    inner_offset = next_offset;
1888                } else {
1889                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1890                    inner_depth.increment()?;
1891                }
1892                let val_ref =
1893                self.container_job.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1894                fidl::decode!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1895                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1896                {
1897                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1898                }
1899                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1900                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1901                }
1902            }
1903
1904            next_offset += envelope_size;
1905            _next_ordinal_to_read += 1;
1906            if next_offset >= end_offset {
1907                return Ok(());
1908            }
1909
1910            // Decode unknown envelopes for gaps in ordinals.
1911            while _next_ordinal_to_read < 2 {
1912                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1913                _next_ordinal_to_read += 1;
1914                next_offset += envelope_size;
1915            }
1916
1917            let next_out_of_line = decoder.next_out_of_line();
1918            let handles_before = decoder.remaining_handles();
1919            if let Some((inlined, num_bytes, num_handles)) =
1920                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1921            {
1922                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1923                if inlined != (member_inline_size <= 4) {
1924                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1925                }
1926                let inner_offset;
1927                let mut inner_depth = depth.clone();
1928                if inlined {
1929                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1930                    inner_offset = next_offset;
1931                } else {
1932                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1933                    inner_depth.increment()?;
1934                }
1935                let val_ref = self.name.get_or_insert_with(|| {
1936                    fidl::new_empty!(
1937                        fidl::encoding::BoundedString<1024>,
1938                        fidl::encoding::DefaultFuchsiaResourceDialect
1939                    )
1940                });
1941                fidl::decode!(
1942                    fidl::encoding::BoundedString<1024>,
1943                    fidl::encoding::DefaultFuchsiaResourceDialect,
1944                    val_ref,
1945                    decoder,
1946                    inner_offset,
1947                    inner_depth
1948                )?;
1949                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1950                {
1951                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1952                }
1953                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1954                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1955                }
1956            }
1957
1958            next_offset += envelope_size;
1959            _next_ordinal_to_read += 1;
1960            if next_offset >= end_offset {
1961                return Ok(());
1962            }
1963
1964            // Decode unknown envelopes for gaps in ordinals.
1965            while _next_ordinal_to_read < 3 {
1966                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1967                _next_ordinal_to_read += 1;
1968                next_offset += envelope_size;
1969            }
1970
1971            let next_out_of_line = decoder.next_out_of_line();
1972            let handles_before = decoder.remaining_handles();
1973            if let Some((inlined, num_bytes, num_handles)) =
1974                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1975            {
1976                let member_inline_size = <fidl::encoding::HandleType<
1977                    fidl::NullableHandle,
1978                    { fidl::ObjectType::NONE.into_raw() },
1979                    2147483648,
1980                > as fidl::encoding::TypeMarker>::inline_size(
1981                    decoder.context
1982                );
1983                if inlined != (member_inline_size <= 4) {
1984                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1985                }
1986                let inner_offset;
1987                let mut inner_depth = depth.clone();
1988                if inlined {
1989                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1990                    inner_offset = next_offset;
1991                } else {
1992                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1993                    inner_depth.increment()?;
1994                }
1995                let val_ref =
1996                self.handle.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::NullableHandle, { fidl::ObjectType::NONE.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1997                fidl::decode!(fidl::encoding::HandleType<fidl::NullableHandle, { fidl::ObjectType::NONE.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1998                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1999                {
2000                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2001                }
2002                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2003                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2004                }
2005            }
2006
2007            next_offset += envelope_size;
2008            _next_ordinal_to_read += 1;
2009            if next_offset >= end_offset {
2010                return Ok(());
2011            }
2012
2013            // Decode unknown envelopes for gaps in ordinals.
2014            while _next_ordinal_to_read < 4 {
2015                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2016                _next_ordinal_to_read += 1;
2017                next_offset += envelope_size;
2018            }
2019
2020            let next_out_of_line = decoder.next_out_of_line();
2021            let handles_before = decoder.remaining_handles();
2022            if let Some((inlined, num_bytes, num_handles)) =
2023                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2024            {
2025                let member_inline_size =
2026                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2027                if inlined != (member_inline_size <= 4) {
2028                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2029                }
2030                let inner_offset;
2031                let mut inner_depth = depth.clone();
2032                if inlined {
2033                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2034                    inner_offset = next_offset;
2035                } else {
2036                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2037                    inner_depth.increment()?;
2038                }
2039                let val_ref = self.signals.get_or_insert_with(|| {
2040                    fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect)
2041                });
2042                fidl::decode!(
2043                    u32,
2044                    fidl::encoding::DefaultFuchsiaResourceDialect,
2045                    val_ref,
2046                    decoder,
2047                    inner_offset,
2048                    inner_depth
2049                )?;
2050                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2051                {
2052                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2053                }
2054                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2055                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2056                }
2057            }
2058
2059            next_offset += envelope_size;
2060
2061            // Decode the remaining unknown envelopes.
2062            while next_offset < end_offset {
2063                _next_ordinal_to_read += 1;
2064                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2065                next_offset += envelope_size;
2066            }
2067
2068            Ok(())
2069        }
2070    }
2071
2072    impl ManagerCreatePagerRequest {
2073        #[inline(always)]
2074        fn max_ordinal_present(&self) -> u64 {
2075            if let Some(_) = self.pager {
2076                return 3;
2077            }
2078            if let Some(_) = self.block_size {
2079                return 2;
2080            }
2081            if let Some(_) = self.backing_vmo {
2082                return 1;
2083            }
2084            0
2085        }
2086    }
2087
2088    impl fidl::encoding::ResourceTypeMarker for ManagerCreatePagerRequest {
2089        type Borrowed<'a> = &'a mut Self;
2090        fn take_or_borrow<'a>(
2091            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2092        ) -> Self::Borrowed<'a> {
2093            value
2094        }
2095    }
2096
2097    unsafe impl fidl::encoding::TypeMarker for ManagerCreatePagerRequest {
2098        type Owned = Self;
2099
2100        #[inline(always)]
2101        fn inline_align(_context: fidl::encoding::Context) -> usize {
2102            8
2103        }
2104
2105        #[inline(always)]
2106        fn inline_size(_context: fidl::encoding::Context) -> usize {
2107            16
2108        }
2109    }
2110
2111    unsafe impl
2112        fidl::encoding::Encode<
2113            ManagerCreatePagerRequest,
2114            fidl::encoding::DefaultFuchsiaResourceDialect,
2115        > for &mut ManagerCreatePagerRequest
2116    {
2117        unsafe fn encode(
2118            self,
2119            encoder: &mut fidl::encoding::Encoder<
2120                '_,
2121                fidl::encoding::DefaultFuchsiaResourceDialect,
2122            >,
2123            offset: usize,
2124            mut depth: fidl::encoding::Depth,
2125        ) -> fidl::Result<()> {
2126            encoder.debug_check_bounds::<ManagerCreatePagerRequest>(offset);
2127            // Vector header
2128            let max_ordinal: u64 = self.max_ordinal_present();
2129            encoder.write_num(max_ordinal, offset);
2130            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2131            // Calling encoder.out_of_line_offset(0) is not allowed.
2132            if max_ordinal == 0 {
2133                return Ok(());
2134            }
2135            depth.increment()?;
2136            let envelope_size = 8;
2137            let bytes_len = max_ordinal as usize * envelope_size;
2138            #[allow(unused_variables)]
2139            let offset = encoder.out_of_line_offset(bytes_len);
2140            let mut _prev_end_offset: usize = 0;
2141            if 1 > max_ordinal {
2142                return Ok(());
2143            }
2144
2145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2146            // are envelope_size bytes.
2147            let cur_offset: usize = (1 - 1) * envelope_size;
2148
2149            // Zero reserved fields.
2150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2151
2152            // Safety:
2153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2155            //   envelope_size bytes, there is always sufficient room.
2156            fidl::encoding::encode_in_envelope_optional::<
2157                fidl::encoding::HandleType<
2158                    fidl::Vmo,
2159                    { fidl::ObjectType::VMO.into_raw() },
2160                    2147483648,
2161                >,
2162                fidl::encoding::DefaultFuchsiaResourceDialect,
2163            >(
2164                self.backing_vmo.as_mut().map(
2165                    <fidl::encoding::HandleType<
2166                        fidl::Vmo,
2167                        { fidl::ObjectType::VMO.into_raw() },
2168                        2147483648,
2169                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2170                ),
2171                encoder,
2172                offset + cur_offset,
2173                depth,
2174            )?;
2175
2176            _prev_end_offset = cur_offset + envelope_size;
2177            if 2 > max_ordinal {
2178                return Ok(());
2179            }
2180
2181            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2182            // are envelope_size bytes.
2183            let cur_offset: usize = (2 - 1) * envelope_size;
2184
2185            // Zero reserved fields.
2186            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2187
2188            // Safety:
2189            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2190            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2191            //   envelope_size bytes, there is always sufficient room.
2192            fidl::encoding::encode_in_envelope_optional::<
2193                u64,
2194                fidl::encoding::DefaultFuchsiaResourceDialect,
2195            >(
2196                self.block_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2197                encoder,
2198                offset + cur_offset,
2199                depth,
2200            )?;
2201
2202            _prev_end_offset = cur_offset + envelope_size;
2203            if 3 > max_ordinal {
2204                return Ok(());
2205            }
2206
2207            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2208            // are envelope_size bytes.
2209            let cur_offset: usize = (3 - 1) * envelope_size;
2210
2211            // Zero reserved fields.
2212            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2213
2214            // Safety:
2215            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2216            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2217            //   envelope_size bytes, there is always sufficient room.
2218            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
2219            self.pager.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
2220            encoder, offset + cur_offset, depth
2221        )?;
2222
2223            _prev_end_offset = cur_offset + envelope_size;
2224
2225            Ok(())
2226        }
2227    }
2228
2229    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2230        for ManagerCreatePagerRequest
2231    {
2232        #[inline(always)]
2233        fn new_empty() -> Self {
2234            Self::default()
2235        }
2236
2237        unsafe fn decode(
2238            &mut self,
2239            decoder: &mut fidl::encoding::Decoder<
2240                '_,
2241                fidl::encoding::DefaultFuchsiaResourceDialect,
2242            >,
2243            offset: usize,
2244            mut depth: fidl::encoding::Depth,
2245        ) -> fidl::Result<()> {
2246            decoder.debug_check_bounds::<Self>(offset);
2247            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2248                None => return Err(fidl::Error::NotNullable),
2249                Some(len) => len,
2250            };
2251            // Calling decoder.out_of_line_offset(0) is not allowed.
2252            if len == 0 {
2253                return Ok(());
2254            };
2255            depth.increment()?;
2256            let envelope_size = 8;
2257            let bytes_len = len * envelope_size;
2258            let offset = decoder.out_of_line_offset(bytes_len)?;
2259            // Decode the envelope for each type.
2260            let mut _next_ordinal_to_read = 0;
2261            let mut next_offset = offset;
2262            let end_offset = offset + bytes_len;
2263            _next_ordinal_to_read += 1;
2264            if next_offset >= end_offset {
2265                return Ok(());
2266            }
2267
2268            // Decode unknown envelopes for gaps in ordinals.
2269            while _next_ordinal_to_read < 1 {
2270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2271                _next_ordinal_to_read += 1;
2272                next_offset += envelope_size;
2273            }
2274
2275            let next_out_of_line = decoder.next_out_of_line();
2276            let handles_before = decoder.remaining_handles();
2277            if let Some((inlined, num_bytes, num_handles)) =
2278                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2279            {
2280                let member_inline_size = <fidl::encoding::HandleType<
2281                    fidl::Vmo,
2282                    { fidl::ObjectType::VMO.into_raw() },
2283                    2147483648,
2284                > as fidl::encoding::TypeMarker>::inline_size(
2285                    decoder.context
2286                );
2287                if inlined != (member_inline_size <= 4) {
2288                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2289                }
2290                let inner_offset;
2291                let mut inner_depth = depth.clone();
2292                if inlined {
2293                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2294                    inner_offset = next_offset;
2295                } else {
2296                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2297                    inner_depth.increment()?;
2298                }
2299                let val_ref =
2300                self.backing_vmo.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2301                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2302                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2303                {
2304                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2305                }
2306                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2307                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2308                }
2309            }
2310
2311            next_offset += envelope_size;
2312            _next_ordinal_to_read += 1;
2313            if next_offset >= end_offset {
2314                return Ok(());
2315            }
2316
2317            // Decode unknown envelopes for gaps in ordinals.
2318            while _next_ordinal_to_read < 2 {
2319                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2320                _next_ordinal_to_read += 1;
2321                next_offset += envelope_size;
2322            }
2323
2324            let next_out_of_line = decoder.next_out_of_line();
2325            let handles_before = decoder.remaining_handles();
2326            if let Some((inlined, num_bytes, num_handles)) =
2327                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2328            {
2329                let member_inline_size =
2330                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2331                if inlined != (member_inline_size <= 4) {
2332                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2333                }
2334                let inner_offset;
2335                let mut inner_depth = depth.clone();
2336                if inlined {
2337                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2338                    inner_offset = next_offset;
2339                } else {
2340                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2341                    inner_depth.increment()?;
2342                }
2343                let val_ref = self.block_size.get_or_insert_with(|| {
2344                    fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect)
2345                });
2346                fidl::decode!(
2347                    u64,
2348                    fidl::encoding::DefaultFuchsiaResourceDialect,
2349                    val_ref,
2350                    decoder,
2351                    inner_offset,
2352                    inner_depth
2353                )?;
2354                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2355                {
2356                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2357                }
2358                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2359                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2360                }
2361            }
2362
2363            next_offset += envelope_size;
2364            _next_ordinal_to_read += 1;
2365            if next_offset >= end_offset {
2366                return Ok(());
2367            }
2368
2369            // Decode unknown envelopes for gaps in ordinals.
2370            while _next_ordinal_to_read < 3 {
2371                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2372                _next_ordinal_to_read += 1;
2373                next_offset += envelope_size;
2374            }
2375
2376            let next_out_of_line = decoder.next_out_of_line();
2377            let handles_before = decoder.remaining_handles();
2378            if let Some((inlined, num_bytes, num_handles)) =
2379                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2380            {
2381                let member_inline_size = <fidl::encoding::Endpoint<
2382                    fidl::endpoints::ServerEnd<PagerMarker>,
2383                > as fidl::encoding::TypeMarker>::inline_size(
2384                    decoder.context
2385                );
2386                if inlined != (member_inline_size <= 4) {
2387                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2388                }
2389                let inner_offset;
2390                let mut inner_depth = depth.clone();
2391                if inlined {
2392                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2393                    inner_offset = next_offset;
2394                } else {
2395                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2396                    inner_depth.increment()?;
2397                }
2398                let val_ref = self.pager.get_or_insert_with(|| {
2399                    fidl::new_empty!(
2400                        fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>>,
2401                        fidl::encoding::DefaultFuchsiaResourceDialect
2402                    )
2403                });
2404                fidl::decode!(
2405                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PagerMarker>>,
2406                    fidl::encoding::DefaultFuchsiaResourceDialect,
2407                    val_ref,
2408                    decoder,
2409                    inner_offset,
2410                    inner_depth
2411                )?;
2412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2413                {
2414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2415                }
2416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2418                }
2419            }
2420
2421            next_offset += envelope_size;
2422
2423            // Decode the remaining unknown envelopes.
2424            while next_offset < end_offset {
2425                _next_ordinal_to_read += 1;
2426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2427                next_offset += envelope_size;
2428            }
2429
2430            Ok(())
2431        }
2432    }
2433
2434    impl ManagerProxyWakeChannelRequest {
2435        #[inline(always)]
2436        fn max_ordinal_present(&self) -> u64 {
2437            if let Some(_) = self.counter {
2438                return 5;
2439            }
2440            if let Some(_) = self.name {
2441                return 4;
2442            }
2443            if let Some(_) = self.remote_channel {
2444                return 3;
2445            }
2446            if let Some(_) = self.container_channel {
2447                return 2;
2448            }
2449            if let Some(_) = self.container_job {
2450                return 1;
2451            }
2452            0
2453        }
2454    }
2455
2456    impl fidl::encoding::ResourceTypeMarker for ManagerProxyWakeChannelRequest {
2457        type Borrowed<'a> = &'a mut Self;
2458        fn take_or_borrow<'a>(
2459            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2460        ) -> Self::Borrowed<'a> {
2461            value
2462        }
2463    }
2464
2465    unsafe impl fidl::encoding::TypeMarker for ManagerProxyWakeChannelRequest {
2466        type Owned = Self;
2467
2468        #[inline(always)]
2469        fn inline_align(_context: fidl::encoding::Context) -> usize {
2470            8
2471        }
2472
2473        #[inline(always)]
2474        fn inline_size(_context: fidl::encoding::Context) -> usize {
2475            16
2476        }
2477    }
2478
2479    unsafe impl
2480        fidl::encoding::Encode<
2481            ManagerProxyWakeChannelRequest,
2482            fidl::encoding::DefaultFuchsiaResourceDialect,
2483        > for &mut ManagerProxyWakeChannelRequest
2484    {
2485        unsafe fn encode(
2486            self,
2487            encoder: &mut fidl::encoding::Encoder<
2488                '_,
2489                fidl::encoding::DefaultFuchsiaResourceDialect,
2490            >,
2491            offset: usize,
2492            mut depth: fidl::encoding::Depth,
2493        ) -> fidl::Result<()> {
2494            encoder.debug_check_bounds::<ManagerProxyWakeChannelRequest>(offset);
2495            // Vector header
2496            let max_ordinal: u64 = self.max_ordinal_present();
2497            encoder.write_num(max_ordinal, offset);
2498            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2499            // Calling encoder.out_of_line_offset(0) is not allowed.
2500            if max_ordinal == 0 {
2501                return Ok(());
2502            }
2503            depth.increment()?;
2504            let envelope_size = 8;
2505            let bytes_len = max_ordinal as usize * envelope_size;
2506            #[allow(unused_variables)]
2507            let offset = encoder.out_of_line_offset(bytes_len);
2508            let mut _prev_end_offset: usize = 0;
2509            if 1 > max_ordinal {
2510                return Ok(());
2511            }
2512
2513            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2514            // are envelope_size bytes.
2515            let cur_offset: usize = (1 - 1) * envelope_size;
2516
2517            // Zero reserved fields.
2518            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2519
2520            // Safety:
2521            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2522            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2523            //   envelope_size bytes, there is always sufficient room.
2524            fidl::encoding::encode_in_envelope_optional::<
2525                fidl::encoding::HandleType<
2526                    fidl::Job,
2527                    { fidl::ObjectType::JOB.into_raw() },
2528                    2147483648,
2529                >,
2530                fidl::encoding::DefaultFuchsiaResourceDialect,
2531            >(
2532                self.container_job.as_mut().map(
2533                    <fidl::encoding::HandleType<
2534                        fidl::Job,
2535                        { fidl::ObjectType::JOB.into_raw() },
2536                        2147483648,
2537                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2538                ),
2539                encoder,
2540                offset + cur_offset,
2541                depth,
2542            )?;
2543
2544            _prev_end_offset = cur_offset + envelope_size;
2545            if 2 > max_ordinal {
2546                return Ok(());
2547            }
2548
2549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2550            // are envelope_size bytes.
2551            let cur_offset: usize = (2 - 1) * envelope_size;
2552
2553            // Zero reserved fields.
2554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2555
2556            // Safety:
2557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2559            //   envelope_size bytes, there is always sufficient room.
2560            fidl::encoding::encode_in_envelope_optional::<
2561                fidl::encoding::HandleType<
2562                    fidl::Channel,
2563                    { fidl::ObjectType::CHANNEL.into_raw() },
2564                    2147483648,
2565                >,
2566                fidl::encoding::DefaultFuchsiaResourceDialect,
2567            >(
2568                self.container_channel.as_mut().map(
2569                    <fidl::encoding::HandleType<
2570                        fidl::Channel,
2571                        { fidl::ObjectType::CHANNEL.into_raw() },
2572                        2147483648,
2573                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2574                ),
2575                encoder,
2576                offset + cur_offset,
2577                depth,
2578            )?;
2579
2580            _prev_end_offset = cur_offset + envelope_size;
2581            if 3 > max_ordinal {
2582                return Ok(());
2583            }
2584
2585            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2586            // are envelope_size bytes.
2587            let cur_offset: usize = (3 - 1) * envelope_size;
2588
2589            // Zero reserved fields.
2590            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2591
2592            // Safety:
2593            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2594            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2595            //   envelope_size bytes, there is always sufficient room.
2596            fidl::encoding::encode_in_envelope_optional::<
2597                fidl::encoding::HandleType<
2598                    fidl::Channel,
2599                    { fidl::ObjectType::CHANNEL.into_raw() },
2600                    2147483648,
2601                >,
2602                fidl::encoding::DefaultFuchsiaResourceDialect,
2603            >(
2604                self.remote_channel.as_mut().map(
2605                    <fidl::encoding::HandleType<
2606                        fidl::Channel,
2607                        { fidl::ObjectType::CHANNEL.into_raw() },
2608                        2147483648,
2609                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2610                ),
2611                encoder,
2612                offset + cur_offset,
2613                depth,
2614            )?;
2615
2616            _prev_end_offset = cur_offset + envelope_size;
2617            if 4 > max_ordinal {
2618                return Ok(());
2619            }
2620
2621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2622            // are envelope_size bytes.
2623            let cur_offset: usize = (4 - 1) * envelope_size;
2624
2625            // Zero reserved fields.
2626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2627
2628            // Safety:
2629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2631            //   envelope_size bytes, there is always sufficient room.
2632            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, fidl::encoding::DefaultFuchsiaResourceDialect>(
2633            self.name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
2634            encoder, offset + cur_offset, depth
2635        )?;
2636
2637            _prev_end_offset = cur_offset + envelope_size;
2638            if 5 > max_ordinal {
2639                return Ok(());
2640            }
2641
2642            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2643            // are envelope_size bytes.
2644            let cur_offset: usize = (5 - 1) * envelope_size;
2645
2646            // Zero reserved fields.
2647            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2648
2649            // Safety:
2650            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2651            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2652            //   envelope_size bytes, there is always sufficient room.
2653            fidl::encoding::encode_in_envelope_optional::<
2654                fidl::encoding::HandleType<
2655                    fidl::Counter,
2656                    { fidl::ObjectType::COUNTER.into_raw() },
2657                    2147483648,
2658                >,
2659                fidl::encoding::DefaultFuchsiaResourceDialect,
2660            >(
2661                self.counter.as_mut().map(
2662                    <fidl::encoding::HandleType<
2663                        fidl::Counter,
2664                        { fidl::ObjectType::COUNTER.into_raw() },
2665                        2147483648,
2666                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
2667                ),
2668                encoder,
2669                offset + cur_offset,
2670                depth,
2671            )?;
2672
2673            _prev_end_offset = cur_offset + envelope_size;
2674
2675            Ok(())
2676        }
2677    }
2678
2679    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2680        for ManagerProxyWakeChannelRequest
2681    {
2682        #[inline(always)]
2683        fn new_empty() -> Self {
2684            Self::default()
2685        }
2686
2687        unsafe fn decode(
2688            &mut self,
2689            decoder: &mut fidl::encoding::Decoder<
2690                '_,
2691                fidl::encoding::DefaultFuchsiaResourceDialect,
2692            >,
2693            offset: usize,
2694            mut depth: fidl::encoding::Depth,
2695        ) -> fidl::Result<()> {
2696            decoder.debug_check_bounds::<Self>(offset);
2697            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2698                None => return Err(fidl::Error::NotNullable),
2699                Some(len) => len,
2700            };
2701            // Calling decoder.out_of_line_offset(0) is not allowed.
2702            if len == 0 {
2703                return Ok(());
2704            };
2705            depth.increment()?;
2706            let envelope_size = 8;
2707            let bytes_len = len * envelope_size;
2708            let offset = decoder.out_of_line_offset(bytes_len)?;
2709            // Decode the envelope for each type.
2710            let mut _next_ordinal_to_read = 0;
2711            let mut next_offset = offset;
2712            let end_offset = offset + bytes_len;
2713            _next_ordinal_to_read += 1;
2714            if next_offset >= end_offset {
2715                return Ok(());
2716            }
2717
2718            // Decode unknown envelopes for gaps in ordinals.
2719            while _next_ordinal_to_read < 1 {
2720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2721                _next_ordinal_to_read += 1;
2722                next_offset += envelope_size;
2723            }
2724
2725            let next_out_of_line = decoder.next_out_of_line();
2726            let handles_before = decoder.remaining_handles();
2727            if let Some((inlined, num_bytes, num_handles)) =
2728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2729            {
2730                let member_inline_size = <fidl::encoding::HandleType<
2731                    fidl::Job,
2732                    { fidl::ObjectType::JOB.into_raw() },
2733                    2147483648,
2734                > as fidl::encoding::TypeMarker>::inline_size(
2735                    decoder.context
2736                );
2737                if inlined != (member_inline_size <= 4) {
2738                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2739                }
2740                let inner_offset;
2741                let mut inner_depth = depth.clone();
2742                if inlined {
2743                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2744                    inner_offset = next_offset;
2745                } else {
2746                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2747                    inner_depth.increment()?;
2748                }
2749                let val_ref =
2750                self.container_job.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2751                fidl::decode!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2752                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2753                {
2754                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2755                }
2756                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2757                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2758                }
2759            }
2760
2761            next_offset += envelope_size;
2762            _next_ordinal_to_read += 1;
2763            if next_offset >= end_offset {
2764                return Ok(());
2765            }
2766
2767            // Decode unknown envelopes for gaps in ordinals.
2768            while _next_ordinal_to_read < 2 {
2769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2770                _next_ordinal_to_read += 1;
2771                next_offset += envelope_size;
2772            }
2773
2774            let next_out_of_line = decoder.next_out_of_line();
2775            let handles_before = decoder.remaining_handles();
2776            if let Some((inlined, num_bytes, num_handles)) =
2777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2778            {
2779                let member_inline_size = <fidl::encoding::HandleType<
2780                    fidl::Channel,
2781                    { fidl::ObjectType::CHANNEL.into_raw() },
2782                    2147483648,
2783                > as fidl::encoding::TypeMarker>::inline_size(
2784                    decoder.context
2785                );
2786                if inlined != (member_inline_size <= 4) {
2787                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2788                }
2789                let inner_offset;
2790                let mut inner_depth = depth.clone();
2791                if inlined {
2792                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2793                    inner_offset = next_offset;
2794                } else {
2795                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2796                    inner_depth.increment()?;
2797                }
2798                let val_ref =
2799                self.container_channel.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2800                fidl::decode!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2801                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2802                {
2803                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2804                }
2805                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2806                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2807                }
2808            }
2809
2810            next_offset += envelope_size;
2811            _next_ordinal_to_read += 1;
2812            if next_offset >= end_offset {
2813                return Ok(());
2814            }
2815
2816            // Decode unknown envelopes for gaps in ordinals.
2817            while _next_ordinal_to_read < 3 {
2818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2819                _next_ordinal_to_read += 1;
2820                next_offset += envelope_size;
2821            }
2822
2823            let next_out_of_line = decoder.next_out_of_line();
2824            let handles_before = decoder.remaining_handles();
2825            if let Some((inlined, num_bytes, num_handles)) =
2826                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2827            {
2828                let member_inline_size = <fidl::encoding::HandleType<
2829                    fidl::Channel,
2830                    { fidl::ObjectType::CHANNEL.into_raw() },
2831                    2147483648,
2832                > as fidl::encoding::TypeMarker>::inline_size(
2833                    decoder.context
2834                );
2835                if inlined != (member_inline_size <= 4) {
2836                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2837                }
2838                let inner_offset;
2839                let mut inner_depth = depth.clone();
2840                if inlined {
2841                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2842                    inner_offset = next_offset;
2843                } else {
2844                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2845                    inner_depth.increment()?;
2846                }
2847                let val_ref =
2848                self.remote_channel.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2849                fidl::decode!(fidl::encoding::HandleType<fidl::Channel, { fidl::ObjectType::CHANNEL.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2850                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2851                {
2852                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2853                }
2854                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2855                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2856                }
2857            }
2858
2859            next_offset += envelope_size;
2860            _next_ordinal_to_read += 1;
2861            if next_offset >= end_offset {
2862                return Ok(());
2863            }
2864
2865            // Decode unknown envelopes for gaps in ordinals.
2866            while _next_ordinal_to_read < 4 {
2867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2868                _next_ordinal_to_read += 1;
2869                next_offset += envelope_size;
2870            }
2871
2872            let next_out_of_line = decoder.next_out_of_line();
2873            let handles_before = decoder.remaining_handles();
2874            if let Some((inlined, num_bytes, num_handles)) =
2875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2876            {
2877                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2878                if inlined != (member_inline_size <= 4) {
2879                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2880                }
2881                let inner_offset;
2882                let mut inner_depth = depth.clone();
2883                if inlined {
2884                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2885                    inner_offset = next_offset;
2886                } else {
2887                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2888                    inner_depth.increment()?;
2889                }
2890                let val_ref = self.name.get_or_insert_with(|| {
2891                    fidl::new_empty!(
2892                        fidl::encoding::BoundedString<1024>,
2893                        fidl::encoding::DefaultFuchsiaResourceDialect
2894                    )
2895                });
2896                fidl::decode!(
2897                    fidl::encoding::BoundedString<1024>,
2898                    fidl::encoding::DefaultFuchsiaResourceDialect,
2899                    val_ref,
2900                    decoder,
2901                    inner_offset,
2902                    inner_depth
2903                )?;
2904                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2905                {
2906                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2907                }
2908                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2909                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2910                }
2911            }
2912
2913            next_offset += envelope_size;
2914            _next_ordinal_to_read += 1;
2915            if next_offset >= end_offset {
2916                return Ok(());
2917            }
2918
2919            // Decode unknown envelopes for gaps in ordinals.
2920            while _next_ordinal_to_read < 5 {
2921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2922                _next_ordinal_to_read += 1;
2923                next_offset += envelope_size;
2924            }
2925
2926            let next_out_of_line = decoder.next_out_of_line();
2927            let handles_before = decoder.remaining_handles();
2928            if let Some((inlined, num_bytes, num_handles)) =
2929                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2930            {
2931                let member_inline_size = <fidl::encoding::HandleType<
2932                    fidl::Counter,
2933                    { fidl::ObjectType::COUNTER.into_raw() },
2934                    2147483648,
2935                > as fidl::encoding::TypeMarker>::inline_size(
2936                    decoder.context
2937                );
2938                if inlined != (member_inline_size <= 4) {
2939                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2940                }
2941                let inner_offset;
2942                let mut inner_depth = depth.clone();
2943                if inlined {
2944                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2945                    inner_offset = next_offset;
2946                } else {
2947                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2948                    inner_depth.increment()?;
2949                }
2950                let val_ref =
2951                self.counter.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Counter, { fidl::ObjectType::COUNTER.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
2952                fidl::decode!(fidl::encoding::HandleType<fidl::Counter, { fidl::ObjectType::COUNTER.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
2953                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2954                {
2955                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2956                }
2957                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2958                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2959                }
2960            }
2961
2962            next_offset += envelope_size;
2963
2964            // Decode the remaining unknown envelopes.
2965            while next_offset < end_offset {
2966                _next_ordinal_to_read += 1;
2967                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2968                next_offset += envelope_size;
2969            }
2970
2971            Ok(())
2972        }
2973    }
2974
2975    impl ManagerRegisterWakeWatcherRequest {
2976        #[inline(always)]
2977        fn max_ordinal_present(&self) -> u64 {
2978            if let Some(_) = self.watcher {
2979                return 1;
2980            }
2981            0
2982        }
2983    }
2984
2985    impl fidl::encoding::ResourceTypeMarker for ManagerRegisterWakeWatcherRequest {
2986        type Borrowed<'a> = &'a mut Self;
2987        fn take_or_borrow<'a>(
2988            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2989        ) -> Self::Borrowed<'a> {
2990            value
2991        }
2992    }
2993
2994    unsafe impl fidl::encoding::TypeMarker for ManagerRegisterWakeWatcherRequest {
2995        type Owned = Self;
2996
2997        #[inline(always)]
2998        fn inline_align(_context: fidl::encoding::Context) -> usize {
2999            8
3000        }
3001
3002        #[inline(always)]
3003        fn inline_size(_context: fidl::encoding::Context) -> usize {
3004            16
3005        }
3006    }
3007
3008    unsafe impl
3009        fidl::encoding::Encode<
3010            ManagerRegisterWakeWatcherRequest,
3011            fidl::encoding::DefaultFuchsiaResourceDialect,
3012        > for &mut ManagerRegisterWakeWatcherRequest
3013    {
3014        unsafe fn encode(
3015            self,
3016            encoder: &mut fidl::encoding::Encoder<
3017                '_,
3018                fidl::encoding::DefaultFuchsiaResourceDialect,
3019            >,
3020            offset: usize,
3021            mut depth: fidl::encoding::Depth,
3022        ) -> fidl::Result<()> {
3023            encoder.debug_check_bounds::<ManagerRegisterWakeWatcherRequest>(offset);
3024            // Vector header
3025            let max_ordinal: u64 = self.max_ordinal_present();
3026            encoder.write_num(max_ordinal, offset);
3027            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3028            // Calling encoder.out_of_line_offset(0) is not allowed.
3029            if max_ordinal == 0 {
3030                return Ok(());
3031            }
3032            depth.increment()?;
3033            let envelope_size = 8;
3034            let bytes_len = max_ordinal as usize * envelope_size;
3035            #[allow(unused_variables)]
3036            let offset = encoder.out_of_line_offset(bytes_len);
3037            let mut _prev_end_offset: usize = 0;
3038            if 1 > max_ordinal {
3039                return Ok(());
3040            }
3041
3042            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3043            // are envelope_size bytes.
3044            let cur_offset: usize = (1 - 1) * envelope_size;
3045
3046            // Zero reserved fields.
3047            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3048
3049            // Safety:
3050            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3051            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3052            //   envelope_size bytes, there is always sufficient room.
3053            fidl::encoding::encode_in_envelope_optional::<
3054                fidl::encoding::HandleType<
3055                    fidl::EventPair,
3056                    { fidl::ObjectType::EVENTPAIR.into_raw() },
3057                    2147483648,
3058                >,
3059                fidl::encoding::DefaultFuchsiaResourceDialect,
3060            >(
3061                self.watcher.as_mut().map(
3062                    <fidl::encoding::HandleType<
3063                        fidl::EventPair,
3064                        { fidl::ObjectType::EVENTPAIR.into_raw() },
3065                        2147483648,
3066                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
3067                ),
3068                encoder,
3069                offset + cur_offset,
3070                depth,
3071            )?;
3072
3073            _prev_end_offset = cur_offset + envelope_size;
3074
3075            Ok(())
3076        }
3077    }
3078
3079    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3080        for ManagerRegisterWakeWatcherRequest
3081    {
3082        #[inline(always)]
3083        fn new_empty() -> Self {
3084            Self::default()
3085        }
3086
3087        unsafe fn decode(
3088            &mut self,
3089            decoder: &mut fidl::encoding::Decoder<
3090                '_,
3091                fidl::encoding::DefaultFuchsiaResourceDialect,
3092            >,
3093            offset: usize,
3094            mut depth: fidl::encoding::Depth,
3095        ) -> fidl::Result<()> {
3096            decoder.debug_check_bounds::<Self>(offset);
3097            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3098                None => return Err(fidl::Error::NotNullable),
3099                Some(len) => len,
3100            };
3101            // Calling decoder.out_of_line_offset(0) is not allowed.
3102            if len == 0 {
3103                return Ok(());
3104            };
3105            depth.increment()?;
3106            let envelope_size = 8;
3107            let bytes_len = len * envelope_size;
3108            let offset = decoder.out_of_line_offset(bytes_len)?;
3109            // Decode the envelope for each type.
3110            let mut _next_ordinal_to_read = 0;
3111            let mut next_offset = offset;
3112            let end_offset = offset + bytes_len;
3113            _next_ordinal_to_read += 1;
3114            if next_offset >= end_offset {
3115                return Ok(());
3116            }
3117
3118            // Decode unknown envelopes for gaps in ordinals.
3119            while _next_ordinal_to_read < 1 {
3120                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3121                _next_ordinal_to_read += 1;
3122                next_offset += envelope_size;
3123            }
3124
3125            let next_out_of_line = decoder.next_out_of_line();
3126            let handles_before = decoder.remaining_handles();
3127            if let Some((inlined, num_bytes, num_handles)) =
3128                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3129            {
3130                let member_inline_size = <fidl::encoding::HandleType<
3131                    fidl::EventPair,
3132                    { fidl::ObjectType::EVENTPAIR.into_raw() },
3133                    2147483648,
3134                > as fidl::encoding::TypeMarker>::inline_size(
3135                    decoder.context
3136                );
3137                if inlined != (member_inline_size <= 4) {
3138                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3139                }
3140                let inner_offset;
3141                let mut inner_depth = depth.clone();
3142                if inlined {
3143                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3144                    inner_offset = next_offset;
3145                } else {
3146                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3147                    inner_depth.increment()?;
3148                }
3149                let val_ref =
3150                self.watcher.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3151                fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3153                {
3154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3155                }
3156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3158                }
3159            }
3160
3161            next_offset += envelope_size;
3162
3163            // Decode the remaining unknown envelopes.
3164            while next_offset < end_offset {
3165                _next_ordinal_to_read += 1;
3166                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3167                next_offset += envelope_size;
3168            }
3169
3170            Ok(())
3171        }
3172    }
3173
3174    impl ManagerRemoveWakeSourceRequest {
3175        #[inline(always)]
3176        fn max_ordinal_present(&self) -> u64 {
3177            if let Some(_) = self.handle {
3178                return 2;
3179            }
3180            if let Some(_) = self.container_job {
3181                return 1;
3182            }
3183            0
3184        }
3185    }
3186
3187    impl fidl::encoding::ResourceTypeMarker for ManagerRemoveWakeSourceRequest {
3188        type Borrowed<'a> = &'a mut Self;
3189        fn take_or_borrow<'a>(
3190            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3191        ) -> Self::Borrowed<'a> {
3192            value
3193        }
3194    }
3195
3196    unsafe impl fidl::encoding::TypeMarker for ManagerRemoveWakeSourceRequest {
3197        type Owned = Self;
3198
3199        #[inline(always)]
3200        fn inline_align(_context: fidl::encoding::Context) -> usize {
3201            8
3202        }
3203
3204        #[inline(always)]
3205        fn inline_size(_context: fidl::encoding::Context) -> usize {
3206            16
3207        }
3208    }
3209
3210    unsafe impl
3211        fidl::encoding::Encode<
3212            ManagerRemoveWakeSourceRequest,
3213            fidl::encoding::DefaultFuchsiaResourceDialect,
3214        > for &mut ManagerRemoveWakeSourceRequest
3215    {
3216        unsafe fn encode(
3217            self,
3218            encoder: &mut fidl::encoding::Encoder<
3219                '_,
3220                fidl::encoding::DefaultFuchsiaResourceDialect,
3221            >,
3222            offset: usize,
3223            mut depth: fidl::encoding::Depth,
3224        ) -> fidl::Result<()> {
3225            encoder.debug_check_bounds::<ManagerRemoveWakeSourceRequest>(offset);
3226            // Vector header
3227            let max_ordinal: u64 = self.max_ordinal_present();
3228            encoder.write_num(max_ordinal, offset);
3229            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3230            // Calling encoder.out_of_line_offset(0) is not allowed.
3231            if max_ordinal == 0 {
3232                return Ok(());
3233            }
3234            depth.increment()?;
3235            let envelope_size = 8;
3236            let bytes_len = max_ordinal as usize * envelope_size;
3237            #[allow(unused_variables)]
3238            let offset = encoder.out_of_line_offset(bytes_len);
3239            let mut _prev_end_offset: usize = 0;
3240            if 1 > max_ordinal {
3241                return Ok(());
3242            }
3243
3244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3245            // are envelope_size bytes.
3246            let cur_offset: usize = (1 - 1) * envelope_size;
3247
3248            // Zero reserved fields.
3249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3250
3251            // Safety:
3252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3254            //   envelope_size bytes, there is always sufficient room.
3255            fidl::encoding::encode_in_envelope_optional::<
3256                fidl::encoding::HandleType<
3257                    fidl::Job,
3258                    { fidl::ObjectType::JOB.into_raw() },
3259                    2147483648,
3260                >,
3261                fidl::encoding::DefaultFuchsiaResourceDialect,
3262            >(
3263                self.container_job.as_mut().map(
3264                    <fidl::encoding::HandleType<
3265                        fidl::Job,
3266                        { fidl::ObjectType::JOB.into_raw() },
3267                        2147483648,
3268                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
3269                ),
3270                encoder,
3271                offset + cur_offset,
3272                depth,
3273            )?;
3274
3275            _prev_end_offset = cur_offset + envelope_size;
3276            if 2 > max_ordinal {
3277                return Ok(());
3278            }
3279
3280            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3281            // are envelope_size bytes.
3282            let cur_offset: usize = (2 - 1) * envelope_size;
3283
3284            // Zero reserved fields.
3285            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3286
3287            // Safety:
3288            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3289            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3290            //   envelope_size bytes, there is always sufficient room.
3291            fidl::encoding::encode_in_envelope_optional::<
3292                fidl::encoding::HandleType<
3293                    fidl::NullableHandle,
3294                    { fidl::ObjectType::NONE.into_raw() },
3295                    2147483648,
3296                >,
3297                fidl::encoding::DefaultFuchsiaResourceDialect,
3298            >(
3299                self.handle.as_mut().map(
3300                    <fidl::encoding::HandleType<
3301                        fidl::NullableHandle,
3302                        { fidl::ObjectType::NONE.into_raw() },
3303                        2147483648,
3304                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
3305                ),
3306                encoder,
3307                offset + cur_offset,
3308                depth,
3309            )?;
3310
3311            _prev_end_offset = cur_offset + envelope_size;
3312
3313            Ok(())
3314        }
3315    }
3316
3317    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3318        for ManagerRemoveWakeSourceRequest
3319    {
3320        #[inline(always)]
3321        fn new_empty() -> Self {
3322            Self::default()
3323        }
3324
3325        unsafe fn decode(
3326            &mut self,
3327            decoder: &mut fidl::encoding::Decoder<
3328                '_,
3329                fidl::encoding::DefaultFuchsiaResourceDialect,
3330            >,
3331            offset: usize,
3332            mut depth: fidl::encoding::Depth,
3333        ) -> fidl::Result<()> {
3334            decoder.debug_check_bounds::<Self>(offset);
3335            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3336                None => return Err(fidl::Error::NotNullable),
3337                Some(len) => len,
3338            };
3339            // Calling decoder.out_of_line_offset(0) is not allowed.
3340            if len == 0 {
3341                return Ok(());
3342            };
3343            depth.increment()?;
3344            let envelope_size = 8;
3345            let bytes_len = len * envelope_size;
3346            let offset = decoder.out_of_line_offset(bytes_len)?;
3347            // Decode the envelope for each type.
3348            let mut _next_ordinal_to_read = 0;
3349            let mut next_offset = offset;
3350            let end_offset = offset + bytes_len;
3351            _next_ordinal_to_read += 1;
3352            if next_offset >= end_offset {
3353                return Ok(());
3354            }
3355
3356            // Decode unknown envelopes for gaps in ordinals.
3357            while _next_ordinal_to_read < 1 {
3358                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3359                _next_ordinal_to_read += 1;
3360                next_offset += envelope_size;
3361            }
3362
3363            let next_out_of_line = decoder.next_out_of_line();
3364            let handles_before = decoder.remaining_handles();
3365            if let Some((inlined, num_bytes, num_handles)) =
3366                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3367            {
3368                let member_inline_size = <fidl::encoding::HandleType<
3369                    fidl::Job,
3370                    { fidl::ObjectType::JOB.into_raw() },
3371                    2147483648,
3372                > as fidl::encoding::TypeMarker>::inline_size(
3373                    decoder.context
3374                );
3375                if inlined != (member_inline_size <= 4) {
3376                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3377                }
3378                let inner_offset;
3379                let mut inner_depth = depth.clone();
3380                if inlined {
3381                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3382                    inner_offset = next_offset;
3383                } else {
3384                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3385                    inner_depth.increment()?;
3386                }
3387                let val_ref =
3388                self.container_job.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3389                fidl::decode!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3390                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3391                {
3392                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3393                }
3394                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3395                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3396                }
3397            }
3398
3399            next_offset += envelope_size;
3400            _next_ordinal_to_read += 1;
3401            if next_offset >= end_offset {
3402                return Ok(());
3403            }
3404
3405            // Decode unknown envelopes for gaps in ordinals.
3406            while _next_ordinal_to_read < 2 {
3407                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3408                _next_ordinal_to_read += 1;
3409                next_offset += envelope_size;
3410            }
3411
3412            let next_out_of_line = decoder.next_out_of_line();
3413            let handles_before = decoder.remaining_handles();
3414            if let Some((inlined, num_bytes, num_handles)) =
3415                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3416            {
3417                let member_inline_size = <fidl::encoding::HandleType<
3418                    fidl::NullableHandle,
3419                    { fidl::ObjectType::NONE.into_raw() },
3420                    2147483648,
3421                > as fidl::encoding::TypeMarker>::inline_size(
3422                    decoder.context
3423                );
3424                if inlined != (member_inline_size <= 4) {
3425                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3426                }
3427                let inner_offset;
3428                let mut inner_depth = depth.clone();
3429                if inlined {
3430                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3431                    inner_offset = next_offset;
3432                } else {
3433                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3434                    inner_depth.increment()?;
3435                }
3436                let val_ref =
3437                self.handle.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::NullableHandle, { fidl::ObjectType::NONE.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3438                fidl::decode!(fidl::encoding::HandleType<fidl::NullableHandle, { fidl::ObjectType::NONE.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3439                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3440                {
3441                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3442                }
3443                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3444                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3445                }
3446            }
3447
3448            next_offset += envelope_size;
3449
3450            // Decode the remaining unknown envelopes.
3451            while next_offset < end_offset {
3452                _next_ordinal_to_read += 1;
3453                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3454                next_offset += envelope_size;
3455            }
3456
3457            Ok(())
3458        }
3459    }
3460
3461    impl ManagerSuspendContainerRequest {
3462        #[inline(always)]
3463        fn max_ordinal_present(&self) -> u64 {
3464            if let Some(_) = self.wake_locks {
3465                return 2;
3466            }
3467            if let Some(_) = self.container_job {
3468                return 1;
3469            }
3470            0
3471        }
3472    }
3473
3474    impl fidl::encoding::ResourceTypeMarker for ManagerSuspendContainerRequest {
3475        type Borrowed<'a> = &'a mut Self;
3476        fn take_or_borrow<'a>(
3477            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3478        ) -> Self::Borrowed<'a> {
3479            value
3480        }
3481    }
3482
3483    unsafe impl fidl::encoding::TypeMarker for ManagerSuspendContainerRequest {
3484        type Owned = Self;
3485
3486        #[inline(always)]
3487        fn inline_align(_context: fidl::encoding::Context) -> usize {
3488            8
3489        }
3490
3491        #[inline(always)]
3492        fn inline_size(_context: fidl::encoding::Context) -> usize {
3493            16
3494        }
3495    }
3496
3497    unsafe impl
3498        fidl::encoding::Encode<
3499            ManagerSuspendContainerRequest,
3500            fidl::encoding::DefaultFuchsiaResourceDialect,
3501        > for &mut ManagerSuspendContainerRequest
3502    {
3503        unsafe fn encode(
3504            self,
3505            encoder: &mut fidl::encoding::Encoder<
3506                '_,
3507                fidl::encoding::DefaultFuchsiaResourceDialect,
3508            >,
3509            offset: usize,
3510            mut depth: fidl::encoding::Depth,
3511        ) -> fidl::Result<()> {
3512            encoder.debug_check_bounds::<ManagerSuspendContainerRequest>(offset);
3513            // Vector header
3514            let max_ordinal: u64 = self.max_ordinal_present();
3515            encoder.write_num(max_ordinal, offset);
3516            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3517            // Calling encoder.out_of_line_offset(0) is not allowed.
3518            if max_ordinal == 0 {
3519                return Ok(());
3520            }
3521            depth.increment()?;
3522            let envelope_size = 8;
3523            let bytes_len = max_ordinal as usize * envelope_size;
3524            #[allow(unused_variables)]
3525            let offset = encoder.out_of_line_offset(bytes_len);
3526            let mut _prev_end_offset: usize = 0;
3527            if 1 > max_ordinal {
3528                return Ok(());
3529            }
3530
3531            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3532            // are envelope_size bytes.
3533            let cur_offset: usize = (1 - 1) * envelope_size;
3534
3535            // Zero reserved fields.
3536            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3537
3538            // Safety:
3539            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3540            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3541            //   envelope_size bytes, there is always sufficient room.
3542            fidl::encoding::encode_in_envelope_optional::<
3543                fidl::encoding::HandleType<
3544                    fidl::Job,
3545                    { fidl::ObjectType::JOB.into_raw() },
3546                    2147483648,
3547                >,
3548                fidl::encoding::DefaultFuchsiaResourceDialect,
3549            >(
3550                self.container_job.as_mut().map(
3551                    <fidl::encoding::HandleType<
3552                        fidl::Job,
3553                        { fidl::ObjectType::JOB.into_raw() },
3554                        2147483648,
3555                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
3556                ),
3557                encoder,
3558                offset + cur_offset,
3559                depth,
3560            )?;
3561
3562            _prev_end_offset = cur_offset + envelope_size;
3563            if 2 > max_ordinal {
3564                return Ok(());
3565            }
3566
3567            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3568            // are envelope_size bytes.
3569            let cur_offset: usize = (2 - 1) * envelope_size;
3570
3571            // Zero reserved fields.
3572            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3573
3574            // Safety:
3575            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3576            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3577            //   envelope_size bytes, there is always sufficient room.
3578            fidl::encoding::encode_in_envelope_optional::<
3579                fidl::encoding::HandleType<
3580                    fidl::EventPair,
3581                    { fidl::ObjectType::EVENTPAIR.into_raw() },
3582                    2147483648,
3583                >,
3584                fidl::encoding::DefaultFuchsiaResourceDialect,
3585            >(
3586                self.wake_locks.as_mut().map(
3587                    <fidl::encoding::HandleType<
3588                        fidl::EventPair,
3589                        { fidl::ObjectType::EVENTPAIR.into_raw() },
3590                        2147483648,
3591                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
3592                ),
3593                encoder,
3594                offset + cur_offset,
3595                depth,
3596            )?;
3597
3598            _prev_end_offset = cur_offset + envelope_size;
3599
3600            Ok(())
3601        }
3602    }
3603
3604    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3605        for ManagerSuspendContainerRequest
3606    {
3607        #[inline(always)]
3608        fn new_empty() -> Self {
3609            Self::default()
3610        }
3611
3612        unsafe fn decode(
3613            &mut self,
3614            decoder: &mut fidl::encoding::Decoder<
3615                '_,
3616                fidl::encoding::DefaultFuchsiaResourceDialect,
3617            >,
3618            offset: usize,
3619            mut depth: fidl::encoding::Depth,
3620        ) -> fidl::Result<()> {
3621            decoder.debug_check_bounds::<Self>(offset);
3622            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3623                None => return Err(fidl::Error::NotNullable),
3624                Some(len) => len,
3625            };
3626            // Calling decoder.out_of_line_offset(0) is not allowed.
3627            if len == 0 {
3628                return Ok(());
3629            };
3630            depth.increment()?;
3631            let envelope_size = 8;
3632            let bytes_len = len * envelope_size;
3633            let offset = decoder.out_of_line_offset(bytes_len)?;
3634            // Decode the envelope for each type.
3635            let mut _next_ordinal_to_read = 0;
3636            let mut next_offset = offset;
3637            let end_offset = offset + bytes_len;
3638            _next_ordinal_to_read += 1;
3639            if next_offset >= end_offset {
3640                return Ok(());
3641            }
3642
3643            // Decode unknown envelopes for gaps in ordinals.
3644            while _next_ordinal_to_read < 1 {
3645                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3646                _next_ordinal_to_read += 1;
3647                next_offset += envelope_size;
3648            }
3649
3650            let next_out_of_line = decoder.next_out_of_line();
3651            let handles_before = decoder.remaining_handles();
3652            if let Some((inlined, num_bytes, num_handles)) =
3653                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3654            {
3655                let member_inline_size = <fidl::encoding::HandleType<
3656                    fidl::Job,
3657                    { fidl::ObjectType::JOB.into_raw() },
3658                    2147483648,
3659                > as fidl::encoding::TypeMarker>::inline_size(
3660                    decoder.context
3661                );
3662                if inlined != (member_inline_size <= 4) {
3663                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3664                }
3665                let inner_offset;
3666                let mut inner_depth = depth.clone();
3667                if inlined {
3668                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3669                    inner_offset = next_offset;
3670                } else {
3671                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3672                    inner_depth.increment()?;
3673                }
3674                let val_ref =
3675                self.container_job.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3676                fidl::decode!(fidl::encoding::HandleType<fidl::Job, { fidl::ObjectType::JOB.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3677                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3678                {
3679                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3680                }
3681                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3682                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3683                }
3684            }
3685
3686            next_offset += envelope_size;
3687            _next_ordinal_to_read += 1;
3688            if next_offset >= end_offset {
3689                return Ok(());
3690            }
3691
3692            // Decode unknown envelopes for gaps in ordinals.
3693            while _next_ordinal_to_read < 2 {
3694                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3695                _next_ordinal_to_read += 1;
3696                next_offset += envelope_size;
3697            }
3698
3699            let next_out_of_line = decoder.next_out_of_line();
3700            let handles_before = decoder.remaining_handles();
3701            if let Some((inlined, num_bytes, num_handles)) =
3702                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3703            {
3704                let member_inline_size = <fidl::encoding::HandleType<
3705                    fidl::EventPair,
3706                    { fidl::ObjectType::EVENTPAIR.into_raw() },
3707                    2147483648,
3708                > as fidl::encoding::TypeMarker>::inline_size(
3709                    decoder.context
3710                );
3711                if inlined != (member_inline_size <= 4) {
3712                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3713                }
3714                let inner_offset;
3715                let mut inner_depth = depth.clone();
3716                if inlined {
3717                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3718                    inner_offset = next_offset;
3719                } else {
3720                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3721                    inner_depth.increment()?;
3722                }
3723                let val_ref =
3724                self.wake_locks.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3725                fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3726                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3727                {
3728                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3729                }
3730                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3731                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3732                }
3733            }
3734
3735            next_offset += envelope_size;
3736
3737            // Decode the remaining unknown envelopes.
3738            while next_offset < end_offset {
3739                _next_ordinal_to_read += 1;
3740                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3741                next_offset += envelope_size;
3742            }
3743
3744            Ok(())
3745        }
3746    }
3747
3748    impl PagerRegisterFileResponse {
3749        #[inline(always)]
3750        fn max_ordinal_present(&self) -> u64 {
3751            if let Some(_) = self.vmo {
3752                return 1;
3753            }
3754            0
3755        }
3756    }
3757
3758    impl fidl::encoding::ResourceTypeMarker for PagerRegisterFileResponse {
3759        type Borrowed<'a> = &'a mut Self;
3760        fn take_or_borrow<'a>(
3761            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3762        ) -> Self::Borrowed<'a> {
3763            value
3764        }
3765    }
3766
3767    unsafe impl fidl::encoding::TypeMarker for PagerRegisterFileResponse {
3768        type Owned = Self;
3769
3770        #[inline(always)]
3771        fn inline_align(_context: fidl::encoding::Context) -> usize {
3772            8
3773        }
3774
3775        #[inline(always)]
3776        fn inline_size(_context: fidl::encoding::Context) -> usize {
3777            16
3778        }
3779    }
3780
3781    unsafe impl
3782        fidl::encoding::Encode<
3783            PagerRegisterFileResponse,
3784            fidl::encoding::DefaultFuchsiaResourceDialect,
3785        > for &mut PagerRegisterFileResponse
3786    {
3787        unsafe fn encode(
3788            self,
3789            encoder: &mut fidl::encoding::Encoder<
3790                '_,
3791                fidl::encoding::DefaultFuchsiaResourceDialect,
3792            >,
3793            offset: usize,
3794            mut depth: fidl::encoding::Depth,
3795        ) -> fidl::Result<()> {
3796            encoder.debug_check_bounds::<PagerRegisterFileResponse>(offset);
3797            // Vector header
3798            let max_ordinal: u64 = self.max_ordinal_present();
3799            encoder.write_num(max_ordinal, offset);
3800            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3801            // Calling encoder.out_of_line_offset(0) is not allowed.
3802            if max_ordinal == 0 {
3803                return Ok(());
3804            }
3805            depth.increment()?;
3806            let envelope_size = 8;
3807            let bytes_len = max_ordinal as usize * envelope_size;
3808            #[allow(unused_variables)]
3809            let offset = encoder.out_of_line_offset(bytes_len);
3810            let mut _prev_end_offset: usize = 0;
3811            if 1 > max_ordinal {
3812                return Ok(());
3813            }
3814
3815            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3816            // are envelope_size bytes.
3817            let cur_offset: usize = (1 - 1) * envelope_size;
3818
3819            // Zero reserved fields.
3820            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3821
3822            // Safety:
3823            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3824            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3825            //   envelope_size bytes, there is always sufficient room.
3826            fidl::encoding::encode_in_envelope_optional::<
3827                fidl::encoding::HandleType<
3828                    fidl::Vmo,
3829                    { fidl::ObjectType::VMO.into_raw() },
3830                    2147483648,
3831                >,
3832                fidl::encoding::DefaultFuchsiaResourceDialect,
3833            >(
3834                self.vmo.as_mut().map(
3835                    <fidl::encoding::HandleType<
3836                        fidl::Vmo,
3837                        { fidl::ObjectType::VMO.into_raw() },
3838                        2147483648,
3839                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
3840                ),
3841                encoder,
3842                offset + cur_offset,
3843                depth,
3844            )?;
3845
3846            _prev_end_offset = cur_offset + envelope_size;
3847
3848            Ok(())
3849        }
3850    }
3851
3852    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3853        for PagerRegisterFileResponse
3854    {
3855        #[inline(always)]
3856        fn new_empty() -> Self {
3857            Self::default()
3858        }
3859
3860        unsafe fn decode(
3861            &mut self,
3862            decoder: &mut fidl::encoding::Decoder<
3863                '_,
3864                fidl::encoding::DefaultFuchsiaResourceDialect,
3865            >,
3866            offset: usize,
3867            mut depth: fidl::encoding::Depth,
3868        ) -> fidl::Result<()> {
3869            decoder.debug_check_bounds::<Self>(offset);
3870            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3871                None => return Err(fidl::Error::NotNullable),
3872                Some(len) => len,
3873            };
3874            // Calling decoder.out_of_line_offset(0) is not allowed.
3875            if len == 0 {
3876                return Ok(());
3877            };
3878            depth.increment()?;
3879            let envelope_size = 8;
3880            let bytes_len = len * envelope_size;
3881            let offset = decoder.out_of_line_offset(bytes_len)?;
3882            // Decode the envelope for each type.
3883            let mut _next_ordinal_to_read = 0;
3884            let mut next_offset = offset;
3885            let end_offset = offset + bytes_len;
3886            _next_ordinal_to_read += 1;
3887            if next_offset >= end_offset {
3888                return Ok(());
3889            }
3890
3891            // Decode unknown envelopes for gaps in ordinals.
3892            while _next_ordinal_to_read < 1 {
3893                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3894                _next_ordinal_to_read += 1;
3895                next_offset += envelope_size;
3896            }
3897
3898            let next_out_of_line = decoder.next_out_of_line();
3899            let handles_before = decoder.remaining_handles();
3900            if let Some((inlined, num_bytes, num_handles)) =
3901                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3902            {
3903                let member_inline_size = <fidl::encoding::HandleType<
3904                    fidl::Vmo,
3905                    { fidl::ObjectType::VMO.into_raw() },
3906                    2147483648,
3907                > as fidl::encoding::TypeMarker>::inline_size(
3908                    decoder.context
3909                );
3910                if inlined != (member_inline_size <= 4) {
3911                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3912                }
3913                let inner_offset;
3914                let mut inner_depth = depth.clone();
3915                if inlined {
3916                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3917                    inner_offset = next_offset;
3918                } else {
3919                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3920                    inner_depth.increment()?;
3921                }
3922                let val_ref =
3923                self.vmo.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
3924                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
3925                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3926                {
3927                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3928                }
3929                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3930                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3931                }
3932            }
3933
3934            next_offset += envelope_size;
3935
3936            // Decode the remaining unknown envelopes.
3937            while next_offset < end_offset {
3938                _next_ordinal_to_read += 1;
3939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3940                next_offset += envelope_size;
3941            }
3942
3943            Ok(())
3944        }
3945    }
3946}