fidl_fuchsia_hardware_power/
fidl_fuchsia_hardware_power.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_hardware_power__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct PowerTokenProviderGetTokenResponse {
16    pub handle: fidl::Event,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
20    for PowerTokenProviderGetTokenResponse
21{
22}
23
24#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
25pub struct DeviceMarker;
26
27impl fidl::endpoints::ProtocolMarker for DeviceMarker {
28    type Proxy = DeviceProxy;
29    type RequestStream = DeviceRequestStream;
30    #[cfg(target_os = "fuchsia")]
31    type SynchronousProxy = DeviceSynchronousProxy;
32
33    const DEBUG_NAME: &'static str = "fuchsia.hardware.power.Device";
34}
35impl fidl::endpoints::DiscoverableProtocolMarker for DeviceMarker {}
36pub type DeviceRegisterPowerDomainResult = Result<(), i32>;
37pub type DeviceUnregisterPowerDomainResult = Result<(), i32>;
38pub type DeviceGetSupportedVoltageRangeResult = Result<(u32, u32), i32>;
39pub type DeviceRequestVoltageResult = Result<u32, i32>;
40pub type DeviceGetCurrentVoltageResult = Result<u32, i32>;
41pub type DeviceGetPowerDomainStatusResult = Result<PowerDomainStatus, i32>;
42pub type DeviceWritePmicCtrlRegResult = Result<(), i32>;
43pub type DeviceReadPmicCtrlRegResult = Result<u32, i32>;
44
45pub trait DeviceProxyInterface: Send + Sync {
46    type RegisterPowerDomainResponseFut: std::future::Future<Output = Result<DeviceRegisterPowerDomainResult, fidl::Error>>
47        + Send;
48    fn r#register_power_domain(
49        &self,
50        min_needed_voltage: u32,
51        max_supported_voltage: u32,
52    ) -> Self::RegisterPowerDomainResponseFut;
53    type UnregisterPowerDomainResponseFut: std::future::Future<Output = Result<DeviceUnregisterPowerDomainResult, fidl::Error>>
54        + Send;
55    fn r#unregister_power_domain(&self) -> Self::UnregisterPowerDomainResponseFut;
56    type GetSupportedVoltageRangeResponseFut: std::future::Future<Output = Result<DeviceGetSupportedVoltageRangeResult, fidl::Error>>
57        + Send;
58    fn r#get_supported_voltage_range(&self) -> Self::GetSupportedVoltageRangeResponseFut;
59    type RequestVoltageResponseFut: std::future::Future<Output = Result<DeviceRequestVoltageResult, fidl::Error>>
60        + Send;
61    fn r#request_voltage(&self, voltage: u32) -> Self::RequestVoltageResponseFut;
62    type GetCurrentVoltageResponseFut: std::future::Future<Output = Result<DeviceGetCurrentVoltageResult, fidl::Error>>
63        + Send;
64    fn r#get_current_voltage(&self, index: u32) -> Self::GetCurrentVoltageResponseFut;
65    type GetPowerDomainStatusResponseFut: std::future::Future<Output = Result<DeviceGetPowerDomainStatusResult, fidl::Error>>
66        + Send;
67    fn r#get_power_domain_status(&self) -> Self::GetPowerDomainStatusResponseFut;
68    type WritePmicCtrlRegResponseFut: std::future::Future<Output = Result<DeviceWritePmicCtrlRegResult, fidl::Error>>
69        + Send;
70    fn r#write_pmic_ctrl_reg(&self, reg_addr: u32, value: u32)
71    -> Self::WritePmicCtrlRegResponseFut;
72    type ReadPmicCtrlRegResponseFut: std::future::Future<Output = Result<DeviceReadPmicCtrlRegResult, fidl::Error>>
73        + Send;
74    fn r#read_pmic_ctrl_reg(&self, reg_addr: u32) -> Self::ReadPmicCtrlRegResponseFut;
75}
76#[derive(Debug)]
77#[cfg(target_os = "fuchsia")]
78pub struct DeviceSynchronousProxy {
79    client: fidl::client::sync::Client,
80}
81
82#[cfg(target_os = "fuchsia")]
83impl fidl::endpoints::SynchronousProxy for DeviceSynchronousProxy {
84    type Proxy = DeviceProxy;
85    type Protocol = DeviceMarker;
86
87    fn from_channel(inner: fidl::Channel) -> Self {
88        Self::new(inner)
89    }
90
91    fn into_channel(self) -> fidl::Channel {
92        self.client.into_channel()
93    }
94
95    fn as_channel(&self) -> &fidl::Channel {
96        self.client.as_channel()
97    }
98}
99
100#[cfg(target_os = "fuchsia")]
101impl DeviceSynchronousProxy {
102    pub fn new(channel: fidl::Channel) -> Self {
103        let protocol_name = <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
104        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
105    }
106
107    pub fn into_channel(self) -> fidl::Channel {
108        self.client.into_channel()
109    }
110
111    /// Waits until an event arrives and returns it. It is safe for other
112    /// threads to make concurrent requests while waiting for an event.
113    pub fn wait_for_event(
114        &self,
115        deadline: zx::MonotonicInstant,
116    ) -> Result<DeviceEvent, fidl::Error> {
117        DeviceEvent::decode(self.client.wait_for_event(deadline)?)
118    }
119
120    /// Register the callee for this power domain. The callee will be registered until
121    /// UnregisterPowerDomain is called. Any voltage changes to the power domain will
122    /// be made considering the min_needed_voltage(in uV) and max_supported_voltage(in uV) published here.
123    /// If voltages mentioned are out of supported voltage range of domain(obtained by calling
124    /// GetSupportedVoltageRange), the callee will be registered with the supported voltage range.
125    pub fn r#register_power_domain(
126        &self,
127        mut min_needed_voltage: u32,
128        mut max_supported_voltage: u32,
129        ___deadline: zx::MonotonicInstant,
130    ) -> Result<DeviceRegisterPowerDomainResult, fidl::Error> {
131        let _response = self.client.send_query::<
132            DeviceRegisterPowerDomainRequest,
133            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
134        >(
135            (min_needed_voltage, max_supported_voltage,),
136            0x3dde3e7cb91210dc,
137            fidl::encoding::DynamicFlags::empty(),
138            ___deadline,
139        )?;
140        Ok(_response.map(|x| x))
141    }
142
143    /// Unregister the callee for this power domain. The callee will no longer be considered as
144    /// a dependent of this power domain.
145    pub fn r#unregister_power_domain(
146        &self,
147        ___deadline: zx::MonotonicInstant,
148    ) -> Result<DeviceUnregisterPowerDomainResult, fidl::Error> {
149        let _response = self.client.send_query::<
150            fidl::encoding::EmptyPayload,
151            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
152        >(
153            (),
154            0x6b1b26f908fd8c69,
155            fidl::encoding::DynamicFlags::empty(),
156            ___deadline,
157        )?;
158        Ok(_response.map(|x| x))
159    }
160
161    /// Get Supported Voltage Range. min and max are in micorVolts(uV)
162    pub fn r#get_supported_voltage_range(
163        &self,
164        ___deadline: zx::MonotonicInstant,
165    ) -> Result<DeviceGetSupportedVoltageRangeResult, fidl::Error> {
166        let _response = self.client.send_query::<
167            fidl::encoding::EmptyPayload,
168            fidl::encoding::ResultType<DeviceGetSupportedVoltageRangeResponse, i32>,
169        >(
170            (),
171            0x6d75897fea248df0,
172            fidl::encoding::DynamicFlags::empty(),
173            ___deadline,
174        )?;
175        Ok(_response.map(|x| (x.min, x.max)))
176    }
177
178    /// Request a particular voltage. The actual_voltage is the voltage that the power domain
179    /// is transitioned to after considering supported voltage ranges of all the registered
180    /// dependents. "voltage" should be in uV.
181    pub fn r#request_voltage(
182        &self,
183        mut voltage: u32,
184        ___deadline: zx::MonotonicInstant,
185    ) -> Result<DeviceRequestVoltageResult, fidl::Error> {
186        let _response = self.client.send_query::<
187            DeviceRequestVoltageRequest,
188            fidl::encoding::ResultType<DeviceRequestVoltageResponse, i32>,
189        >(
190            (voltage,),
191            0x23ca354dfe067e9b,
192            fidl::encoding::DynamicFlags::empty(),
193            ___deadline,
194        )?;
195        Ok(_response.map(|x| x.actual_voltage))
196    }
197
198    /// Get current voltage in uV.
199    pub fn r#get_current_voltage(
200        &self,
201        mut index: u32,
202        ___deadline: zx::MonotonicInstant,
203    ) -> Result<DeviceGetCurrentVoltageResult, fidl::Error> {
204        let _response = self.client.send_query::<
205            DeviceGetCurrentVoltageRequest,
206            fidl::encoding::ResultType<DeviceGetCurrentVoltageResponse, i32>,
207        >(
208            (index,),
209            0x6a9f80a0412da961,
210            fidl::encoding::DynamicFlags::empty(),
211            ___deadline,
212        )?;
213        Ok(_response.map(|x| x.current_voltage))
214    }
215
216    /// Get power domain status
217    pub fn r#get_power_domain_status(
218        &self,
219        ___deadline: zx::MonotonicInstant,
220    ) -> Result<DeviceGetPowerDomainStatusResult, fidl::Error> {
221        let _response = self.client.send_query::<
222            fidl::encoding::EmptyPayload,
223            fidl::encoding::ResultType<DeviceGetPowerDomainStatusResponse, i32>,
224        >(
225            (),
226            0x39fe7f1e3e3c74ba,
227            fidl::encoding::DynamicFlags::empty(),
228            ___deadline,
229        )?;
230        Ok(_response.map(|x| x.status))
231    }
232
233    /// Write to ctrl register of PMIC
234    pub fn r#write_pmic_ctrl_reg(
235        &self,
236        mut reg_addr: u32,
237        mut value: u32,
238        ___deadline: zx::MonotonicInstant,
239    ) -> Result<DeviceWritePmicCtrlRegResult, fidl::Error> {
240        let _response = self.client.send_query::<
241            DeviceWritePmicCtrlRegRequest,
242            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
243        >(
244            (reg_addr, value,),
245            0x340a3483d4740299,
246            fidl::encoding::DynamicFlags::empty(),
247            ___deadline,
248        )?;
249        Ok(_response.map(|x| x))
250    }
251
252    /// Read ctrl register of PMIC
253    pub fn r#read_pmic_ctrl_reg(
254        &self,
255        mut reg_addr: u32,
256        ___deadline: zx::MonotonicInstant,
257    ) -> Result<DeviceReadPmicCtrlRegResult, fidl::Error> {
258        let _response = self.client.send_query::<
259            DeviceReadPmicCtrlRegRequest,
260            fidl::encoding::ResultType<DeviceReadPmicCtrlRegResponse, i32>,
261        >(
262            (reg_addr,),
263            0x72eebf304bb82f13,
264            fidl::encoding::DynamicFlags::empty(),
265            ___deadline,
266        )?;
267        Ok(_response.map(|x| x.value))
268    }
269}
270
271#[cfg(target_os = "fuchsia")]
272impl From<DeviceSynchronousProxy> for zx::Handle {
273    fn from(value: DeviceSynchronousProxy) -> Self {
274        value.into_channel().into()
275    }
276}
277
278#[cfg(target_os = "fuchsia")]
279impl From<fidl::Channel> for DeviceSynchronousProxy {
280    fn from(value: fidl::Channel) -> Self {
281        Self::new(value)
282    }
283}
284
285#[cfg(target_os = "fuchsia")]
286impl fidl::endpoints::FromClient for DeviceSynchronousProxy {
287    type Protocol = DeviceMarker;
288
289    fn from_client(value: fidl::endpoints::ClientEnd<DeviceMarker>) -> Self {
290        Self::new(value.into_channel())
291    }
292}
293
294#[derive(Debug, Clone)]
295pub struct DeviceProxy {
296    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
297}
298
299impl fidl::endpoints::Proxy for DeviceProxy {
300    type Protocol = DeviceMarker;
301
302    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
303        Self::new(inner)
304    }
305
306    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
307        self.client.into_channel().map_err(|client| Self { client })
308    }
309
310    fn as_channel(&self) -> &::fidl::AsyncChannel {
311        self.client.as_channel()
312    }
313}
314
315impl DeviceProxy {
316    /// Create a new Proxy for fuchsia.hardware.power/Device.
317    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
318        let protocol_name = <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
319        Self { client: fidl::client::Client::new(channel, protocol_name) }
320    }
321
322    /// Get a Stream of events from the remote end of the protocol.
323    ///
324    /// # Panics
325    ///
326    /// Panics if the event stream was already taken.
327    pub fn take_event_stream(&self) -> DeviceEventStream {
328        DeviceEventStream { event_receiver: self.client.take_event_receiver() }
329    }
330
331    /// Register the callee for this power domain. The callee will be registered until
332    /// UnregisterPowerDomain is called. Any voltage changes to the power domain will
333    /// be made considering the min_needed_voltage(in uV) and max_supported_voltage(in uV) published here.
334    /// If voltages mentioned are out of supported voltage range of domain(obtained by calling
335    /// GetSupportedVoltageRange), the callee will be registered with the supported voltage range.
336    pub fn r#register_power_domain(
337        &self,
338        mut min_needed_voltage: u32,
339        mut max_supported_voltage: u32,
340    ) -> fidl::client::QueryResponseFut<
341        DeviceRegisterPowerDomainResult,
342        fidl::encoding::DefaultFuchsiaResourceDialect,
343    > {
344        DeviceProxyInterface::r#register_power_domain(
345            self,
346            min_needed_voltage,
347            max_supported_voltage,
348        )
349    }
350
351    /// Unregister the callee for this power domain. The callee will no longer be considered as
352    /// a dependent of this power domain.
353    pub fn r#unregister_power_domain(
354        &self,
355    ) -> fidl::client::QueryResponseFut<
356        DeviceUnregisterPowerDomainResult,
357        fidl::encoding::DefaultFuchsiaResourceDialect,
358    > {
359        DeviceProxyInterface::r#unregister_power_domain(self)
360    }
361
362    /// Get Supported Voltage Range. min and max are in micorVolts(uV)
363    pub fn r#get_supported_voltage_range(
364        &self,
365    ) -> fidl::client::QueryResponseFut<
366        DeviceGetSupportedVoltageRangeResult,
367        fidl::encoding::DefaultFuchsiaResourceDialect,
368    > {
369        DeviceProxyInterface::r#get_supported_voltage_range(self)
370    }
371
372    /// Request a particular voltage. The actual_voltage is the voltage that the power domain
373    /// is transitioned to after considering supported voltage ranges of all the registered
374    /// dependents. "voltage" should be in uV.
375    pub fn r#request_voltage(
376        &self,
377        mut voltage: u32,
378    ) -> fidl::client::QueryResponseFut<
379        DeviceRequestVoltageResult,
380        fidl::encoding::DefaultFuchsiaResourceDialect,
381    > {
382        DeviceProxyInterface::r#request_voltage(self, voltage)
383    }
384
385    /// Get current voltage in uV.
386    pub fn r#get_current_voltage(
387        &self,
388        mut index: u32,
389    ) -> fidl::client::QueryResponseFut<
390        DeviceGetCurrentVoltageResult,
391        fidl::encoding::DefaultFuchsiaResourceDialect,
392    > {
393        DeviceProxyInterface::r#get_current_voltage(self, index)
394    }
395
396    /// Get power domain status
397    pub fn r#get_power_domain_status(
398        &self,
399    ) -> fidl::client::QueryResponseFut<
400        DeviceGetPowerDomainStatusResult,
401        fidl::encoding::DefaultFuchsiaResourceDialect,
402    > {
403        DeviceProxyInterface::r#get_power_domain_status(self)
404    }
405
406    /// Write to ctrl register of PMIC
407    pub fn r#write_pmic_ctrl_reg(
408        &self,
409        mut reg_addr: u32,
410        mut value: u32,
411    ) -> fidl::client::QueryResponseFut<
412        DeviceWritePmicCtrlRegResult,
413        fidl::encoding::DefaultFuchsiaResourceDialect,
414    > {
415        DeviceProxyInterface::r#write_pmic_ctrl_reg(self, reg_addr, value)
416    }
417
418    /// Read ctrl register of PMIC
419    pub fn r#read_pmic_ctrl_reg(
420        &self,
421        mut reg_addr: u32,
422    ) -> fidl::client::QueryResponseFut<
423        DeviceReadPmicCtrlRegResult,
424        fidl::encoding::DefaultFuchsiaResourceDialect,
425    > {
426        DeviceProxyInterface::r#read_pmic_ctrl_reg(self, reg_addr)
427    }
428}
429
430impl DeviceProxyInterface for DeviceProxy {
431    type RegisterPowerDomainResponseFut = fidl::client::QueryResponseFut<
432        DeviceRegisterPowerDomainResult,
433        fidl::encoding::DefaultFuchsiaResourceDialect,
434    >;
435    fn r#register_power_domain(
436        &self,
437        mut min_needed_voltage: u32,
438        mut max_supported_voltage: u32,
439    ) -> Self::RegisterPowerDomainResponseFut {
440        fn _decode(
441            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
442        ) -> Result<DeviceRegisterPowerDomainResult, fidl::Error> {
443            let _response = fidl::client::decode_transaction_body::<
444                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
445                fidl::encoding::DefaultFuchsiaResourceDialect,
446                0x3dde3e7cb91210dc,
447            >(_buf?)?;
448            Ok(_response.map(|x| x))
449        }
450        self.client.send_query_and_decode::<
451            DeviceRegisterPowerDomainRequest,
452            DeviceRegisterPowerDomainResult,
453        >(
454            (min_needed_voltage, max_supported_voltage,),
455            0x3dde3e7cb91210dc,
456            fidl::encoding::DynamicFlags::empty(),
457            _decode,
458        )
459    }
460
461    type UnregisterPowerDomainResponseFut = fidl::client::QueryResponseFut<
462        DeviceUnregisterPowerDomainResult,
463        fidl::encoding::DefaultFuchsiaResourceDialect,
464    >;
465    fn r#unregister_power_domain(&self) -> Self::UnregisterPowerDomainResponseFut {
466        fn _decode(
467            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
468        ) -> Result<DeviceUnregisterPowerDomainResult, fidl::Error> {
469            let _response = fidl::client::decode_transaction_body::<
470                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
471                fidl::encoding::DefaultFuchsiaResourceDialect,
472                0x6b1b26f908fd8c69,
473            >(_buf?)?;
474            Ok(_response.map(|x| x))
475        }
476        self.client.send_query_and_decode::<
477            fidl::encoding::EmptyPayload,
478            DeviceUnregisterPowerDomainResult,
479        >(
480            (),
481            0x6b1b26f908fd8c69,
482            fidl::encoding::DynamicFlags::empty(),
483            _decode,
484        )
485    }
486
487    type GetSupportedVoltageRangeResponseFut = fidl::client::QueryResponseFut<
488        DeviceGetSupportedVoltageRangeResult,
489        fidl::encoding::DefaultFuchsiaResourceDialect,
490    >;
491    fn r#get_supported_voltage_range(&self) -> Self::GetSupportedVoltageRangeResponseFut {
492        fn _decode(
493            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
494        ) -> Result<DeviceGetSupportedVoltageRangeResult, fidl::Error> {
495            let _response = fidl::client::decode_transaction_body::<
496                fidl::encoding::ResultType<DeviceGetSupportedVoltageRangeResponse, i32>,
497                fidl::encoding::DefaultFuchsiaResourceDialect,
498                0x6d75897fea248df0,
499            >(_buf?)?;
500            Ok(_response.map(|x| (x.min, x.max)))
501        }
502        self.client.send_query_and_decode::<
503            fidl::encoding::EmptyPayload,
504            DeviceGetSupportedVoltageRangeResult,
505        >(
506            (),
507            0x6d75897fea248df0,
508            fidl::encoding::DynamicFlags::empty(),
509            _decode,
510        )
511    }
512
513    type RequestVoltageResponseFut = fidl::client::QueryResponseFut<
514        DeviceRequestVoltageResult,
515        fidl::encoding::DefaultFuchsiaResourceDialect,
516    >;
517    fn r#request_voltage(&self, mut voltage: u32) -> Self::RequestVoltageResponseFut {
518        fn _decode(
519            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
520        ) -> Result<DeviceRequestVoltageResult, fidl::Error> {
521            let _response = fidl::client::decode_transaction_body::<
522                fidl::encoding::ResultType<DeviceRequestVoltageResponse, i32>,
523                fidl::encoding::DefaultFuchsiaResourceDialect,
524                0x23ca354dfe067e9b,
525            >(_buf?)?;
526            Ok(_response.map(|x| x.actual_voltage))
527        }
528        self.client
529            .send_query_and_decode::<DeviceRequestVoltageRequest, DeviceRequestVoltageResult>(
530                (voltage,),
531                0x23ca354dfe067e9b,
532                fidl::encoding::DynamicFlags::empty(),
533                _decode,
534            )
535    }
536
537    type GetCurrentVoltageResponseFut = fidl::client::QueryResponseFut<
538        DeviceGetCurrentVoltageResult,
539        fidl::encoding::DefaultFuchsiaResourceDialect,
540    >;
541    fn r#get_current_voltage(&self, mut index: u32) -> Self::GetCurrentVoltageResponseFut {
542        fn _decode(
543            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
544        ) -> Result<DeviceGetCurrentVoltageResult, fidl::Error> {
545            let _response = fidl::client::decode_transaction_body::<
546                fidl::encoding::ResultType<DeviceGetCurrentVoltageResponse, i32>,
547                fidl::encoding::DefaultFuchsiaResourceDialect,
548                0x6a9f80a0412da961,
549            >(_buf?)?;
550            Ok(_response.map(|x| x.current_voltage))
551        }
552        self.client
553            .send_query_and_decode::<DeviceGetCurrentVoltageRequest, DeviceGetCurrentVoltageResult>(
554                (index,),
555                0x6a9f80a0412da961,
556                fidl::encoding::DynamicFlags::empty(),
557                _decode,
558            )
559    }
560
561    type GetPowerDomainStatusResponseFut = fidl::client::QueryResponseFut<
562        DeviceGetPowerDomainStatusResult,
563        fidl::encoding::DefaultFuchsiaResourceDialect,
564    >;
565    fn r#get_power_domain_status(&self) -> Self::GetPowerDomainStatusResponseFut {
566        fn _decode(
567            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
568        ) -> Result<DeviceGetPowerDomainStatusResult, fidl::Error> {
569            let _response = fidl::client::decode_transaction_body::<
570                fidl::encoding::ResultType<DeviceGetPowerDomainStatusResponse, i32>,
571                fidl::encoding::DefaultFuchsiaResourceDialect,
572                0x39fe7f1e3e3c74ba,
573            >(_buf?)?;
574            Ok(_response.map(|x| x.status))
575        }
576        self.client.send_query_and_decode::<
577            fidl::encoding::EmptyPayload,
578            DeviceGetPowerDomainStatusResult,
579        >(
580            (),
581            0x39fe7f1e3e3c74ba,
582            fidl::encoding::DynamicFlags::empty(),
583            _decode,
584        )
585    }
586
587    type WritePmicCtrlRegResponseFut = fidl::client::QueryResponseFut<
588        DeviceWritePmicCtrlRegResult,
589        fidl::encoding::DefaultFuchsiaResourceDialect,
590    >;
591    fn r#write_pmic_ctrl_reg(
592        &self,
593        mut reg_addr: u32,
594        mut value: u32,
595    ) -> Self::WritePmicCtrlRegResponseFut {
596        fn _decode(
597            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
598        ) -> Result<DeviceWritePmicCtrlRegResult, fidl::Error> {
599            let _response = fidl::client::decode_transaction_body::<
600                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>,
601                fidl::encoding::DefaultFuchsiaResourceDialect,
602                0x340a3483d4740299,
603            >(_buf?)?;
604            Ok(_response.map(|x| x))
605        }
606        self.client
607            .send_query_and_decode::<DeviceWritePmicCtrlRegRequest, DeviceWritePmicCtrlRegResult>(
608                (reg_addr, value),
609                0x340a3483d4740299,
610                fidl::encoding::DynamicFlags::empty(),
611                _decode,
612            )
613    }
614
615    type ReadPmicCtrlRegResponseFut = fidl::client::QueryResponseFut<
616        DeviceReadPmicCtrlRegResult,
617        fidl::encoding::DefaultFuchsiaResourceDialect,
618    >;
619    fn r#read_pmic_ctrl_reg(&self, mut reg_addr: u32) -> Self::ReadPmicCtrlRegResponseFut {
620        fn _decode(
621            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
622        ) -> Result<DeviceReadPmicCtrlRegResult, fidl::Error> {
623            let _response = fidl::client::decode_transaction_body::<
624                fidl::encoding::ResultType<DeviceReadPmicCtrlRegResponse, i32>,
625                fidl::encoding::DefaultFuchsiaResourceDialect,
626                0x72eebf304bb82f13,
627            >(_buf?)?;
628            Ok(_response.map(|x| x.value))
629        }
630        self.client
631            .send_query_and_decode::<DeviceReadPmicCtrlRegRequest, DeviceReadPmicCtrlRegResult>(
632                (reg_addr,),
633                0x72eebf304bb82f13,
634                fidl::encoding::DynamicFlags::empty(),
635                _decode,
636            )
637    }
638}
639
640pub struct DeviceEventStream {
641    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
642}
643
644impl std::marker::Unpin for DeviceEventStream {}
645
646impl futures::stream::FusedStream for DeviceEventStream {
647    fn is_terminated(&self) -> bool {
648        self.event_receiver.is_terminated()
649    }
650}
651
652impl futures::Stream for DeviceEventStream {
653    type Item = Result<DeviceEvent, fidl::Error>;
654
655    fn poll_next(
656        mut self: std::pin::Pin<&mut Self>,
657        cx: &mut std::task::Context<'_>,
658    ) -> std::task::Poll<Option<Self::Item>> {
659        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
660            &mut self.event_receiver,
661            cx
662        )?) {
663            Some(buf) => std::task::Poll::Ready(Some(DeviceEvent::decode(buf))),
664            None => std::task::Poll::Ready(None),
665        }
666    }
667}
668
669#[derive(Debug)]
670pub enum DeviceEvent {}
671
672impl DeviceEvent {
673    /// Decodes a message buffer as a [`DeviceEvent`].
674    fn decode(
675        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
676    ) -> Result<DeviceEvent, fidl::Error> {
677        let (bytes, _handles) = buf.split_mut();
678        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
679        debug_assert_eq!(tx_header.tx_id, 0);
680        match tx_header.ordinal {
681            _ => Err(fidl::Error::UnknownOrdinal {
682                ordinal: tx_header.ordinal,
683                protocol_name: <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
684            }),
685        }
686    }
687}
688
689/// A Stream of incoming requests for fuchsia.hardware.power/Device.
690pub struct DeviceRequestStream {
691    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
692    is_terminated: bool,
693}
694
695impl std::marker::Unpin for DeviceRequestStream {}
696
697impl futures::stream::FusedStream for DeviceRequestStream {
698    fn is_terminated(&self) -> bool {
699        self.is_terminated
700    }
701}
702
703impl fidl::endpoints::RequestStream for DeviceRequestStream {
704    type Protocol = DeviceMarker;
705    type ControlHandle = DeviceControlHandle;
706
707    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
708        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
709    }
710
711    fn control_handle(&self) -> Self::ControlHandle {
712        DeviceControlHandle { inner: self.inner.clone() }
713    }
714
715    fn into_inner(
716        self,
717    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
718    {
719        (self.inner, self.is_terminated)
720    }
721
722    fn from_inner(
723        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
724        is_terminated: bool,
725    ) -> Self {
726        Self { inner, is_terminated }
727    }
728}
729
730impl futures::Stream for DeviceRequestStream {
731    type Item = Result<DeviceRequest, fidl::Error>;
732
733    fn poll_next(
734        mut self: std::pin::Pin<&mut Self>,
735        cx: &mut std::task::Context<'_>,
736    ) -> std::task::Poll<Option<Self::Item>> {
737        let this = &mut *self;
738        if this.inner.check_shutdown(cx) {
739            this.is_terminated = true;
740            return std::task::Poll::Ready(None);
741        }
742        if this.is_terminated {
743            panic!("polled DeviceRequestStream after completion");
744        }
745        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
746            |bytes, handles| {
747                match this.inner.channel().read_etc(cx, bytes, handles) {
748                    std::task::Poll::Ready(Ok(())) => {}
749                    std::task::Poll::Pending => return std::task::Poll::Pending,
750                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
751                        this.is_terminated = true;
752                        return std::task::Poll::Ready(None);
753                    }
754                    std::task::Poll::Ready(Err(e)) => {
755                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
756                            e.into(),
757                        ))));
758                    }
759                }
760
761                // A message has been received from the channel
762                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
763
764                std::task::Poll::Ready(Some(match header.ordinal {
765                    0x3dde3e7cb91210dc => {
766                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
767                        let mut req = fidl::new_empty!(
768                            DeviceRegisterPowerDomainRequest,
769                            fidl::encoding::DefaultFuchsiaResourceDialect
770                        );
771                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceRegisterPowerDomainRequest>(&header, _body_bytes, handles, &mut req)?;
772                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
773                        Ok(DeviceRequest::RegisterPowerDomain {
774                            min_needed_voltage: req.min_needed_voltage,
775                            max_supported_voltage: req.max_supported_voltage,
776
777                            responder: DeviceRegisterPowerDomainResponder {
778                                control_handle: std::mem::ManuallyDrop::new(control_handle),
779                                tx_id: header.tx_id,
780                            },
781                        })
782                    }
783                    0x6b1b26f908fd8c69 => {
784                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
785                        let mut req = fidl::new_empty!(
786                            fidl::encoding::EmptyPayload,
787                            fidl::encoding::DefaultFuchsiaResourceDialect
788                        );
789                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
790                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
791                        Ok(DeviceRequest::UnregisterPowerDomain {
792                            responder: DeviceUnregisterPowerDomainResponder {
793                                control_handle: std::mem::ManuallyDrop::new(control_handle),
794                                tx_id: header.tx_id,
795                            },
796                        })
797                    }
798                    0x6d75897fea248df0 => {
799                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
800                        let mut req = fidl::new_empty!(
801                            fidl::encoding::EmptyPayload,
802                            fidl::encoding::DefaultFuchsiaResourceDialect
803                        );
804                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
805                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
806                        Ok(DeviceRequest::GetSupportedVoltageRange {
807                            responder: DeviceGetSupportedVoltageRangeResponder {
808                                control_handle: std::mem::ManuallyDrop::new(control_handle),
809                                tx_id: header.tx_id,
810                            },
811                        })
812                    }
813                    0x23ca354dfe067e9b => {
814                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
815                        let mut req = fidl::new_empty!(
816                            DeviceRequestVoltageRequest,
817                            fidl::encoding::DefaultFuchsiaResourceDialect
818                        );
819                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceRequestVoltageRequest>(&header, _body_bytes, handles, &mut req)?;
820                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
821                        Ok(DeviceRequest::RequestVoltage {
822                            voltage: req.voltage,
823
824                            responder: DeviceRequestVoltageResponder {
825                                control_handle: std::mem::ManuallyDrop::new(control_handle),
826                                tx_id: header.tx_id,
827                            },
828                        })
829                    }
830                    0x6a9f80a0412da961 => {
831                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
832                        let mut req = fidl::new_empty!(
833                            DeviceGetCurrentVoltageRequest,
834                            fidl::encoding::DefaultFuchsiaResourceDialect
835                        );
836                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceGetCurrentVoltageRequest>(&header, _body_bytes, handles, &mut req)?;
837                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
838                        Ok(DeviceRequest::GetCurrentVoltage {
839                            index: req.index,
840
841                            responder: DeviceGetCurrentVoltageResponder {
842                                control_handle: std::mem::ManuallyDrop::new(control_handle),
843                                tx_id: header.tx_id,
844                            },
845                        })
846                    }
847                    0x39fe7f1e3e3c74ba => {
848                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
849                        let mut req = fidl::new_empty!(
850                            fidl::encoding::EmptyPayload,
851                            fidl::encoding::DefaultFuchsiaResourceDialect
852                        );
853                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
854                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
855                        Ok(DeviceRequest::GetPowerDomainStatus {
856                            responder: DeviceGetPowerDomainStatusResponder {
857                                control_handle: std::mem::ManuallyDrop::new(control_handle),
858                                tx_id: header.tx_id,
859                            },
860                        })
861                    }
862                    0x340a3483d4740299 => {
863                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
864                        let mut req = fidl::new_empty!(
865                            DeviceWritePmicCtrlRegRequest,
866                            fidl::encoding::DefaultFuchsiaResourceDialect
867                        );
868                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceWritePmicCtrlRegRequest>(&header, _body_bytes, handles, &mut req)?;
869                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
870                        Ok(DeviceRequest::WritePmicCtrlReg {
871                            reg_addr: req.reg_addr,
872                            value: req.value,
873
874                            responder: DeviceWritePmicCtrlRegResponder {
875                                control_handle: std::mem::ManuallyDrop::new(control_handle),
876                                tx_id: header.tx_id,
877                            },
878                        })
879                    }
880                    0x72eebf304bb82f13 => {
881                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
882                        let mut req = fidl::new_empty!(
883                            DeviceReadPmicCtrlRegRequest,
884                            fidl::encoding::DefaultFuchsiaResourceDialect
885                        );
886                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DeviceReadPmicCtrlRegRequest>(&header, _body_bytes, handles, &mut req)?;
887                        let control_handle = DeviceControlHandle { inner: this.inner.clone() };
888                        Ok(DeviceRequest::ReadPmicCtrlReg {
889                            reg_addr: req.reg_addr,
890
891                            responder: DeviceReadPmicCtrlRegResponder {
892                                control_handle: std::mem::ManuallyDrop::new(control_handle),
893                                tx_id: header.tx_id,
894                            },
895                        })
896                    }
897                    _ => Err(fidl::Error::UnknownOrdinal {
898                        ordinal: header.ordinal,
899                        protocol_name:
900                            <DeviceMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
901                    }),
902                }))
903            },
904        )
905    }
906}
907
908#[derive(Debug)]
909pub enum DeviceRequest {
910    /// Register the callee for this power domain. The callee will be registered until
911    /// UnregisterPowerDomain is called. Any voltage changes to the power domain will
912    /// be made considering the min_needed_voltage(in uV) and max_supported_voltage(in uV) published here.
913    /// If voltages mentioned are out of supported voltage range of domain(obtained by calling
914    /// GetSupportedVoltageRange), the callee will be registered with the supported voltage range.
915    RegisterPowerDomain {
916        min_needed_voltage: u32,
917        max_supported_voltage: u32,
918        responder: DeviceRegisterPowerDomainResponder,
919    },
920    /// Unregister the callee for this power domain. The callee will no longer be considered as
921    /// a dependent of this power domain.
922    UnregisterPowerDomain { responder: DeviceUnregisterPowerDomainResponder },
923    /// Get Supported Voltage Range. min and max are in micorVolts(uV)
924    GetSupportedVoltageRange { responder: DeviceGetSupportedVoltageRangeResponder },
925    /// Request a particular voltage. The actual_voltage is the voltage that the power domain
926    /// is transitioned to after considering supported voltage ranges of all the registered
927    /// dependents. "voltage" should be in uV.
928    RequestVoltage { voltage: u32, responder: DeviceRequestVoltageResponder },
929    /// Get current voltage in uV.
930    GetCurrentVoltage { index: u32, responder: DeviceGetCurrentVoltageResponder },
931    /// Get power domain status
932    GetPowerDomainStatus { responder: DeviceGetPowerDomainStatusResponder },
933    /// Write to ctrl register of PMIC
934    WritePmicCtrlReg { reg_addr: u32, value: u32, responder: DeviceWritePmicCtrlRegResponder },
935    /// Read ctrl register of PMIC
936    ReadPmicCtrlReg { reg_addr: u32, responder: DeviceReadPmicCtrlRegResponder },
937}
938
939impl DeviceRequest {
940    #[allow(irrefutable_let_patterns)]
941    pub fn into_register_power_domain(
942        self,
943    ) -> Option<(u32, u32, DeviceRegisterPowerDomainResponder)> {
944        if let DeviceRequest::RegisterPowerDomain {
945            min_needed_voltage,
946            max_supported_voltage,
947            responder,
948        } = self
949        {
950            Some((min_needed_voltage, max_supported_voltage, responder))
951        } else {
952            None
953        }
954    }
955
956    #[allow(irrefutable_let_patterns)]
957    pub fn into_unregister_power_domain(self) -> Option<(DeviceUnregisterPowerDomainResponder)> {
958        if let DeviceRequest::UnregisterPowerDomain { responder } = self {
959            Some((responder))
960        } else {
961            None
962        }
963    }
964
965    #[allow(irrefutable_let_patterns)]
966    pub fn into_get_supported_voltage_range(
967        self,
968    ) -> Option<(DeviceGetSupportedVoltageRangeResponder)> {
969        if let DeviceRequest::GetSupportedVoltageRange { responder } = self {
970            Some((responder))
971        } else {
972            None
973        }
974    }
975
976    #[allow(irrefutable_let_patterns)]
977    pub fn into_request_voltage(self) -> Option<(u32, DeviceRequestVoltageResponder)> {
978        if let DeviceRequest::RequestVoltage { voltage, responder } = self {
979            Some((voltage, responder))
980        } else {
981            None
982        }
983    }
984
985    #[allow(irrefutable_let_patterns)]
986    pub fn into_get_current_voltage(self) -> Option<(u32, DeviceGetCurrentVoltageResponder)> {
987        if let DeviceRequest::GetCurrentVoltage { index, responder } = self {
988            Some((index, responder))
989        } else {
990            None
991        }
992    }
993
994    #[allow(irrefutable_let_patterns)]
995    pub fn into_get_power_domain_status(self) -> Option<(DeviceGetPowerDomainStatusResponder)> {
996        if let DeviceRequest::GetPowerDomainStatus { responder } = self {
997            Some((responder))
998        } else {
999            None
1000        }
1001    }
1002
1003    #[allow(irrefutable_let_patterns)]
1004    pub fn into_write_pmic_ctrl_reg(self) -> Option<(u32, u32, DeviceWritePmicCtrlRegResponder)> {
1005        if let DeviceRequest::WritePmicCtrlReg { reg_addr, value, responder } = self {
1006            Some((reg_addr, value, responder))
1007        } else {
1008            None
1009        }
1010    }
1011
1012    #[allow(irrefutable_let_patterns)]
1013    pub fn into_read_pmic_ctrl_reg(self) -> Option<(u32, DeviceReadPmicCtrlRegResponder)> {
1014        if let DeviceRequest::ReadPmicCtrlReg { reg_addr, responder } = self {
1015            Some((reg_addr, responder))
1016        } else {
1017            None
1018        }
1019    }
1020
1021    /// Name of the method defined in FIDL
1022    pub fn method_name(&self) -> &'static str {
1023        match *self {
1024            DeviceRequest::RegisterPowerDomain { .. } => "register_power_domain",
1025            DeviceRequest::UnregisterPowerDomain { .. } => "unregister_power_domain",
1026            DeviceRequest::GetSupportedVoltageRange { .. } => "get_supported_voltage_range",
1027            DeviceRequest::RequestVoltage { .. } => "request_voltage",
1028            DeviceRequest::GetCurrentVoltage { .. } => "get_current_voltage",
1029            DeviceRequest::GetPowerDomainStatus { .. } => "get_power_domain_status",
1030            DeviceRequest::WritePmicCtrlReg { .. } => "write_pmic_ctrl_reg",
1031            DeviceRequest::ReadPmicCtrlReg { .. } => "read_pmic_ctrl_reg",
1032        }
1033    }
1034}
1035
1036#[derive(Debug, Clone)]
1037pub struct DeviceControlHandle {
1038    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1039}
1040
1041impl fidl::endpoints::ControlHandle for DeviceControlHandle {
1042    fn shutdown(&self) {
1043        self.inner.shutdown()
1044    }
1045    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1046        self.inner.shutdown_with_epitaph(status)
1047    }
1048
1049    fn is_closed(&self) -> bool {
1050        self.inner.channel().is_closed()
1051    }
1052    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1053        self.inner.channel().on_closed()
1054    }
1055
1056    #[cfg(target_os = "fuchsia")]
1057    fn signal_peer(
1058        &self,
1059        clear_mask: zx::Signals,
1060        set_mask: zx::Signals,
1061    ) -> Result<(), zx_status::Status> {
1062        use fidl::Peered;
1063        self.inner.channel().signal_peer(clear_mask, set_mask)
1064    }
1065}
1066
1067impl DeviceControlHandle {}
1068
1069#[must_use = "FIDL methods require a response to be sent"]
1070#[derive(Debug)]
1071pub struct DeviceRegisterPowerDomainResponder {
1072    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1073    tx_id: u32,
1074}
1075
1076/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1077/// if the responder is dropped without sending a response, so that the client
1078/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1079impl std::ops::Drop for DeviceRegisterPowerDomainResponder {
1080    fn drop(&mut self) {
1081        self.control_handle.shutdown();
1082        // Safety: drops once, never accessed again
1083        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1084    }
1085}
1086
1087impl fidl::endpoints::Responder for DeviceRegisterPowerDomainResponder {
1088    type ControlHandle = DeviceControlHandle;
1089
1090    fn control_handle(&self) -> &DeviceControlHandle {
1091        &self.control_handle
1092    }
1093
1094    fn drop_without_shutdown(mut self) {
1095        // Safety: drops once, never accessed again due to mem::forget
1096        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1097        // Prevent Drop from running (which would shut down the channel)
1098        std::mem::forget(self);
1099    }
1100}
1101
1102impl DeviceRegisterPowerDomainResponder {
1103    /// Sends a response to the FIDL transaction.
1104    ///
1105    /// Sets the channel to shutdown if an error occurs.
1106    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1107        let _result = self.send_raw(result);
1108        if _result.is_err() {
1109            self.control_handle.shutdown();
1110        }
1111        self.drop_without_shutdown();
1112        _result
1113    }
1114
1115    /// Similar to "send" but does not shutdown the channel if an error occurs.
1116    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1117        let _result = self.send_raw(result);
1118        self.drop_without_shutdown();
1119        _result
1120    }
1121
1122    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1123        self.control_handle
1124            .inner
1125            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
1126                result,
1127                self.tx_id,
1128                0x3dde3e7cb91210dc,
1129                fidl::encoding::DynamicFlags::empty(),
1130            )
1131    }
1132}
1133
1134#[must_use = "FIDL methods require a response to be sent"]
1135#[derive(Debug)]
1136pub struct DeviceUnregisterPowerDomainResponder {
1137    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1138    tx_id: u32,
1139}
1140
1141/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1142/// if the responder is dropped without sending a response, so that the client
1143/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1144impl std::ops::Drop for DeviceUnregisterPowerDomainResponder {
1145    fn drop(&mut self) {
1146        self.control_handle.shutdown();
1147        // Safety: drops once, never accessed again
1148        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1149    }
1150}
1151
1152impl fidl::endpoints::Responder for DeviceUnregisterPowerDomainResponder {
1153    type ControlHandle = DeviceControlHandle;
1154
1155    fn control_handle(&self) -> &DeviceControlHandle {
1156        &self.control_handle
1157    }
1158
1159    fn drop_without_shutdown(mut self) {
1160        // Safety: drops once, never accessed again due to mem::forget
1161        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1162        // Prevent Drop from running (which would shut down the channel)
1163        std::mem::forget(self);
1164    }
1165}
1166
1167impl DeviceUnregisterPowerDomainResponder {
1168    /// Sends a response to the FIDL transaction.
1169    ///
1170    /// Sets the channel to shutdown if an error occurs.
1171    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1172        let _result = self.send_raw(result);
1173        if _result.is_err() {
1174            self.control_handle.shutdown();
1175        }
1176        self.drop_without_shutdown();
1177        _result
1178    }
1179
1180    /// Similar to "send" but does not shutdown the channel if an error occurs.
1181    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1182        let _result = self.send_raw(result);
1183        self.drop_without_shutdown();
1184        _result
1185    }
1186
1187    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1188        self.control_handle
1189            .inner
1190            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
1191                result,
1192                self.tx_id,
1193                0x6b1b26f908fd8c69,
1194                fidl::encoding::DynamicFlags::empty(),
1195            )
1196    }
1197}
1198
1199#[must_use = "FIDL methods require a response to be sent"]
1200#[derive(Debug)]
1201pub struct DeviceGetSupportedVoltageRangeResponder {
1202    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1203    tx_id: u32,
1204}
1205
1206/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1207/// if the responder is dropped without sending a response, so that the client
1208/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1209impl std::ops::Drop for DeviceGetSupportedVoltageRangeResponder {
1210    fn drop(&mut self) {
1211        self.control_handle.shutdown();
1212        // Safety: drops once, never accessed again
1213        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1214    }
1215}
1216
1217impl fidl::endpoints::Responder for DeviceGetSupportedVoltageRangeResponder {
1218    type ControlHandle = DeviceControlHandle;
1219
1220    fn control_handle(&self) -> &DeviceControlHandle {
1221        &self.control_handle
1222    }
1223
1224    fn drop_without_shutdown(mut self) {
1225        // Safety: drops once, never accessed again due to mem::forget
1226        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1227        // Prevent Drop from running (which would shut down the channel)
1228        std::mem::forget(self);
1229    }
1230}
1231
1232impl DeviceGetSupportedVoltageRangeResponder {
1233    /// Sends a response to the FIDL transaction.
1234    ///
1235    /// Sets the channel to shutdown if an error occurs.
1236    pub fn send(self, mut result: Result<(u32, u32), i32>) -> Result<(), fidl::Error> {
1237        let _result = self.send_raw(result);
1238        if _result.is_err() {
1239            self.control_handle.shutdown();
1240        }
1241        self.drop_without_shutdown();
1242        _result
1243    }
1244
1245    /// Similar to "send" but does not shutdown the channel if an error occurs.
1246    pub fn send_no_shutdown_on_err(
1247        self,
1248        mut result: Result<(u32, u32), i32>,
1249    ) -> Result<(), fidl::Error> {
1250        let _result = self.send_raw(result);
1251        self.drop_without_shutdown();
1252        _result
1253    }
1254
1255    fn send_raw(&self, mut result: Result<(u32, u32), i32>) -> Result<(), fidl::Error> {
1256        self.control_handle.inner.send::<fidl::encoding::ResultType<
1257            DeviceGetSupportedVoltageRangeResponse,
1258            i32,
1259        >>(
1260            result,
1261            self.tx_id,
1262            0x6d75897fea248df0,
1263            fidl::encoding::DynamicFlags::empty(),
1264        )
1265    }
1266}
1267
1268#[must_use = "FIDL methods require a response to be sent"]
1269#[derive(Debug)]
1270pub struct DeviceRequestVoltageResponder {
1271    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1272    tx_id: u32,
1273}
1274
1275/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1276/// if the responder is dropped without sending a response, so that the client
1277/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1278impl std::ops::Drop for DeviceRequestVoltageResponder {
1279    fn drop(&mut self) {
1280        self.control_handle.shutdown();
1281        // Safety: drops once, never accessed again
1282        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1283    }
1284}
1285
1286impl fidl::endpoints::Responder for DeviceRequestVoltageResponder {
1287    type ControlHandle = DeviceControlHandle;
1288
1289    fn control_handle(&self) -> &DeviceControlHandle {
1290        &self.control_handle
1291    }
1292
1293    fn drop_without_shutdown(mut self) {
1294        // Safety: drops once, never accessed again due to mem::forget
1295        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1296        // Prevent Drop from running (which would shut down the channel)
1297        std::mem::forget(self);
1298    }
1299}
1300
1301impl DeviceRequestVoltageResponder {
1302    /// Sends a response to the FIDL transaction.
1303    ///
1304    /// Sets the channel to shutdown if an error occurs.
1305    pub fn send(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1306        let _result = self.send_raw(result);
1307        if _result.is_err() {
1308            self.control_handle.shutdown();
1309        }
1310        self.drop_without_shutdown();
1311        _result
1312    }
1313
1314    /// Similar to "send" but does not shutdown the channel if an error occurs.
1315    pub fn send_no_shutdown_on_err(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1316        let _result = self.send_raw(result);
1317        self.drop_without_shutdown();
1318        _result
1319    }
1320
1321    fn send_raw(&self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1322        self.control_handle
1323            .inner
1324            .send::<fidl::encoding::ResultType<DeviceRequestVoltageResponse, i32>>(
1325                result.map(|actual_voltage| (actual_voltage,)),
1326                self.tx_id,
1327                0x23ca354dfe067e9b,
1328                fidl::encoding::DynamicFlags::empty(),
1329            )
1330    }
1331}
1332
1333#[must_use = "FIDL methods require a response to be sent"]
1334#[derive(Debug)]
1335pub struct DeviceGetCurrentVoltageResponder {
1336    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1337    tx_id: u32,
1338}
1339
1340/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1341/// if the responder is dropped without sending a response, so that the client
1342/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1343impl std::ops::Drop for DeviceGetCurrentVoltageResponder {
1344    fn drop(&mut self) {
1345        self.control_handle.shutdown();
1346        // Safety: drops once, never accessed again
1347        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1348    }
1349}
1350
1351impl fidl::endpoints::Responder for DeviceGetCurrentVoltageResponder {
1352    type ControlHandle = DeviceControlHandle;
1353
1354    fn control_handle(&self) -> &DeviceControlHandle {
1355        &self.control_handle
1356    }
1357
1358    fn drop_without_shutdown(mut self) {
1359        // Safety: drops once, never accessed again due to mem::forget
1360        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1361        // Prevent Drop from running (which would shut down the channel)
1362        std::mem::forget(self);
1363    }
1364}
1365
1366impl DeviceGetCurrentVoltageResponder {
1367    /// Sends a response to the FIDL transaction.
1368    ///
1369    /// Sets the channel to shutdown if an error occurs.
1370    pub fn send(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1371        let _result = self.send_raw(result);
1372        if _result.is_err() {
1373            self.control_handle.shutdown();
1374        }
1375        self.drop_without_shutdown();
1376        _result
1377    }
1378
1379    /// Similar to "send" but does not shutdown the channel if an error occurs.
1380    pub fn send_no_shutdown_on_err(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1381        let _result = self.send_raw(result);
1382        self.drop_without_shutdown();
1383        _result
1384    }
1385
1386    fn send_raw(&self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1387        self.control_handle
1388            .inner
1389            .send::<fidl::encoding::ResultType<DeviceGetCurrentVoltageResponse, i32>>(
1390                result.map(|current_voltage| (current_voltage,)),
1391                self.tx_id,
1392                0x6a9f80a0412da961,
1393                fidl::encoding::DynamicFlags::empty(),
1394            )
1395    }
1396}
1397
1398#[must_use = "FIDL methods require a response to be sent"]
1399#[derive(Debug)]
1400pub struct DeviceGetPowerDomainStatusResponder {
1401    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1402    tx_id: u32,
1403}
1404
1405/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1406/// if the responder is dropped without sending a response, so that the client
1407/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1408impl std::ops::Drop for DeviceGetPowerDomainStatusResponder {
1409    fn drop(&mut self) {
1410        self.control_handle.shutdown();
1411        // Safety: drops once, never accessed again
1412        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1413    }
1414}
1415
1416impl fidl::endpoints::Responder for DeviceGetPowerDomainStatusResponder {
1417    type ControlHandle = DeviceControlHandle;
1418
1419    fn control_handle(&self) -> &DeviceControlHandle {
1420        &self.control_handle
1421    }
1422
1423    fn drop_without_shutdown(mut self) {
1424        // Safety: drops once, never accessed again due to mem::forget
1425        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1426        // Prevent Drop from running (which would shut down the channel)
1427        std::mem::forget(self);
1428    }
1429}
1430
1431impl DeviceGetPowerDomainStatusResponder {
1432    /// Sends a response to the FIDL transaction.
1433    ///
1434    /// Sets the channel to shutdown if an error occurs.
1435    pub fn send(self, mut result: Result<PowerDomainStatus, i32>) -> Result<(), fidl::Error> {
1436        let _result = self.send_raw(result);
1437        if _result.is_err() {
1438            self.control_handle.shutdown();
1439        }
1440        self.drop_without_shutdown();
1441        _result
1442    }
1443
1444    /// Similar to "send" but does not shutdown the channel if an error occurs.
1445    pub fn send_no_shutdown_on_err(
1446        self,
1447        mut result: Result<PowerDomainStatus, i32>,
1448    ) -> Result<(), fidl::Error> {
1449        let _result = self.send_raw(result);
1450        self.drop_without_shutdown();
1451        _result
1452    }
1453
1454    fn send_raw(&self, mut result: Result<PowerDomainStatus, i32>) -> Result<(), fidl::Error> {
1455        self.control_handle
1456            .inner
1457            .send::<fidl::encoding::ResultType<DeviceGetPowerDomainStatusResponse, i32>>(
1458                result.map(|status| (status,)),
1459                self.tx_id,
1460                0x39fe7f1e3e3c74ba,
1461                fidl::encoding::DynamicFlags::empty(),
1462            )
1463    }
1464}
1465
1466#[must_use = "FIDL methods require a response to be sent"]
1467#[derive(Debug)]
1468pub struct DeviceWritePmicCtrlRegResponder {
1469    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1470    tx_id: u32,
1471}
1472
1473/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1474/// if the responder is dropped without sending a response, so that the client
1475/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1476impl std::ops::Drop for DeviceWritePmicCtrlRegResponder {
1477    fn drop(&mut self) {
1478        self.control_handle.shutdown();
1479        // Safety: drops once, never accessed again
1480        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1481    }
1482}
1483
1484impl fidl::endpoints::Responder for DeviceWritePmicCtrlRegResponder {
1485    type ControlHandle = DeviceControlHandle;
1486
1487    fn control_handle(&self) -> &DeviceControlHandle {
1488        &self.control_handle
1489    }
1490
1491    fn drop_without_shutdown(mut self) {
1492        // Safety: drops once, never accessed again due to mem::forget
1493        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1494        // Prevent Drop from running (which would shut down the channel)
1495        std::mem::forget(self);
1496    }
1497}
1498
1499impl DeviceWritePmicCtrlRegResponder {
1500    /// Sends a response to the FIDL transaction.
1501    ///
1502    /// Sets the channel to shutdown if an error occurs.
1503    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1504        let _result = self.send_raw(result);
1505        if _result.is_err() {
1506            self.control_handle.shutdown();
1507        }
1508        self.drop_without_shutdown();
1509        _result
1510    }
1511
1512    /// Similar to "send" but does not shutdown the channel if an error occurs.
1513    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1514        let _result = self.send_raw(result);
1515        self.drop_without_shutdown();
1516        _result
1517    }
1518
1519    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1520        self.control_handle
1521            .inner
1522            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
1523                result,
1524                self.tx_id,
1525                0x340a3483d4740299,
1526                fidl::encoding::DynamicFlags::empty(),
1527            )
1528    }
1529}
1530
1531#[must_use = "FIDL methods require a response to be sent"]
1532#[derive(Debug)]
1533pub struct DeviceReadPmicCtrlRegResponder {
1534    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1535    tx_id: u32,
1536}
1537
1538/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1539/// if the responder is dropped without sending a response, so that the client
1540/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1541impl std::ops::Drop for DeviceReadPmicCtrlRegResponder {
1542    fn drop(&mut self) {
1543        self.control_handle.shutdown();
1544        // Safety: drops once, never accessed again
1545        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1546    }
1547}
1548
1549impl fidl::endpoints::Responder for DeviceReadPmicCtrlRegResponder {
1550    type ControlHandle = DeviceControlHandle;
1551
1552    fn control_handle(&self) -> &DeviceControlHandle {
1553        &self.control_handle
1554    }
1555
1556    fn drop_without_shutdown(mut self) {
1557        // Safety: drops once, never accessed again due to mem::forget
1558        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1559        // Prevent Drop from running (which would shut down the channel)
1560        std::mem::forget(self);
1561    }
1562}
1563
1564impl DeviceReadPmicCtrlRegResponder {
1565    /// Sends a response to the FIDL transaction.
1566    ///
1567    /// Sets the channel to shutdown if an error occurs.
1568    pub fn send(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1569        let _result = self.send_raw(result);
1570        if _result.is_err() {
1571            self.control_handle.shutdown();
1572        }
1573        self.drop_without_shutdown();
1574        _result
1575    }
1576
1577    /// Similar to "send" but does not shutdown the channel if an error occurs.
1578    pub fn send_no_shutdown_on_err(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1579        let _result = self.send_raw(result);
1580        self.drop_without_shutdown();
1581        _result
1582    }
1583
1584    fn send_raw(&self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1585        self.control_handle
1586            .inner
1587            .send::<fidl::encoding::ResultType<DeviceReadPmicCtrlRegResponse, i32>>(
1588                result.map(|value| (value,)),
1589                self.tx_id,
1590                0x72eebf304bb82f13,
1591                fidl::encoding::DynamicFlags::empty(),
1592            )
1593    }
1594}
1595
1596#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1597pub struct PowerTokenProviderMarker;
1598
1599impl fidl::endpoints::ProtocolMarker for PowerTokenProviderMarker {
1600    type Proxy = PowerTokenProviderProxy;
1601    type RequestStream = PowerTokenProviderRequestStream;
1602    #[cfg(target_os = "fuchsia")]
1603    type SynchronousProxy = PowerTokenProviderSynchronousProxy;
1604
1605    const DEBUG_NAME: &'static str = "fuchsia.hardware.power.PowerTokenProvider";
1606}
1607impl fidl::endpoints::DiscoverableProtocolMarker for PowerTokenProviderMarker {}
1608pub type PowerTokenProviderGetTokenResult = Result<fidl::Event, i32>;
1609
1610pub trait PowerTokenProviderProxyInterface: Send + Sync {
1611    type GetTokenResponseFut: std::future::Future<Output = Result<PowerTokenProviderGetTokenResult, fidl::Error>>
1612        + Send;
1613    fn r#get_token(&self) -> Self::GetTokenResponseFut;
1614}
1615#[derive(Debug)]
1616#[cfg(target_os = "fuchsia")]
1617pub struct PowerTokenProviderSynchronousProxy {
1618    client: fidl::client::sync::Client,
1619}
1620
1621#[cfg(target_os = "fuchsia")]
1622impl fidl::endpoints::SynchronousProxy for PowerTokenProviderSynchronousProxy {
1623    type Proxy = PowerTokenProviderProxy;
1624    type Protocol = PowerTokenProviderMarker;
1625
1626    fn from_channel(inner: fidl::Channel) -> Self {
1627        Self::new(inner)
1628    }
1629
1630    fn into_channel(self) -> fidl::Channel {
1631        self.client.into_channel()
1632    }
1633
1634    fn as_channel(&self) -> &fidl::Channel {
1635        self.client.as_channel()
1636    }
1637}
1638
1639#[cfg(target_os = "fuchsia")]
1640impl PowerTokenProviderSynchronousProxy {
1641    pub fn new(channel: fidl::Channel) -> Self {
1642        let protocol_name =
1643            <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1644        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1645    }
1646
1647    pub fn into_channel(self) -> fidl::Channel {
1648        self.client.into_channel()
1649    }
1650
1651    /// Waits until an event arrives and returns it. It is safe for other
1652    /// threads to make concurrent requests while waiting for an event.
1653    pub fn wait_for_event(
1654        &self,
1655        deadline: zx::MonotonicInstant,
1656    ) -> Result<PowerTokenProviderEvent, fidl::Error> {
1657        PowerTokenProviderEvent::decode(self.client.wait_for_event(deadline)?)
1658    }
1659
1660    /// Returns a token which can be used with `fuchsia.power.broker` APIs to
1661    /// create a relationship between this driver's power element(s) and the
1662    /// power element this token is associated with.
1663    pub fn r#get_token(
1664        &self,
1665        ___deadline: zx::MonotonicInstant,
1666    ) -> Result<PowerTokenProviderGetTokenResult, fidl::Error> {
1667        let _response = self.client.send_query::<
1668            fidl::encoding::EmptyPayload,
1669            fidl::encoding::FlexibleResultType<PowerTokenProviderGetTokenResponse, i32>,
1670        >(
1671            (),
1672            0x289cd59b7d9f90ca,
1673            fidl::encoding::DynamicFlags::FLEXIBLE,
1674            ___deadline,
1675        )?
1676        .into_result::<PowerTokenProviderMarker>("get_token")?;
1677        Ok(_response.map(|x| x.handle))
1678    }
1679}
1680
1681#[cfg(target_os = "fuchsia")]
1682impl From<PowerTokenProviderSynchronousProxy> for zx::Handle {
1683    fn from(value: PowerTokenProviderSynchronousProxy) -> Self {
1684        value.into_channel().into()
1685    }
1686}
1687
1688#[cfg(target_os = "fuchsia")]
1689impl From<fidl::Channel> for PowerTokenProviderSynchronousProxy {
1690    fn from(value: fidl::Channel) -> Self {
1691        Self::new(value)
1692    }
1693}
1694
1695#[cfg(target_os = "fuchsia")]
1696impl fidl::endpoints::FromClient for PowerTokenProviderSynchronousProxy {
1697    type Protocol = PowerTokenProviderMarker;
1698
1699    fn from_client(value: fidl::endpoints::ClientEnd<PowerTokenProviderMarker>) -> Self {
1700        Self::new(value.into_channel())
1701    }
1702}
1703
1704#[derive(Debug, Clone)]
1705pub struct PowerTokenProviderProxy {
1706    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1707}
1708
1709impl fidl::endpoints::Proxy for PowerTokenProviderProxy {
1710    type Protocol = PowerTokenProviderMarker;
1711
1712    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1713        Self::new(inner)
1714    }
1715
1716    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1717        self.client.into_channel().map_err(|client| Self { client })
1718    }
1719
1720    fn as_channel(&self) -> &::fidl::AsyncChannel {
1721        self.client.as_channel()
1722    }
1723}
1724
1725impl PowerTokenProviderProxy {
1726    /// Create a new Proxy for fuchsia.hardware.power/PowerTokenProvider.
1727    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1728        let protocol_name =
1729            <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1730        Self { client: fidl::client::Client::new(channel, protocol_name) }
1731    }
1732
1733    /// Get a Stream of events from the remote end of the protocol.
1734    ///
1735    /// # Panics
1736    ///
1737    /// Panics if the event stream was already taken.
1738    pub fn take_event_stream(&self) -> PowerTokenProviderEventStream {
1739        PowerTokenProviderEventStream { event_receiver: self.client.take_event_receiver() }
1740    }
1741
1742    /// Returns a token which can be used with `fuchsia.power.broker` APIs to
1743    /// create a relationship between this driver's power element(s) and the
1744    /// power element this token is associated with.
1745    pub fn r#get_token(
1746        &self,
1747    ) -> fidl::client::QueryResponseFut<
1748        PowerTokenProviderGetTokenResult,
1749        fidl::encoding::DefaultFuchsiaResourceDialect,
1750    > {
1751        PowerTokenProviderProxyInterface::r#get_token(self)
1752    }
1753}
1754
1755impl PowerTokenProviderProxyInterface for PowerTokenProviderProxy {
1756    type GetTokenResponseFut = fidl::client::QueryResponseFut<
1757        PowerTokenProviderGetTokenResult,
1758        fidl::encoding::DefaultFuchsiaResourceDialect,
1759    >;
1760    fn r#get_token(&self) -> Self::GetTokenResponseFut {
1761        fn _decode(
1762            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1763        ) -> Result<PowerTokenProviderGetTokenResult, fidl::Error> {
1764            let _response = fidl::client::decode_transaction_body::<
1765                fidl::encoding::FlexibleResultType<PowerTokenProviderGetTokenResponse, i32>,
1766                fidl::encoding::DefaultFuchsiaResourceDialect,
1767                0x289cd59b7d9f90ca,
1768            >(_buf?)?
1769            .into_result::<PowerTokenProviderMarker>("get_token")?;
1770            Ok(_response.map(|x| x.handle))
1771        }
1772        self.client.send_query_and_decode::<
1773            fidl::encoding::EmptyPayload,
1774            PowerTokenProviderGetTokenResult,
1775        >(
1776            (),
1777            0x289cd59b7d9f90ca,
1778            fidl::encoding::DynamicFlags::FLEXIBLE,
1779            _decode,
1780        )
1781    }
1782}
1783
1784pub struct PowerTokenProviderEventStream {
1785    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1786}
1787
1788impl std::marker::Unpin for PowerTokenProviderEventStream {}
1789
1790impl futures::stream::FusedStream for PowerTokenProviderEventStream {
1791    fn is_terminated(&self) -> bool {
1792        self.event_receiver.is_terminated()
1793    }
1794}
1795
1796impl futures::Stream for PowerTokenProviderEventStream {
1797    type Item = Result<PowerTokenProviderEvent, fidl::Error>;
1798
1799    fn poll_next(
1800        mut self: std::pin::Pin<&mut Self>,
1801        cx: &mut std::task::Context<'_>,
1802    ) -> std::task::Poll<Option<Self::Item>> {
1803        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1804            &mut self.event_receiver,
1805            cx
1806        )?) {
1807            Some(buf) => std::task::Poll::Ready(Some(PowerTokenProviderEvent::decode(buf))),
1808            None => std::task::Poll::Ready(None),
1809        }
1810    }
1811}
1812
1813#[derive(Debug)]
1814pub enum PowerTokenProviderEvent {
1815    #[non_exhaustive]
1816    _UnknownEvent {
1817        /// Ordinal of the event that was sent.
1818        ordinal: u64,
1819    },
1820}
1821
1822impl PowerTokenProviderEvent {
1823    /// Decodes a message buffer as a [`PowerTokenProviderEvent`].
1824    fn decode(
1825        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1826    ) -> Result<PowerTokenProviderEvent, fidl::Error> {
1827        let (bytes, _handles) = buf.split_mut();
1828        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1829        debug_assert_eq!(tx_header.tx_id, 0);
1830        match tx_header.ordinal {
1831            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1832                Ok(PowerTokenProviderEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1833            }
1834            _ => Err(fidl::Error::UnknownOrdinal {
1835                ordinal: tx_header.ordinal,
1836                protocol_name:
1837                    <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1838            }),
1839        }
1840    }
1841}
1842
1843/// A Stream of incoming requests for fuchsia.hardware.power/PowerTokenProvider.
1844pub struct PowerTokenProviderRequestStream {
1845    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1846    is_terminated: bool,
1847}
1848
1849impl std::marker::Unpin for PowerTokenProviderRequestStream {}
1850
1851impl futures::stream::FusedStream for PowerTokenProviderRequestStream {
1852    fn is_terminated(&self) -> bool {
1853        self.is_terminated
1854    }
1855}
1856
1857impl fidl::endpoints::RequestStream for PowerTokenProviderRequestStream {
1858    type Protocol = PowerTokenProviderMarker;
1859    type ControlHandle = PowerTokenProviderControlHandle;
1860
1861    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1862        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1863    }
1864
1865    fn control_handle(&self) -> Self::ControlHandle {
1866        PowerTokenProviderControlHandle { inner: self.inner.clone() }
1867    }
1868
1869    fn into_inner(
1870        self,
1871    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1872    {
1873        (self.inner, self.is_terminated)
1874    }
1875
1876    fn from_inner(
1877        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1878        is_terminated: bool,
1879    ) -> Self {
1880        Self { inner, is_terminated }
1881    }
1882}
1883
1884impl futures::Stream for PowerTokenProviderRequestStream {
1885    type Item = Result<PowerTokenProviderRequest, fidl::Error>;
1886
1887    fn poll_next(
1888        mut self: std::pin::Pin<&mut Self>,
1889        cx: &mut std::task::Context<'_>,
1890    ) -> std::task::Poll<Option<Self::Item>> {
1891        let this = &mut *self;
1892        if this.inner.check_shutdown(cx) {
1893            this.is_terminated = true;
1894            return std::task::Poll::Ready(None);
1895        }
1896        if this.is_terminated {
1897            panic!("polled PowerTokenProviderRequestStream after completion");
1898        }
1899        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1900            |bytes, handles| {
1901                match this.inner.channel().read_etc(cx, bytes, handles) {
1902                    std::task::Poll::Ready(Ok(())) => {}
1903                    std::task::Poll::Pending => return std::task::Poll::Pending,
1904                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1905                        this.is_terminated = true;
1906                        return std::task::Poll::Ready(None);
1907                    }
1908                    std::task::Poll::Ready(Err(e)) => {
1909                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1910                            e.into(),
1911                        ))));
1912                    }
1913                }
1914
1915                // A message has been received from the channel
1916                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1917
1918                std::task::Poll::Ready(Some(match header.ordinal {
1919                0x289cd59b7d9f90ca => {
1920                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1921                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
1922                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1923                    let control_handle = PowerTokenProviderControlHandle {
1924                        inner: this.inner.clone(),
1925                    };
1926                    Ok(PowerTokenProviderRequest::GetToken {
1927                        responder: PowerTokenProviderGetTokenResponder {
1928                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1929                            tx_id: header.tx_id,
1930                        },
1931                    })
1932                }
1933                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1934                    Ok(PowerTokenProviderRequest::_UnknownMethod {
1935                        ordinal: header.ordinal,
1936                        control_handle: PowerTokenProviderControlHandle { inner: this.inner.clone() },
1937                        method_type: fidl::MethodType::OneWay,
1938                    })
1939                }
1940                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1941                    this.inner.send_framework_err(
1942                        fidl::encoding::FrameworkErr::UnknownMethod,
1943                        header.tx_id,
1944                        header.ordinal,
1945                        header.dynamic_flags(),
1946                        (bytes, handles),
1947                    )?;
1948                    Ok(PowerTokenProviderRequest::_UnknownMethod {
1949                        ordinal: header.ordinal,
1950                        control_handle: PowerTokenProviderControlHandle { inner: this.inner.clone() },
1951                        method_type: fidl::MethodType::TwoWay,
1952                    })
1953                }
1954                _ => Err(fidl::Error::UnknownOrdinal {
1955                    ordinal: header.ordinal,
1956                    protocol_name: <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1957                }),
1958            }))
1959            },
1960        )
1961    }
1962}
1963
1964#[derive(Debug)]
1965pub enum PowerTokenProviderRequest {
1966    /// Returns a token which can be used with `fuchsia.power.broker` APIs to
1967    /// create a relationship between this driver's power element(s) and the
1968    /// power element this token is associated with.
1969    GetToken { responder: PowerTokenProviderGetTokenResponder },
1970    /// An interaction was received which does not match any known method.
1971    #[non_exhaustive]
1972    _UnknownMethod {
1973        /// Ordinal of the method that was called.
1974        ordinal: u64,
1975        control_handle: PowerTokenProviderControlHandle,
1976        method_type: fidl::MethodType,
1977    },
1978}
1979
1980impl PowerTokenProviderRequest {
1981    #[allow(irrefutable_let_patterns)]
1982    pub fn into_get_token(self) -> Option<(PowerTokenProviderGetTokenResponder)> {
1983        if let PowerTokenProviderRequest::GetToken { responder } = self {
1984            Some((responder))
1985        } else {
1986            None
1987        }
1988    }
1989
1990    /// Name of the method defined in FIDL
1991    pub fn method_name(&self) -> &'static str {
1992        match *self {
1993            PowerTokenProviderRequest::GetToken { .. } => "get_token",
1994            PowerTokenProviderRequest::_UnknownMethod {
1995                method_type: fidl::MethodType::OneWay,
1996                ..
1997            } => "unknown one-way method",
1998            PowerTokenProviderRequest::_UnknownMethod {
1999                method_type: fidl::MethodType::TwoWay,
2000                ..
2001            } => "unknown two-way method",
2002        }
2003    }
2004}
2005
2006#[derive(Debug, Clone)]
2007pub struct PowerTokenProviderControlHandle {
2008    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2009}
2010
2011impl fidl::endpoints::ControlHandle for PowerTokenProviderControlHandle {
2012    fn shutdown(&self) {
2013        self.inner.shutdown()
2014    }
2015    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2016        self.inner.shutdown_with_epitaph(status)
2017    }
2018
2019    fn is_closed(&self) -> bool {
2020        self.inner.channel().is_closed()
2021    }
2022    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2023        self.inner.channel().on_closed()
2024    }
2025
2026    #[cfg(target_os = "fuchsia")]
2027    fn signal_peer(
2028        &self,
2029        clear_mask: zx::Signals,
2030        set_mask: zx::Signals,
2031    ) -> Result<(), zx_status::Status> {
2032        use fidl::Peered;
2033        self.inner.channel().signal_peer(clear_mask, set_mask)
2034    }
2035}
2036
2037impl PowerTokenProviderControlHandle {}
2038
2039#[must_use = "FIDL methods require a response to be sent"]
2040#[derive(Debug)]
2041pub struct PowerTokenProviderGetTokenResponder {
2042    control_handle: std::mem::ManuallyDrop<PowerTokenProviderControlHandle>,
2043    tx_id: u32,
2044}
2045
2046/// Set the the channel to be shutdown (see [`PowerTokenProviderControlHandle::shutdown`])
2047/// if the responder is dropped without sending a response, so that the client
2048/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2049impl std::ops::Drop for PowerTokenProviderGetTokenResponder {
2050    fn drop(&mut self) {
2051        self.control_handle.shutdown();
2052        // Safety: drops once, never accessed again
2053        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2054    }
2055}
2056
2057impl fidl::endpoints::Responder for PowerTokenProviderGetTokenResponder {
2058    type ControlHandle = PowerTokenProviderControlHandle;
2059
2060    fn control_handle(&self) -> &PowerTokenProviderControlHandle {
2061        &self.control_handle
2062    }
2063
2064    fn drop_without_shutdown(mut self) {
2065        // Safety: drops once, never accessed again due to mem::forget
2066        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2067        // Prevent Drop from running (which would shut down the channel)
2068        std::mem::forget(self);
2069    }
2070}
2071
2072impl PowerTokenProviderGetTokenResponder {
2073    /// Sends a response to the FIDL transaction.
2074    ///
2075    /// Sets the channel to shutdown if an error occurs.
2076    pub fn send(self, mut result: Result<fidl::Event, i32>) -> Result<(), fidl::Error> {
2077        let _result = self.send_raw(result);
2078        if _result.is_err() {
2079            self.control_handle.shutdown();
2080        }
2081        self.drop_without_shutdown();
2082        _result
2083    }
2084
2085    /// Similar to "send" but does not shutdown the channel if an error occurs.
2086    pub fn send_no_shutdown_on_err(
2087        self,
2088        mut result: Result<fidl::Event, i32>,
2089    ) -> Result<(), fidl::Error> {
2090        let _result = self.send_raw(result);
2091        self.drop_without_shutdown();
2092        _result
2093    }
2094
2095    fn send_raw(&self, mut result: Result<fidl::Event, i32>) -> Result<(), fidl::Error> {
2096        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2097            PowerTokenProviderGetTokenResponse,
2098            i32,
2099        >>(
2100            fidl::encoding::FlexibleResult::new(result.map(|handle| (handle,))),
2101            self.tx_id,
2102            0x289cd59b7d9f90ca,
2103            fidl::encoding::DynamicFlags::FLEXIBLE,
2104        )
2105    }
2106}
2107
2108#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2109pub struct PowerTokenServiceMarker;
2110
2111#[cfg(target_os = "fuchsia")]
2112impl fidl::endpoints::ServiceMarker for PowerTokenServiceMarker {
2113    type Proxy = PowerTokenServiceProxy;
2114    type Request = PowerTokenServiceRequest;
2115    const SERVICE_NAME: &'static str = "fuchsia.hardware.power.PowerTokenService";
2116}
2117
2118/// A request for one of the member protocols of PowerTokenService.
2119///
2120#[cfg(target_os = "fuchsia")]
2121pub enum PowerTokenServiceRequest {
2122    TokenProvider(PowerTokenProviderRequestStream),
2123}
2124
2125#[cfg(target_os = "fuchsia")]
2126impl fidl::endpoints::ServiceRequest for PowerTokenServiceRequest {
2127    type Service = PowerTokenServiceMarker;
2128
2129    fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self {
2130        match name {
2131            "token_provider" => Self::TokenProvider(
2132                <PowerTokenProviderRequestStream as fidl::endpoints::RequestStream>::from_channel(
2133                    _channel,
2134                ),
2135            ),
2136            _ => panic!("no such member protocol name for service PowerTokenService"),
2137        }
2138    }
2139
2140    fn member_names() -> &'static [&'static str] {
2141        &["token_provider"]
2142    }
2143}
2144#[cfg(target_os = "fuchsia")]
2145pub struct PowerTokenServiceProxy(#[allow(dead_code)] Box<dyn fidl::endpoints::MemberOpener>);
2146
2147#[cfg(target_os = "fuchsia")]
2148impl fidl::endpoints::ServiceProxy for PowerTokenServiceProxy {
2149    type Service = PowerTokenServiceMarker;
2150
2151    fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self {
2152        Self(opener)
2153    }
2154}
2155
2156#[cfg(target_os = "fuchsia")]
2157impl PowerTokenServiceProxy {
2158    pub fn connect_to_token_provider(&self) -> Result<PowerTokenProviderProxy, fidl::Error> {
2159        let (proxy, server_end) = fidl::endpoints::create_proxy::<PowerTokenProviderMarker>();
2160        self.connect_channel_to_token_provider(server_end)?;
2161        Ok(proxy)
2162    }
2163
2164    /// Like `connect_to_token_provider`, but returns a sync proxy.
2165    /// See [`Self::connect_to_token_provider`] for more details.
2166    pub fn connect_to_token_provider_sync(
2167        &self,
2168    ) -> Result<PowerTokenProviderSynchronousProxy, fidl::Error> {
2169        let (proxy, server_end) = fidl::endpoints::create_sync_proxy::<PowerTokenProviderMarker>();
2170        self.connect_channel_to_token_provider(server_end)?;
2171        Ok(proxy)
2172    }
2173
2174    /// Like `connect_to_token_provider`, but accepts a server end.
2175    /// See [`Self::connect_to_token_provider`] for more details.
2176    pub fn connect_channel_to_token_provider(
2177        &self,
2178        server_end: fidl::endpoints::ServerEnd<PowerTokenProviderMarker>,
2179    ) -> Result<(), fidl::Error> {
2180        self.0.open_member("token_provider", server_end.into_channel())
2181    }
2182
2183    pub fn instance_name(&self) -> &str {
2184        self.0.instance_name()
2185    }
2186}
2187
2188#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2189pub struct ServiceMarker;
2190
2191#[cfg(target_os = "fuchsia")]
2192impl fidl::endpoints::ServiceMarker for ServiceMarker {
2193    type Proxy = ServiceProxy;
2194    type Request = ServiceRequest;
2195    const SERVICE_NAME: &'static str = "fuchsia.hardware.power.Service";
2196}
2197
2198/// A request for one of the member protocols of Service.
2199///
2200#[cfg(target_os = "fuchsia")]
2201pub enum ServiceRequest {
2202    Device(DeviceRequestStream),
2203}
2204
2205#[cfg(target_os = "fuchsia")]
2206impl fidl::endpoints::ServiceRequest for ServiceRequest {
2207    type Service = ServiceMarker;
2208
2209    fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self {
2210        match name {
2211            "device" => Self::Device(
2212                <DeviceRequestStream as fidl::endpoints::RequestStream>::from_channel(_channel),
2213            ),
2214            _ => panic!("no such member protocol name for service Service"),
2215        }
2216    }
2217
2218    fn member_names() -> &'static [&'static str] {
2219        &["device"]
2220    }
2221}
2222#[cfg(target_os = "fuchsia")]
2223pub struct ServiceProxy(#[allow(dead_code)] Box<dyn fidl::endpoints::MemberOpener>);
2224
2225#[cfg(target_os = "fuchsia")]
2226impl fidl::endpoints::ServiceProxy for ServiceProxy {
2227    type Service = ServiceMarker;
2228
2229    fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self {
2230        Self(opener)
2231    }
2232}
2233
2234#[cfg(target_os = "fuchsia")]
2235impl ServiceProxy {
2236    pub fn connect_to_device(&self) -> Result<DeviceProxy, fidl::Error> {
2237        let (proxy, server_end) = fidl::endpoints::create_proxy::<DeviceMarker>();
2238        self.connect_channel_to_device(server_end)?;
2239        Ok(proxy)
2240    }
2241
2242    /// Like `connect_to_device`, but returns a sync proxy.
2243    /// See [`Self::connect_to_device`] for more details.
2244    pub fn connect_to_device_sync(&self) -> Result<DeviceSynchronousProxy, fidl::Error> {
2245        let (proxy, server_end) = fidl::endpoints::create_sync_proxy::<DeviceMarker>();
2246        self.connect_channel_to_device(server_end)?;
2247        Ok(proxy)
2248    }
2249
2250    /// Like `connect_to_device`, but accepts a server end.
2251    /// See [`Self::connect_to_device`] for more details.
2252    pub fn connect_channel_to_device(
2253        &self,
2254        server_end: fidl::endpoints::ServerEnd<DeviceMarker>,
2255    ) -> Result<(), fidl::Error> {
2256        self.0.open_member("device", server_end.into_channel())
2257    }
2258
2259    pub fn instance_name(&self) -> &str {
2260        self.0.instance_name()
2261    }
2262}
2263
2264mod internal {
2265    use super::*;
2266
2267    impl fidl::encoding::ResourceTypeMarker for PowerTokenProviderGetTokenResponse {
2268        type Borrowed<'a> = &'a mut Self;
2269        fn take_or_borrow<'a>(
2270            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2271        ) -> Self::Borrowed<'a> {
2272            value
2273        }
2274    }
2275
2276    unsafe impl fidl::encoding::TypeMarker for PowerTokenProviderGetTokenResponse {
2277        type Owned = Self;
2278
2279        #[inline(always)]
2280        fn inline_align(_context: fidl::encoding::Context) -> usize {
2281            4
2282        }
2283
2284        #[inline(always)]
2285        fn inline_size(_context: fidl::encoding::Context) -> usize {
2286            4
2287        }
2288    }
2289
2290    unsafe impl
2291        fidl::encoding::Encode<
2292            PowerTokenProviderGetTokenResponse,
2293            fidl::encoding::DefaultFuchsiaResourceDialect,
2294        > for &mut PowerTokenProviderGetTokenResponse
2295    {
2296        #[inline]
2297        unsafe fn encode(
2298            self,
2299            encoder: &mut fidl::encoding::Encoder<
2300                '_,
2301                fidl::encoding::DefaultFuchsiaResourceDialect,
2302            >,
2303            offset: usize,
2304            _depth: fidl::encoding::Depth,
2305        ) -> fidl::Result<()> {
2306            encoder.debug_check_bounds::<PowerTokenProviderGetTokenResponse>(offset);
2307            // Delegate to tuple encoding.
2308            fidl::encoding::Encode::<
2309                PowerTokenProviderGetTokenResponse,
2310                fidl::encoding::DefaultFuchsiaResourceDialect,
2311            >::encode(
2312                (<fidl::encoding::HandleType<
2313                    fidl::Event,
2314                    { fidl::ObjectType::EVENT.into_raw() },
2315                    2147483648,
2316                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
2317                    &mut self.handle
2318                ),),
2319                encoder,
2320                offset,
2321                _depth,
2322            )
2323        }
2324    }
2325    unsafe impl<
2326        T0: fidl::encoding::Encode<
2327                fidl::encoding::HandleType<
2328                    fidl::Event,
2329                    { fidl::ObjectType::EVENT.into_raw() },
2330                    2147483648,
2331                >,
2332                fidl::encoding::DefaultFuchsiaResourceDialect,
2333            >,
2334    >
2335        fidl::encoding::Encode<
2336            PowerTokenProviderGetTokenResponse,
2337            fidl::encoding::DefaultFuchsiaResourceDialect,
2338        > for (T0,)
2339    {
2340        #[inline]
2341        unsafe fn encode(
2342            self,
2343            encoder: &mut fidl::encoding::Encoder<
2344                '_,
2345                fidl::encoding::DefaultFuchsiaResourceDialect,
2346            >,
2347            offset: usize,
2348            depth: fidl::encoding::Depth,
2349        ) -> fidl::Result<()> {
2350            encoder.debug_check_bounds::<PowerTokenProviderGetTokenResponse>(offset);
2351            // Zero out padding regions. There's no need to apply masks
2352            // because the unmasked parts will be overwritten by fields.
2353            // Write the fields.
2354            self.0.encode(encoder, offset + 0, depth)?;
2355            Ok(())
2356        }
2357    }
2358
2359    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2360        for PowerTokenProviderGetTokenResponse
2361    {
2362        #[inline(always)]
2363        fn new_empty() -> Self {
2364            Self {
2365                handle: fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
2366            }
2367        }
2368
2369        #[inline]
2370        unsafe fn decode(
2371            &mut self,
2372            decoder: &mut fidl::encoding::Decoder<
2373                '_,
2374                fidl::encoding::DefaultFuchsiaResourceDialect,
2375            >,
2376            offset: usize,
2377            _depth: fidl::encoding::Depth,
2378        ) -> fidl::Result<()> {
2379            decoder.debug_check_bounds::<Self>(offset);
2380            // Verify that padding bytes are zero.
2381            fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.handle, decoder, offset + 0, _depth)?;
2382            Ok(())
2383        }
2384    }
2385}