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