fidl_test_suspendcontrol/
fidl_test_suspendcontrol.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 _};
10use futures::future::{self, MaybeDone, TryFutureExt};
11use zx_status;
12
13#[derive(Clone, Debug, Default, PartialEq)]
14pub struct DeviceSetSuspendStatesRequest {
15    pub suspend_states: Option<Vec<fidl_fuchsia_hardware_suspend::SuspendState>>,
16    #[doc(hidden)]
17    pub __source_breaking: fidl::marker::SourceBreaking,
18}
19
20impl fidl::Persistable for DeviceSetSuspendStatesRequest {}
21
22#[derive(Clone, Debug, Default, PartialEq)]
23pub struct DeviceAwaitSuspendResponse {
24    pub state_index: Option<u64>,
25    #[doc(hidden)]
26    pub __source_breaking: fidl::marker::SourceBreaking,
27}
28
29impl fidl::Persistable for DeviceAwaitSuspendResponse {}
30
31#[derive(Clone, Debug, Default, PartialEq)]
32pub struct SuspendResult {
33    pub reason: Option<fidl_fuchsia_hardware_suspend::WakeReason>,
34    pub suspend_duration: Option<i64>,
35    pub suspend_overhead: Option<i64>,
36    #[doc(hidden)]
37    pub __source_breaking: fidl::marker::SourceBreaking,
38}
39
40impl fidl::Persistable for SuspendResult {}
41
42#[derive(Clone, Debug)]
43pub enum DeviceResumeRequest {
44    Result(SuspendResult),
45    Error(i32),
46    #[doc(hidden)]
47    __SourceBreaking {
48        unknown_ordinal: u64,
49    },
50}
51
52/// Pattern that matches an unknown `DeviceResumeRequest` member.
53#[macro_export]
54macro_rules! DeviceResumeRequestUnknown {
55    () => {
56        _
57    };
58}
59
60// Custom PartialEq so that unknown variants are not equal to themselves.
61impl PartialEq for DeviceResumeRequest {
62    fn eq(&self, other: &Self) -> bool {
63        match (self, other) {
64            (Self::Result(x), Self::Result(y)) => *x == *y,
65            (Self::Error(x), Self::Error(y)) => *x == *y,
66            _ => false,
67        }
68    }
69}
70
71impl DeviceResumeRequest {
72    #[inline]
73    pub fn ordinal(&self) -> u64 {
74        match *self {
75            Self::Result(_) => 1,
76            Self::Error(_) => 2,
77            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
78        }
79    }
80
81    #[inline]
82    pub fn unknown_variant_for_testing() -> Self {
83        Self::__SourceBreaking { unknown_ordinal: 0 }
84    }
85
86    #[inline]
87    pub fn is_unknown(&self) -> bool {
88        match self {
89            Self::__SourceBreaking { .. } => true,
90            _ => false,
91        }
92    }
93}
94
95impl fidl::Persistable for DeviceResumeRequest {}
96
97#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
98pub struct DeviceMarker;
99
100impl fidl::endpoints::ProtocolMarker for DeviceMarker {
101    type Proxy = DeviceProxy;
102    type RequestStream = DeviceRequestStream;
103    #[cfg(target_os = "fuchsia")]
104    type SynchronousProxy = DeviceSynchronousProxy;
105
106    const DEBUG_NAME: &'static str = "test.suspendcontrol.Device";
107}
108impl fidl::endpoints::DiscoverableProtocolMarker for DeviceMarker {}
109pub type DeviceSetSuspendStatesResult = Result<(), i32>;
110pub type DeviceAwaitSuspendResult = Result<DeviceAwaitSuspendResponse, i32>;
111pub type DeviceResumeResult = Result<(), i32>;
112
113pub trait DeviceProxyInterface: Send + Sync {
114    type SetSuspendStatesResponseFut: std::future::Future<Output = Result<DeviceSetSuspendStatesResult, fidl::Error>>
115        + Send;
116    fn r#set_suspend_states(
117        &self,
118        payload: &DeviceSetSuspendStatesRequest,
119    ) -> Self::SetSuspendStatesResponseFut;
120    type AwaitSuspendResponseFut: std::future::Future<Output = Result<DeviceAwaitSuspendResult, fidl::Error>>
121        + Send;
122    fn r#await_suspend(&self) -> Self::AwaitSuspendResponseFut;
123    type ResumeResponseFut: std::future::Future<Output = Result<DeviceResumeResult, fidl::Error>>
124        + Send;
125    fn r#resume(&self, payload: &DeviceResumeRequest) -> Self::ResumeResponseFut;
126}
127#[derive(Debug)]
128#[cfg(target_os = "fuchsia")]
129pub struct DeviceSynchronousProxy {
130    client: fidl::client::sync::Client,
131}
132
133#[cfg(target_os = "fuchsia")]
134impl fidl::endpoints::SynchronousProxy for DeviceSynchronousProxy {
135    type Proxy = DeviceProxy;
136    type Protocol = DeviceMarker;
137
138    fn from_channel(inner: fidl::Channel) -> Self {
139        Self::new(inner)
140    }
141
142    fn into_channel(self) -> fidl::Channel {
143        self.client.into_channel()
144    }
145
146    fn as_channel(&self) -> &fidl::Channel {
147        self.client.as_channel()
148    }
149}
150
151#[cfg(target_os = "fuchsia")]
152impl DeviceSynchronousProxy {
153    pub fn new(channel: fidl::Channel) -> Self {
154        let protocol_name = <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
155        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
156    }
157
158    pub fn into_channel(self) -> fidl::Channel {
159        self.client.into_channel()
160    }
161
162    /// Waits until an event arrives and returns it. It is safe for other
163    /// threads to make concurrent requests while waiting for an event.
164    pub fn wait_for_event(
165        &self,
166        deadline: zx::MonotonicInstant,
167    ) -> Result<DeviceEvent, fidl::Error> {
168        DeviceEvent::decode(self.client.wait_for_event(deadline)?)
169    }
170
171    pub fn r#set_suspend_states(
172        &self,
173        mut payload: &DeviceSetSuspendStatesRequest,
174        ___deadline: zx::MonotonicInstant,
175    ) -> Result<DeviceSetSuspendStatesResult, fidl::Error> {
176        let _response = self.client.send_query::<
177            DeviceSetSuspendStatesRequest,
178            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
179        >(
180            payload,
181            0x3d37a51c2955e852,
182            fidl::encoding::DynamicFlags::empty(),
183            ___deadline,
184        )?;
185        Ok(_response.map(|x| x))
186    }
187
188    pub fn r#await_suspend(
189        &self,
190        ___deadline: zx::MonotonicInstant,
191    ) -> Result<DeviceAwaitSuspendResult, fidl::Error> {
192        let _response = self.client.send_query::<
193            fidl::encoding::EmptyPayload,
194            fidl::encoding::ResultType<DeviceAwaitSuspendResponse, i32>,
195        >(
196            (),
197            0x7eb0d662063b347e,
198            fidl::encoding::DynamicFlags::empty(),
199            ___deadline,
200        )?;
201        Ok(_response.map(|x| x))
202    }
203
204    pub fn r#resume(
205        &self,
206        mut payload: &DeviceResumeRequest,
207        ___deadline: zx::MonotonicInstant,
208    ) -> Result<DeviceResumeResult, fidl::Error> {
209        let _response = self.client.send_query::<
210            DeviceResumeRequest,
211            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
212        >(
213            payload,
214            0x2deb813cfe9b881e,
215            fidl::encoding::DynamicFlags::empty(),
216            ___deadline,
217        )?;
218        Ok(_response.map(|x| x))
219    }
220}
221
222#[derive(Debug, Clone)]
223pub struct DeviceProxy {
224    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
225}
226
227impl fidl::endpoints::Proxy for DeviceProxy {
228    type Protocol = DeviceMarker;
229
230    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
231        Self::new(inner)
232    }
233
234    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
235        self.client.into_channel().map_err(|client| Self { client })
236    }
237
238    fn as_channel(&self) -> &::fidl::AsyncChannel {
239        self.client.as_channel()
240    }
241}
242
243impl DeviceProxy {
244    /// Create a new Proxy for test.suspendcontrol/Device.
245    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
246        let protocol_name = <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
247        Self { client: fidl::client::Client::new(channel, protocol_name) }
248    }
249
250    /// Get a Stream of events from the remote end of the protocol.
251    ///
252    /// # Panics
253    ///
254    /// Panics if the event stream was already taken.
255    pub fn take_event_stream(&self) -> DeviceEventStream {
256        DeviceEventStream { event_receiver: self.client.take_event_receiver() }
257    }
258
259    pub fn r#set_suspend_states(
260        &self,
261        mut payload: &DeviceSetSuspendStatesRequest,
262    ) -> fidl::client::QueryResponseFut<
263        DeviceSetSuspendStatesResult,
264        fidl::encoding::DefaultFuchsiaResourceDialect,
265    > {
266        DeviceProxyInterface::r#set_suspend_states(self, payload)
267    }
268
269    pub fn r#await_suspend(
270        &self,
271    ) -> fidl::client::QueryResponseFut<
272        DeviceAwaitSuspendResult,
273        fidl::encoding::DefaultFuchsiaResourceDialect,
274    > {
275        DeviceProxyInterface::r#await_suspend(self)
276    }
277
278    pub fn r#resume(
279        &self,
280        mut payload: &DeviceResumeRequest,
281    ) -> fidl::client::QueryResponseFut<
282        DeviceResumeResult,
283        fidl::encoding::DefaultFuchsiaResourceDialect,
284    > {
285        DeviceProxyInterface::r#resume(self, payload)
286    }
287}
288
289impl DeviceProxyInterface for DeviceProxy {
290    type SetSuspendStatesResponseFut = fidl::client::QueryResponseFut<
291        DeviceSetSuspendStatesResult,
292        fidl::encoding::DefaultFuchsiaResourceDialect,
293    >;
294    fn r#set_suspend_states(
295        &self,
296        mut payload: &DeviceSetSuspendStatesRequest,
297    ) -> Self::SetSuspendStatesResponseFut {
298        fn _decode(
299            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
300        ) -> Result<DeviceSetSuspendStatesResult, fidl::Error> {
301            let _response = fidl::client::decode_transaction_body::<
302                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
303                fidl::encoding::DefaultFuchsiaResourceDialect,
304                0x3d37a51c2955e852,
305            >(_buf?)?;
306            Ok(_response.map(|x| x))
307        }
308        self.client
309            .send_query_and_decode::<DeviceSetSuspendStatesRequest, DeviceSetSuspendStatesResult>(
310                payload,
311                0x3d37a51c2955e852,
312                fidl::encoding::DynamicFlags::empty(),
313                _decode,
314            )
315    }
316
317    type AwaitSuspendResponseFut = fidl::client::QueryResponseFut<
318        DeviceAwaitSuspendResult,
319        fidl::encoding::DefaultFuchsiaResourceDialect,
320    >;
321    fn r#await_suspend(&self) -> Self::AwaitSuspendResponseFut {
322        fn _decode(
323            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
324        ) -> Result<DeviceAwaitSuspendResult, fidl::Error> {
325            let _response = fidl::client::decode_transaction_body::<
326                fidl::encoding::ResultType<DeviceAwaitSuspendResponse, i32>,
327                fidl::encoding::DefaultFuchsiaResourceDialect,
328                0x7eb0d662063b347e,
329            >(_buf?)?;
330            Ok(_response.map(|x| x))
331        }
332        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, DeviceAwaitSuspendResult>(
333            (),
334            0x7eb0d662063b347e,
335            fidl::encoding::DynamicFlags::empty(),
336            _decode,
337        )
338    }
339
340    type ResumeResponseFut = fidl::client::QueryResponseFut<
341        DeviceResumeResult,
342        fidl::encoding::DefaultFuchsiaResourceDialect,
343    >;
344    fn r#resume(&self, mut payload: &DeviceResumeRequest) -> Self::ResumeResponseFut {
345        fn _decode(
346            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
347        ) -> Result<DeviceResumeResult, fidl::Error> {
348            let _response = fidl::client::decode_transaction_body::<
349                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
350                fidl::encoding::DefaultFuchsiaResourceDialect,
351                0x2deb813cfe9b881e,
352            >(_buf?)?;
353            Ok(_response.map(|x| x))
354        }
355        self.client.send_query_and_decode::<DeviceResumeRequest, DeviceResumeResult>(
356            payload,
357            0x2deb813cfe9b881e,
358            fidl::encoding::DynamicFlags::empty(),
359            _decode,
360        )
361    }
362}
363
364pub struct DeviceEventStream {
365    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
366}
367
368impl std::marker::Unpin for DeviceEventStream {}
369
370impl futures::stream::FusedStream for DeviceEventStream {
371    fn is_terminated(&self) -> bool {
372        self.event_receiver.is_terminated()
373    }
374}
375
376impl futures::Stream for DeviceEventStream {
377    type Item = Result<DeviceEvent, fidl::Error>;
378
379    fn poll_next(
380        mut self: std::pin::Pin<&mut Self>,
381        cx: &mut std::task::Context<'_>,
382    ) -> std::task::Poll<Option<Self::Item>> {
383        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
384            &mut self.event_receiver,
385            cx
386        )?) {
387            Some(buf) => std::task::Poll::Ready(Some(DeviceEvent::decode(buf))),
388            None => std::task::Poll::Ready(None),
389        }
390    }
391}
392
393#[derive(Debug)]
394pub enum DeviceEvent {}
395
396impl DeviceEvent {
397    /// Decodes a message buffer as a [`DeviceEvent`].
398    fn decode(
399        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
400    ) -> Result<DeviceEvent, fidl::Error> {
401        let (bytes, _handles) = buf.split_mut();
402        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
403        debug_assert_eq!(tx_header.tx_id, 0);
404        match tx_header.ordinal {
405            _ => Err(fidl::Error::UnknownOrdinal {
406                ordinal: tx_header.ordinal,
407                protocol_name: <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
408            }),
409        }
410    }
411}
412
413/// A Stream of incoming requests for test.suspendcontrol/Device.
414pub struct DeviceRequestStream {
415    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
416    is_terminated: bool,
417}
418
419impl std::marker::Unpin for DeviceRequestStream {}
420
421impl futures::stream::FusedStream for DeviceRequestStream {
422    fn is_terminated(&self) -> bool {
423        self.is_terminated
424    }
425}
426
427impl fidl::endpoints::RequestStream for DeviceRequestStream {
428    type Protocol = DeviceMarker;
429    type ControlHandle = DeviceControlHandle;
430
431    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
432        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
433    }
434
435    fn control_handle(&self) -> Self::ControlHandle {
436        DeviceControlHandle { inner: self.inner.clone() }
437    }
438
439    fn into_inner(
440        self,
441    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
442    {
443        (self.inner, self.is_terminated)
444    }
445
446    fn from_inner(
447        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
448        is_terminated: bool,
449    ) -> Self {
450        Self { inner, is_terminated }
451    }
452}
453
454impl futures::Stream for DeviceRequestStream {
455    type Item = Result<DeviceRequest, fidl::Error>;
456
457    fn poll_next(
458        mut self: std::pin::Pin<&mut Self>,
459        cx: &mut std::task::Context<'_>,
460    ) -> std::task::Poll<Option<Self::Item>> {
461        let this = &mut *self;
462        if this.inner.check_shutdown(cx) {
463            this.is_terminated = true;
464            return std::task::Poll::Ready(None);
465        }
466        if this.is_terminated {
467            panic!("polled DeviceRequestStream after completion");
468        }
469        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
470            |bytes, handles| {
471                match this.inner.channel().read_etc(cx, bytes, handles) {
472                    std::task::Poll::Ready(Ok(())) => {}
473                    std::task::Poll::Pending => return std::task::Poll::Pending,
474                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
475                        this.is_terminated = true;
476                        return std::task::Poll::Ready(None);
477                    }
478                    std::task::Poll::Ready(Err(e)) => {
479                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
480                            e.into(),
481                        ))))
482                    }
483                }
484
485                // A message has been received from the channel
486                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
487
488                std::task::Poll::Ready(Some(match header.ordinal {
489                    0x3d37a51c2955e852 => {
490                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
491                        let mut req = fidl::new_empty!(
492                            DeviceSetSuspendStatesRequest,
493                            fidl::encoding::DefaultFuchsiaResourceDialect
494                        );
495                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceSetSuspendStatesRequest>(&header, _body_bytes, handles, &mut req)?;
496                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
497                        Ok(DeviceRequest::SetSuspendStates {
498                            payload: req,
499                            responder: DeviceSetSuspendStatesResponder {
500                                control_handle: std::mem::ManuallyDrop::new(control_handle),
501                                tx_id: header.tx_id,
502                            },
503                        })
504                    }
505                    0x7eb0d662063b347e => {
506                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
507                        let mut req = fidl::new_empty!(
508                            fidl::encoding::EmptyPayload,
509                            fidl::encoding::DefaultFuchsiaResourceDialect
510                        );
511                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
512                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
513                        Ok(DeviceRequest::AwaitSuspend {
514                            responder: DeviceAwaitSuspendResponder {
515                                control_handle: std::mem::ManuallyDrop::new(control_handle),
516                                tx_id: header.tx_id,
517                            },
518                        })
519                    }
520                    0x2deb813cfe9b881e => {
521                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
522                        let mut req = fidl::new_empty!(
523                            DeviceResumeRequest,
524                            fidl::encoding::DefaultFuchsiaResourceDialect
525                        );
526                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceResumeRequest>(&header, _body_bytes, handles, &mut req)?;
527                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
528                        Ok(DeviceRequest::Resume {
529                            payload: req,
530                            responder: DeviceResumeResponder {
531                                control_handle: std::mem::ManuallyDrop::new(control_handle),
532                                tx_id: header.tx_id,
533                            },
534                        })
535                    }
536                    _ => Err(fidl::Error::UnknownOrdinal {
537                        ordinal: header.ordinal,
538                        protocol_name:
539                            <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
540                    }),
541                }))
542            },
543        )
544    }
545}
546
547#[derive(Debug)]
548pub enum DeviceRequest {
549    SetSuspendStates {
550        payload: DeviceSetSuspendStatesRequest,
551        responder: DeviceSetSuspendStatesResponder,
552    },
553    AwaitSuspend {
554        responder: DeviceAwaitSuspendResponder,
555    },
556    Resume {
557        payload: DeviceResumeRequest,
558        responder: DeviceResumeResponder,
559    },
560}
561
562impl DeviceRequest {
563    #[allow(irrefutable_let_patterns)]
564    pub fn into_set_suspend_states(
565        self,
566    ) -> Option<(DeviceSetSuspendStatesRequest, DeviceSetSuspendStatesResponder)> {
567        if let DeviceRequest::SetSuspendStates { payload, responder } = self {
568            Some((payload, responder))
569        } else {
570            None
571        }
572    }
573
574    #[allow(irrefutable_let_patterns)]
575    pub fn into_await_suspend(self) -> Option<(DeviceAwaitSuspendResponder)> {
576        if let DeviceRequest::AwaitSuspend { responder } = self {
577            Some((responder))
578        } else {
579            None
580        }
581    }
582
583    #[allow(irrefutable_let_patterns)]
584    pub fn into_resume(self) -> Option<(DeviceResumeRequest, DeviceResumeResponder)> {
585        if let DeviceRequest::Resume { payload, responder } = self {
586            Some((payload, responder))
587        } else {
588            None
589        }
590    }
591
592    /// Name of the method defined in FIDL
593    pub fn method_name(&self) -> &'static str {
594        match *self {
595            DeviceRequest::SetSuspendStates { .. } => "set_suspend_states",
596            DeviceRequest::AwaitSuspend { .. } => "await_suspend",
597            DeviceRequest::Resume { .. } => "resume",
598        }
599    }
600}
601
602#[derive(Debug, Clone)]
603pub struct DeviceControlHandle {
604    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
605}
606
607impl fidl::endpoints::ControlHandle for DeviceControlHandle {
608    fn shutdown(&self) {
609        self.inner.shutdown()
610    }
611    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
612        self.inner.shutdown_with_epitaph(status)
613    }
614
615    fn is_closed(&self) -> bool {
616        self.inner.channel().is_closed()
617    }
618    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
619        self.inner.channel().on_closed()
620    }
621
622    #[cfg(target_os = "fuchsia")]
623    fn signal_peer(
624        &self,
625        clear_mask: zx::Signals,
626        set_mask: zx::Signals,
627    ) -> Result<(), zx_status::Status> {
628        use fidl::Peered;
629        self.inner.channel().signal_peer(clear_mask, set_mask)
630    }
631}
632
633impl DeviceControlHandle {}
634
635#[must_use = "FIDL methods require a response to be sent"]
636#[derive(Debug)]
637pub struct DeviceSetSuspendStatesResponder {
638    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
639    tx_id: u32,
640}
641
642/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
643/// if the responder is dropped without sending a response, so that the client
644/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
645impl std::ops::Drop for DeviceSetSuspendStatesResponder {
646    fn drop(&mut self) {
647        self.control_handle.shutdown();
648        // Safety: drops once, never accessed again
649        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
650    }
651}
652
653impl fidl::endpoints::Responder for DeviceSetSuspendStatesResponder {
654    type ControlHandle = DeviceControlHandle;
655
656    fn control_handle(&self) -> &DeviceControlHandle {
657        &self.control_handle
658    }
659
660    fn drop_without_shutdown(mut self) {
661        // Safety: drops once, never accessed again due to mem::forget
662        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
663        // Prevent Drop from running (which would shut down the channel)
664        std::mem::forget(self);
665    }
666}
667
668impl DeviceSetSuspendStatesResponder {
669    /// Sends a response to the FIDL transaction.
670    ///
671    /// Sets the channel to shutdown if an error occurs.
672    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
673        let _result = self.send_raw(result);
674        if _result.is_err() {
675            self.control_handle.shutdown();
676        }
677        self.drop_without_shutdown();
678        _result
679    }
680
681    /// Similar to "send" but does not shutdown the channel if an error occurs.
682    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
683        let _result = self.send_raw(result);
684        self.drop_without_shutdown();
685        _result
686    }
687
688    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
689        self.control_handle
690            .inner
691            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
692                result,
693                self.tx_id,
694                0x3d37a51c2955e852,
695                fidl::encoding::DynamicFlags::empty(),
696            )
697    }
698}
699
700#[must_use = "FIDL methods require a response to be sent"]
701#[derive(Debug)]
702pub struct DeviceAwaitSuspendResponder {
703    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
704    tx_id: u32,
705}
706
707/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
708/// if the responder is dropped without sending a response, so that the client
709/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
710impl std::ops::Drop for DeviceAwaitSuspendResponder {
711    fn drop(&mut self) {
712        self.control_handle.shutdown();
713        // Safety: drops once, never accessed again
714        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
715    }
716}
717
718impl fidl::endpoints::Responder for DeviceAwaitSuspendResponder {
719    type ControlHandle = DeviceControlHandle;
720
721    fn control_handle(&self) -> &DeviceControlHandle {
722        &self.control_handle
723    }
724
725    fn drop_without_shutdown(mut self) {
726        // Safety: drops once, never accessed again due to mem::forget
727        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
728        // Prevent Drop from running (which would shut down the channel)
729        std::mem::forget(self);
730    }
731}
732
733impl DeviceAwaitSuspendResponder {
734    /// Sends a response to the FIDL transaction.
735    ///
736    /// Sets the channel to shutdown if an error occurs.
737    pub fn send(
738        self,
739        mut result: Result<&DeviceAwaitSuspendResponse, i32>,
740    ) -> Result<(), fidl::Error> {
741        let _result = self.send_raw(result);
742        if _result.is_err() {
743            self.control_handle.shutdown();
744        }
745        self.drop_without_shutdown();
746        _result
747    }
748
749    /// Similar to "send" but does not shutdown the channel if an error occurs.
750    pub fn send_no_shutdown_on_err(
751        self,
752        mut result: Result<&DeviceAwaitSuspendResponse, i32>,
753    ) -> Result<(), fidl::Error> {
754        let _result = self.send_raw(result);
755        self.drop_without_shutdown();
756        _result
757    }
758
759    fn send_raw(
760        &self,
761        mut result: Result<&DeviceAwaitSuspendResponse, i32>,
762    ) -> Result<(), fidl::Error> {
763        self.control_handle
764            .inner
765            .send::<fidl::encoding::ResultType<DeviceAwaitSuspendResponse, i32>>(
766                result,
767                self.tx_id,
768                0x7eb0d662063b347e,
769                fidl::encoding::DynamicFlags::empty(),
770            )
771    }
772}
773
774#[must_use = "FIDL methods require a response to be sent"]
775#[derive(Debug)]
776pub struct DeviceResumeResponder {
777    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
778    tx_id: u32,
779}
780
781/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
782/// if the responder is dropped without sending a response, so that the client
783/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
784impl std::ops::Drop for DeviceResumeResponder {
785    fn drop(&mut self) {
786        self.control_handle.shutdown();
787        // Safety: drops once, never accessed again
788        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
789    }
790}
791
792impl fidl::endpoints::Responder for DeviceResumeResponder {
793    type ControlHandle = DeviceControlHandle;
794
795    fn control_handle(&self) -> &DeviceControlHandle {
796        &self.control_handle
797    }
798
799    fn drop_without_shutdown(mut self) {
800        // Safety: drops once, never accessed again due to mem::forget
801        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
802        // Prevent Drop from running (which would shut down the channel)
803        std::mem::forget(self);
804    }
805}
806
807impl DeviceResumeResponder {
808    /// Sends a response to the FIDL transaction.
809    ///
810    /// Sets the channel to shutdown if an error occurs.
811    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
812        let _result = self.send_raw(result);
813        if _result.is_err() {
814            self.control_handle.shutdown();
815        }
816        self.drop_without_shutdown();
817        _result
818    }
819
820    /// Similar to "send" but does not shutdown the channel if an error occurs.
821    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
822        let _result = self.send_raw(result);
823        self.drop_without_shutdown();
824        _result
825    }
826
827    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
828        self.control_handle
829            .inner
830            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
831                result,
832                self.tx_id,
833                0x2deb813cfe9b881e,
834                fidl::encoding::DynamicFlags::empty(),
835            )
836    }
837}
838
839mod internal {
840    use super::*;
841
842    impl DeviceSetSuspendStatesRequest {
843        #[inline(always)]
844        fn max_ordinal_present(&self) -> u64 {
845            if let Some(_) = self.suspend_states {
846                return 1;
847            }
848            0
849        }
850    }
851
852    impl fidl::encoding::ValueTypeMarker for DeviceSetSuspendStatesRequest {
853        type Borrowed<'a> = &'a Self;
854        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
855            value
856        }
857    }
858
859    unsafe impl fidl::encoding::TypeMarker for DeviceSetSuspendStatesRequest {
860        type Owned = Self;
861
862        #[inline(always)]
863        fn inline_align(_context: fidl::encoding::Context) -> usize {
864            8
865        }
866
867        #[inline(always)]
868        fn inline_size(_context: fidl::encoding::Context) -> usize {
869            16
870        }
871    }
872
873    unsafe impl<D: fidl::encoding::ResourceDialect>
874        fidl::encoding::Encode<DeviceSetSuspendStatesRequest, D>
875        for &DeviceSetSuspendStatesRequest
876    {
877        unsafe fn encode(
878            self,
879            encoder: &mut fidl::encoding::Encoder<'_, D>,
880            offset: usize,
881            mut depth: fidl::encoding::Depth,
882        ) -> fidl::Result<()> {
883            encoder.debug_check_bounds::<DeviceSetSuspendStatesRequest>(offset);
884            // Vector header
885            let max_ordinal: u64 = self.max_ordinal_present();
886            encoder.write_num(max_ordinal, offset);
887            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
888            // Calling encoder.out_of_line_offset(0) is not allowed.
889            if max_ordinal == 0 {
890                return Ok(());
891            }
892            depth.increment()?;
893            let envelope_size = 8;
894            let bytes_len = max_ordinal as usize * envelope_size;
895            #[allow(unused_variables)]
896            let offset = encoder.out_of_line_offset(bytes_len);
897            let mut _prev_end_offset: usize = 0;
898            if 1 > max_ordinal {
899                return Ok(());
900            }
901
902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
903            // are envelope_size bytes.
904            let cur_offset: usize = (1 - 1) * envelope_size;
905
906            // Zero reserved fields.
907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
908
909            // Safety:
910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
912            //   envelope_size bytes, there is always sufficient room.
913            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_hardware_suspend::SuspendState, 256>, D>(
914            self.suspend_states.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_hardware_suspend::SuspendState, 256> as fidl::encoding::ValueTypeMarker>::borrow),
915            encoder, offset + cur_offset, depth
916        )?;
917
918            _prev_end_offset = cur_offset + envelope_size;
919
920            Ok(())
921        }
922    }
923
924    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
925        for DeviceSetSuspendStatesRequest
926    {
927        #[inline(always)]
928        fn new_empty() -> Self {
929            Self::default()
930        }
931
932        unsafe fn decode(
933            &mut self,
934            decoder: &mut fidl::encoding::Decoder<'_, D>,
935            offset: usize,
936            mut depth: fidl::encoding::Depth,
937        ) -> fidl::Result<()> {
938            decoder.debug_check_bounds::<Self>(offset);
939            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
940                None => return Err(fidl::Error::NotNullable),
941                Some(len) => len,
942            };
943            // Calling decoder.out_of_line_offset(0) is not allowed.
944            if len == 0 {
945                return Ok(());
946            };
947            depth.increment()?;
948            let envelope_size = 8;
949            let bytes_len = len * envelope_size;
950            let offset = decoder.out_of_line_offset(bytes_len)?;
951            // Decode the envelope for each type.
952            let mut _next_ordinal_to_read = 0;
953            let mut next_offset = offset;
954            let end_offset = offset + bytes_len;
955            _next_ordinal_to_read += 1;
956            if next_offset >= end_offset {
957                return Ok(());
958            }
959
960            // Decode unknown envelopes for gaps in ordinals.
961            while _next_ordinal_to_read < 1 {
962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
963                _next_ordinal_to_read += 1;
964                next_offset += envelope_size;
965            }
966
967            let next_out_of_line = decoder.next_out_of_line();
968            let handles_before = decoder.remaining_handles();
969            if let Some((inlined, num_bytes, num_handles)) =
970                fidl::encoding::decode_envelope_header(decoder, next_offset)?
971            {
972                let member_inline_size = <fidl::encoding::Vector<
973                    fidl_fuchsia_hardware_suspend::SuspendState,
974                    256,
975                > as fidl::encoding::TypeMarker>::inline_size(
976                    decoder.context
977                );
978                if inlined != (member_inline_size <= 4) {
979                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
980                }
981                let inner_offset;
982                let mut inner_depth = depth.clone();
983                if inlined {
984                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
985                    inner_offset = next_offset;
986                } else {
987                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
988                    inner_depth.increment()?;
989                }
990                let val_ref =
991                self.suspend_states.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_hardware_suspend::SuspendState, 256>, D));
992                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_hardware_suspend::SuspendState, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
993                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
994                {
995                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
996                }
997                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
998                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
999                }
1000            }
1001
1002            next_offset += envelope_size;
1003
1004            // Decode the remaining unknown envelopes.
1005            while next_offset < end_offset {
1006                _next_ordinal_to_read += 1;
1007                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1008                next_offset += envelope_size;
1009            }
1010
1011            Ok(())
1012        }
1013    }
1014
1015    impl DeviceAwaitSuspendResponse {
1016        #[inline(always)]
1017        fn max_ordinal_present(&self) -> u64 {
1018            if let Some(_) = self.state_index {
1019                return 1;
1020            }
1021            0
1022        }
1023    }
1024
1025    impl fidl::encoding::ValueTypeMarker for DeviceAwaitSuspendResponse {
1026        type Borrowed<'a> = &'a Self;
1027        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1028            value
1029        }
1030    }
1031
1032    unsafe impl fidl::encoding::TypeMarker for DeviceAwaitSuspendResponse {
1033        type Owned = Self;
1034
1035        #[inline(always)]
1036        fn inline_align(_context: fidl::encoding::Context) -> usize {
1037            8
1038        }
1039
1040        #[inline(always)]
1041        fn inline_size(_context: fidl::encoding::Context) -> usize {
1042            16
1043        }
1044    }
1045
1046    unsafe impl<D: fidl::encoding::ResourceDialect>
1047        fidl::encoding::Encode<DeviceAwaitSuspendResponse, D> for &DeviceAwaitSuspendResponse
1048    {
1049        unsafe fn encode(
1050            self,
1051            encoder: &mut fidl::encoding::Encoder<'_, D>,
1052            offset: usize,
1053            mut depth: fidl::encoding::Depth,
1054        ) -> fidl::Result<()> {
1055            encoder.debug_check_bounds::<DeviceAwaitSuspendResponse>(offset);
1056            // Vector header
1057            let max_ordinal: u64 = self.max_ordinal_present();
1058            encoder.write_num(max_ordinal, offset);
1059            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1060            // Calling encoder.out_of_line_offset(0) is not allowed.
1061            if max_ordinal == 0 {
1062                return Ok(());
1063            }
1064            depth.increment()?;
1065            let envelope_size = 8;
1066            let bytes_len = max_ordinal as usize * envelope_size;
1067            #[allow(unused_variables)]
1068            let offset = encoder.out_of_line_offset(bytes_len);
1069            let mut _prev_end_offset: usize = 0;
1070            if 1 > max_ordinal {
1071                return Ok(());
1072            }
1073
1074            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1075            // are envelope_size bytes.
1076            let cur_offset: usize = (1 - 1) * envelope_size;
1077
1078            // Zero reserved fields.
1079            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1080
1081            // Safety:
1082            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1083            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1084            //   envelope_size bytes, there is always sufficient room.
1085            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1086                self.state_index.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1087                encoder,
1088                offset + cur_offset,
1089                depth,
1090            )?;
1091
1092            _prev_end_offset = cur_offset + envelope_size;
1093
1094            Ok(())
1095        }
1096    }
1097
1098    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1099        for DeviceAwaitSuspendResponse
1100    {
1101        #[inline(always)]
1102        fn new_empty() -> Self {
1103            Self::default()
1104        }
1105
1106        unsafe fn decode(
1107            &mut self,
1108            decoder: &mut fidl::encoding::Decoder<'_, D>,
1109            offset: usize,
1110            mut depth: fidl::encoding::Depth,
1111        ) -> fidl::Result<()> {
1112            decoder.debug_check_bounds::<Self>(offset);
1113            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1114                None => return Err(fidl::Error::NotNullable),
1115                Some(len) => len,
1116            };
1117            // Calling decoder.out_of_line_offset(0) is not allowed.
1118            if len == 0 {
1119                return Ok(());
1120            };
1121            depth.increment()?;
1122            let envelope_size = 8;
1123            let bytes_len = len * envelope_size;
1124            let offset = decoder.out_of_line_offset(bytes_len)?;
1125            // Decode the envelope for each type.
1126            let mut _next_ordinal_to_read = 0;
1127            let mut next_offset = offset;
1128            let end_offset = offset + bytes_len;
1129            _next_ordinal_to_read += 1;
1130            if next_offset >= end_offset {
1131                return Ok(());
1132            }
1133
1134            // Decode unknown envelopes for gaps in ordinals.
1135            while _next_ordinal_to_read < 1 {
1136                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1137                _next_ordinal_to_read += 1;
1138                next_offset += envelope_size;
1139            }
1140
1141            let next_out_of_line = decoder.next_out_of_line();
1142            let handles_before = decoder.remaining_handles();
1143            if let Some((inlined, num_bytes, num_handles)) =
1144                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1145            {
1146                let member_inline_size =
1147                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1148                if inlined != (member_inline_size <= 4) {
1149                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1150                }
1151                let inner_offset;
1152                let mut inner_depth = depth.clone();
1153                if inlined {
1154                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1155                    inner_offset = next_offset;
1156                } else {
1157                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1158                    inner_depth.increment()?;
1159                }
1160                let val_ref = self.state_index.get_or_insert_with(|| fidl::new_empty!(u64, D));
1161                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1162                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1163                {
1164                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1165                }
1166                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1167                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1168                }
1169            }
1170
1171            next_offset += envelope_size;
1172
1173            // Decode the remaining unknown envelopes.
1174            while next_offset < end_offset {
1175                _next_ordinal_to_read += 1;
1176                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1177                next_offset += envelope_size;
1178            }
1179
1180            Ok(())
1181        }
1182    }
1183
1184    impl SuspendResult {
1185        #[inline(always)]
1186        fn max_ordinal_present(&self) -> u64 {
1187            if let Some(_) = self.suspend_overhead {
1188                return 3;
1189            }
1190            if let Some(_) = self.suspend_duration {
1191                return 2;
1192            }
1193            if let Some(_) = self.reason {
1194                return 1;
1195            }
1196            0
1197        }
1198    }
1199
1200    impl fidl::encoding::ValueTypeMarker for SuspendResult {
1201        type Borrowed<'a> = &'a Self;
1202        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1203            value
1204        }
1205    }
1206
1207    unsafe impl fidl::encoding::TypeMarker for SuspendResult {
1208        type Owned = Self;
1209
1210        #[inline(always)]
1211        fn inline_align(_context: fidl::encoding::Context) -> usize {
1212            8
1213        }
1214
1215        #[inline(always)]
1216        fn inline_size(_context: fidl::encoding::Context) -> usize {
1217            16
1218        }
1219    }
1220
1221    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SuspendResult, D>
1222        for &SuspendResult
1223    {
1224        unsafe fn encode(
1225            self,
1226            encoder: &mut fidl::encoding::Encoder<'_, D>,
1227            offset: usize,
1228            mut depth: fidl::encoding::Depth,
1229        ) -> fidl::Result<()> {
1230            encoder.debug_check_bounds::<SuspendResult>(offset);
1231            // Vector header
1232            let max_ordinal: u64 = self.max_ordinal_present();
1233            encoder.write_num(max_ordinal, offset);
1234            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1235            // Calling encoder.out_of_line_offset(0) is not allowed.
1236            if max_ordinal == 0 {
1237                return Ok(());
1238            }
1239            depth.increment()?;
1240            let envelope_size = 8;
1241            let bytes_len = max_ordinal as usize * envelope_size;
1242            #[allow(unused_variables)]
1243            let offset = encoder.out_of_line_offset(bytes_len);
1244            let mut _prev_end_offset: usize = 0;
1245            if 1 > max_ordinal {
1246                return Ok(());
1247            }
1248
1249            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1250            // are envelope_size bytes.
1251            let cur_offset: usize = (1 - 1) * envelope_size;
1252
1253            // Zero reserved fields.
1254            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1255
1256            // Safety:
1257            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1258            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1259            //   envelope_size bytes, there is always sufficient room.
1260            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_suspend::WakeReason, D>(
1261            self.reason.as_ref().map(<fidl_fuchsia_hardware_suspend::WakeReason as fidl::encoding::ValueTypeMarker>::borrow),
1262            encoder, offset + cur_offset, depth
1263        )?;
1264
1265            _prev_end_offset = cur_offset + envelope_size;
1266            if 2 > max_ordinal {
1267                return Ok(());
1268            }
1269
1270            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1271            // are envelope_size bytes.
1272            let cur_offset: usize = (2 - 1) * envelope_size;
1273
1274            // Zero reserved fields.
1275            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1276
1277            // Safety:
1278            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1279            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1280            //   envelope_size bytes, there is always sufficient room.
1281            fidl::encoding::encode_in_envelope_optional::<i64, D>(
1282                self.suspend_duration
1283                    .as_ref()
1284                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1285                encoder,
1286                offset + cur_offset,
1287                depth,
1288            )?;
1289
1290            _prev_end_offset = cur_offset + envelope_size;
1291            if 3 > max_ordinal {
1292                return Ok(());
1293            }
1294
1295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1296            // are envelope_size bytes.
1297            let cur_offset: usize = (3 - 1) * envelope_size;
1298
1299            // Zero reserved fields.
1300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1301
1302            // Safety:
1303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1305            //   envelope_size bytes, there is always sufficient room.
1306            fidl::encoding::encode_in_envelope_optional::<i64, D>(
1307                self.suspend_overhead
1308                    .as_ref()
1309                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1310                encoder,
1311                offset + cur_offset,
1312                depth,
1313            )?;
1314
1315            _prev_end_offset = cur_offset + envelope_size;
1316
1317            Ok(())
1318        }
1319    }
1320
1321    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SuspendResult {
1322        #[inline(always)]
1323        fn new_empty() -> Self {
1324            Self::default()
1325        }
1326
1327        unsafe fn decode(
1328            &mut self,
1329            decoder: &mut fidl::encoding::Decoder<'_, D>,
1330            offset: usize,
1331            mut depth: fidl::encoding::Depth,
1332        ) -> fidl::Result<()> {
1333            decoder.debug_check_bounds::<Self>(offset);
1334            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1335                None => return Err(fidl::Error::NotNullable),
1336                Some(len) => len,
1337            };
1338            // Calling decoder.out_of_line_offset(0) is not allowed.
1339            if len == 0 {
1340                return Ok(());
1341            };
1342            depth.increment()?;
1343            let envelope_size = 8;
1344            let bytes_len = len * envelope_size;
1345            let offset = decoder.out_of_line_offset(bytes_len)?;
1346            // Decode the envelope for each type.
1347            let mut _next_ordinal_to_read = 0;
1348            let mut next_offset = offset;
1349            let end_offset = offset + bytes_len;
1350            _next_ordinal_to_read += 1;
1351            if next_offset >= end_offset {
1352                return Ok(());
1353            }
1354
1355            // Decode unknown envelopes for gaps in ordinals.
1356            while _next_ordinal_to_read < 1 {
1357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1358                _next_ordinal_to_read += 1;
1359                next_offset += envelope_size;
1360            }
1361
1362            let next_out_of_line = decoder.next_out_of_line();
1363            let handles_before = decoder.remaining_handles();
1364            if let Some((inlined, num_bytes, num_handles)) =
1365                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1366            {
1367                let member_inline_size = <fidl_fuchsia_hardware_suspend::WakeReason as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1368                if inlined != (member_inline_size <= 4) {
1369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1370                }
1371                let inner_offset;
1372                let mut inner_depth = depth.clone();
1373                if inlined {
1374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1375                    inner_offset = next_offset;
1376                } else {
1377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1378                    inner_depth.increment()?;
1379                }
1380                let val_ref = self.reason.get_or_insert_with(|| {
1381                    fidl::new_empty!(fidl_fuchsia_hardware_suspend::WakeReason, D)
1382                });
1383                fidl::decode!(
1384                    fidl_fuchsia_hardware_suspend::WakeReason,
1385                    D,
1386                    val_ref,
1387                    decoder,
1388                    inner_offset,
1389                    inner_depth
1390                )?;
1391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1392                {
1393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1394                }
1395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1397                }
1398            }
1399
1400            next_offset += envelope_size;
1401            _next_ordinal_to_read += 1;
1402            if next_offset >= end_offset {
1403                return Ok(());
1404            }
1405
1406            // Decode unknown envelopes for gaps in ordinals.
1407            while _next_ordinal_to_read < 2 {
1408                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1409                _next_ordinal_to_read += 1;
1410                next_offset += envelope_size;
1411            }
1412
1413            let next_out_of_line = decoder.next_out_of_line();
1414            let handles_before = decoder.remaining_handles();
1415            if let Some((inlined, num_bytes, num_handles)) =
1416                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1417            {
1418                let member_inline_size =
1419                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1420                if inlined != (member_inline_size <= 4) {
1421                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1422                }
1423                let inner_offset;
1424                let mut inner_depth = depth.clone();
1425                if inlined {
1426                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1427                    inner_offset = next_offset;
1428                } else {
1429                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1430                    inner_depth.increment()?;
1431                }
1432                let val_ref = self.suspend_duration.get_or_insert_with(|| fidl::new_empty!(i64, D));
1433                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1434                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1435                {
1436                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1437                }
1438                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1439                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1440                }
1441            }
1442
1443            next_offset += envelope_size;
1444            _next_ordinal_to_read += 1;
1445            if next_offset >= end_offset {
1446                return Ok(());
1447            }
1448
1449            // Decode unknown envelopes for gaps in ordinals.
1450            while _next_ordinal_to_read < 3 {
1451                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1452                _next_ordinal_to_read += 1;
1453                next_offset += envelope_size;
1454            }
1455
1456            let next_out_of_line = decoder.next_out_of_line();
1457            let handles_before = decoder.remaining_handles();
1458            if let Some((inlined, num_bytes, num_handles)) =
1459                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1460            {
1461                let member_inline_size =
1462                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1463                if inlined != (member_inline_size <= 4) {
1464                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1465                }
1466                let inner_offset;
1467                let mut inner_depth = depth.clone();
1468                if inlined {
1469                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1470                    inner_offset = next_offset;
1471                } else {
1472                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1473                    inner_depth.increment()?;
1474                }
1475                let val_ref = self.suspend_overhead.get_or_insert_with(|| fidl::new_empty!(i64, D));
1476                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1477                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1478                {
1479                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1480                }
1481                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1482                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1483                }
1484            }
1485
1486            next_offset += envelope_size;
1487
1488            // Decode the remaining unknown envelopes.
1489            while next_offset < end_offset {
1490                _next_ordinal_to_read += 1;
1491                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1492                next_offset += envelope_size;
1493            }
1494
1495            Ok(())
1496        }
1497    }
1498
1499    impl fidl::encoding::ValueTypeMarker for DeviceResumeRequest {
1500        type Borrowed<'a> = &'a Self;
1501        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1502            value
1503        }
1504    }
1505
1506    unsafe impl fidl::encoding::TypeMarker for DeviceResumeRequest {
1507        type Owned = Self;
1508
1509        #[inline(always)]
1510        fn inline_align(_context: fidl::encoding::Context) -> usize {
1511            8
1512        }
1513
1514        #[inline(always)]
1515        fn inline_size(_context: fidl::encoding::Context) -> usize {
1516            16
1517        }
1518    }
1519
1520    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceResumeRequest, D>
1521        for &DeviceResumeRequest
1522    {
1523        #[inline]
1524        unsafe fn encode(
1525            self,
1526            encoder: &mut fidl::encoding::Encoder<'_, D>,
1527            offset: usize,
1528            _depth: fidl::encoding::Depth,
1529        ) -> fidl::Result<()> {
1530            encoder.debug_check_bounds::<DeviceResumeRequest>(offset);
1531            encoder.write_num::<u64>(self.ordinal(), offset);
1532            match self {
1533                DeviceResumeRequest::Result(ref val) => {
1534                    fidl::encoding::encode_in_envelope::<SuspendResult, D>(
1535                        <SuspendResult as fidl::encoding::ValueTypeMarker>::borrow(val),
1536                        encoder,
1537                        offset + 8,
1538                        _depth,
1539                    )
1540                }
1541                DeviceResumeRequest::Error(ref val) => {
1542                    fidl::encoding::encode_in_envelope::<i32, D>(
1543                        <i32 as fidl::encoding::ValueTypeMarker>::borrow(val),
1544                        encoder,
1545                        offset + 8,
1546                        _depth,
1547                    )
1548                }
1549                DeviceResumeRequest::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
1550            }
1551        }
1552    }
1553
1554    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceResumeRequest {
1555        #[inline(always)]
1556        fn new_empty() -> Self {
1557            Self::__SourceBreaking { unknown_ordinal: 0 }
1558        }
1559
1560        #[inline]
1561        unsafe fn decode(
1562            &mut self,
1563            decoder: &mut fidl::encoding::Decoder<'_, D>,
1564            offset: usize,
1565            mut depth: fidl::encoding::Depth,
1566        ) -> fidl::Result<()> {
1567            decoder.debug_check_bounds::<Self>(offset);
1568            #[allow(unused_variables)]
1569            let next_out_of_line = decoder.next_out_of_line();
1570            let handles_before = decoder.remaining_handles();
1571            let (ordinal, inlined, num_bytes, num_handles) =
1572                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
1573
1574            let member_inline_size = match ordinal {
1575                1 => <SuspendResult as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1576                2 => <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1577                0 => return Err(fidl::Error::UnknownUnionTag),
1578                _ => num_bytes as usize,
1579            };
1580
1581            if inlined != (member_inline_size <= 4) {
1582                return Err(fidl::Error::InvalidInlineBitInEnvelope);
1583            }
1584            let _inner_offset;
1585            if inlined {
1586                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
1587                _inner_offset = offset + 8;
1588            } else {
1589                depth.increment()?;
1590                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1591            }
1592            match ordinal {
1593                1 => {
1594                    #[allow(irrefutable_let_patterns)]
1595                    if let DeviceResumeRequest::Result(_) = self {
1596                        // Do nothing, read the value into the object
1597                    } else {
1598                        // Initialize `self` to the right variant
1599                        *self = DeviceResumeRequest::Result(fidl::new_empty!(SuspendResult, D));
1600                    }
1601                    #[allow(irrefutable_let_patterns)]
1602                    if let DeviceResumeRequest::Result(ref mut val) = self {
1603                        fidl::decode!(SuspendResult, D, val, decoder, _inner_offset, depth)?;
1604                    } else {
1605                        unreachable!()
1606                    }
1607                }
1608                2 => {
1609                    #[allow(irrefutable_let_patterns)]
1610                    if let DeviceResumeRequest::Error(_) = self {
1611                        // Do nothing, read the value into the object
1612                    } else {
1613                        // Initialize `self` to the right variant
1614                        *self = DeviceResumeRequest::Error(fidl::new_empty!(i32, D));
1615                    }
1616                    #[allow(irrefutable_let_patterns)]
1617                    if let DeviceResumeRequest::Error(ref mut val) = self {
1618                        fidl::decode!(i32, D, val, decoder, _inner_offset, depth)?;
1619                    } else {
1620                        unreachable!()
1621                    }
1622                }
1623                #[allow(deprecated)]
1624                ordinal => {
1625                    for _ in 0..num_handles {
1626                        decoder.drop_next_handle()?;
1627                    }
1628                    *self = DeviceResumeRequest::__SourceBreaking { unknown_ordinal: ordinal };
1629                }
1630            }
1631            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
1632                return Err(fidl::Error::InvalidNumBytesInEnvelope);
1633            }
1634            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1635                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1636            }
1637            Ok(())
1638        }
1639    }
1640}