Skip to main content

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