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::NullableHandle {
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
1046    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1047        self.inner.shutdown_with_epitaph(status)
1048    }
1049
1050    fn is_closed(&self) -> bool {
1051        self.inner.channel().is_closed()
1052    }
1053    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1054        self.inner.channel().on_closed()
1055    }
1056
1057    #[cfg(target_os = "fuchsia")]
1058    fn signal_peer(
1059        &self,
1060        clear_mask: zx::Signals,
1061        set_mask: zx::Signals,
1062    ) -> Result<(), zx_status::Status> {
1063        use fidl::Peered;
1064        self.inner.channel().signal_peer(clear_mask, set_mask)
1065    }
1066}
1067
1068impl DeviceControlHandle {}
1069
1070#[must_use = "FIDL methods require a response to be sent"]
1071#[derive(Debug)]
1072pub struct DeviceRegisterPowerDomainResponder {
1073    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1074    tx_id: u32,
1075}
1076
1077/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1078/// if the responder is dropped without sending a response, so that the client
1079/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1080impl std::ops::Drop for DeviceRegisterPowerDomainResponder {
1081    fn drop(&mut self) {
1082        self.control_handle.shutdown();
1083        // Safety: drops once, never accessed again
1084        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1085    }
1086}
1087
1088impl fidl::endpoints::Responder for DeviceRegisterPowerDomainResponder {
1089    type ControlHandle = DeviceControlHandle;
1090
1091    fn control_handle(&self) -> &DeviceControlHandle {
1092        &self.control_handle
1093    }
1094
1095    fn drop_without_shutdown(mut self) {
1096        // Safety: drops once, never accessed again due to mem::forget
1097        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1098        // Prevent Drop from running (which would shut down the channel)
1099        std::mem::forget(self);
1100    }
1101}
1102
1103impl DeviceRegisterPowerDomainResponder {
1104    /// Sends a response to the FIDL transaction.
1105    ///
1106    /// Sets the channel to shutdown if an error occurs.
1107    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1108        let _result = self.send_raw(result);
1109        if _result.is_err() {
1110            self.control_handle.shutdown();
1111        }
1112        self.drop_without_shutdown();
1113        _result
1114    }
1115
1116    /// Similar to "send" but does not shutdown the channel if an error occurs.
1117    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1118        let _result = self.send_raw(result);
1119        self.drop_without_shutdown();
1120        _result
1121    }
1122
1123    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1124        self.control_handle
1125            .inner
1126            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
1127                result,
1128                self.tx_id,
1129                0x3dde3e7cb91210dc,
1130                fidl::encoding::DynamicFlags::empty(),
1131            )
1132    }
1133}
1134
1135#[must_use = "FIDL methods require a response to be sent"]
1136#[derive(Debug)]
1137pub struct DeviceUnregisterPowerDomainResponder {
1138    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1139    tx_id: u32,
1140}
1141
1142/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1143/// if the responder is dropped without sending a response, so that the client
1144/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1145impl std::ops::Drop for DeviceUnregisterPowerDomainResponder {
1146    fn drop(&mut self) {
1147        self.control_handle.shutdown();
1148        // Safety: drops once, never accessed again
1149        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1150    }
1151}
1152
1153impl fidl::endpoints::Responder for DeviceUnregisterPowerDomainResponder {
1154    type ControlHandle = DeviceControlHandle;
1155
1156    fn control_handle(&self) -> &DeviceControlHandle {
1157        &self.control_handle
1158    }
1159
1160    fn drop_without_shutdown(mut self) {
1161        // Safety: drops once, never accessed again due to mem::forget
1162        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1163        // Prevent Drop from running (which would shut down the channel)
1164        std::mem::forget(self);
1165    }
1166}
1167
1168impl DeviceUnregisterPowerDomainResponder {
1169    /// Sends a response to the FIDL transaction.
1170    ///
1171    /// Sets the channel to shutdown if an error occurs.
1172    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1173        let _result = self.send_raw(result);
1174        if _result.is_err() {
1175            self.control_handle.shutdown();
1176        }
1177        self.drop_without_shutdown();
1178        _result
1179    }
1180
1181    /// Similar to "send" but does not shutdown the channel if an error occurs.
1182    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1183        let _result = self.send_raw(result);
1184        self.drop_without_shutdown();
1185        _result
1186    }
1187
1188    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1189        self.control_handle
1190            .inner
1191            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
1192                result,
1193                self.tx_id,
1194                0x6b1b26f908fd8c69,
1195                fidl::encoding::DynamicFlags::empty(),
1196            )
1197    }
1198}
1199
1200#[must_use = "FIDL methods require a response to be sent"]
1201#[derive(Debug)]
1202pub struct DeviceGetSupportedVoltageRangeResponder {
1203    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1204    tx_id: u32,
1205}
1206
1207/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1208/// if the responder is dropped without sending a response, so that the client
1209/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1210impl std::ops::Drop for DeviceGetSupportedVoltageRangeResponder {
1211    fn drop(&mut self) {
1212        self.control_handle.shutdown();
1213        // Safety: drops once, never accessed again
1214        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1215    }
1216}
1217
1218impl fidl::endpoints::Responder for DeviceGetSupportedVoltageRangeResponder {
1219    type ControlHandle = DeviceControlHandle;
1220
1221    fn control_handle(&self) -> &DeviceControlHandle {
1222        &self.control_handle
1223    }
1224
1225    fn drop_without_shutdown(mut self) {
1226        // Safety: drops once, never accessed again due to mem::forget
1227        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1228        // Prevent Drop from running (which would shut down the channel)
1229        std::mem::forget(self);
1230    }
1231}
1232
1233impl DeviceGetSupportedVoltageRangeResponder {
1234    /// Sends a response to the FIDL transaction.
1235    ///
1236    /// Sets the channel to shutdown if an error occurs.
1237    pub fn send(self, mut result: Result<(u32, u32), i32>) -> Result<(), fidl::Error> {
1238        let _result = self.send_raw(result);
1239        if _result.is_err() {
1240            self.control_handle.shutdown();
1241        }
1242        self.drop_without_shutdown();
1243        _result
1244    }
1245
1246    /// Similar to "send" but does not shutdown the channel if an error occurs.
1247    pub fn send_no_shutdown_on_err(
1248        self,
1249        mut result: Result<(u32, u32), i32>,
1250    ) -> Result<(), fidl::Error> {
1251        let _result = self.send_raw(result);
1252        self.drop_without_shutdown();
1253        _result
1254    }
1255
1256    fn send_raw(&self, mut result: Result<(u32, u32), i32>) -> Result<(), fidl::Error> {
1257        self.control_handle.inner.send::<fidl::encoding::ResultType<
1258            DeviceGetSupportedVoltageRangeResponse,
1259            i32,
1260        >>(
1261            result,
1262            self.tx_id,
1263            0x6d75897fea248df0,
1264            fidl::encoding::DynamicFlags::empty(),
1265        )
1266    }
1267}
1268
1269#[must_use = "FIDL methods require a response to be sent"]
1270#[derive(Debug)]
1271pub struct DeviceRequestVoltageResponder {
1272    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1273    tx_id: u32,
1274}
1275
1276/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1277/// if the responder is dropped without sending a response, so that the client
1278/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1279impl std::ops::Drop for DeviceRequestVoltageResponder {
1280    fn drop(&mut self) {
1281        self.control_handle.shutdown();
1282        // Safety: drops once, never accessed again
1283        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1284    }
1285}
1286
1287impl fidl::endpoints::Responder for DeviceRequestVoltageResponder {
1288    type ControlHandle = DeviceControlHandle;
1289
1290    fn control_handle(&self) -> &DeviceControlHandle {
1291        &self.control_handle
1292    }
1293
1294    fn drop_without_shutdown(mut self) {
1295        // Safety: drops once, never accessed again due to mem::forget
1296        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1297        // Prevent Drop from running (which would shut down the channel)
1298        std::mem::forget(self);
1299    }
1300}
1301
1302impl DeviceRequestVoltageResponder {
1303    /// Sends a response to the FIDL transaction.
1304    ///
1305    /// Sets the channel to shutdown if an error occurs.
1306    pub fn send(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1307        let _result = self.send_raw(result);
1308        if _result.is_err() {
1309            self.control_handle.shutdown();
1310        }
1311        self.drop_without_shutdown();
1312        _result
1313    }
1314
1315    /// Similar to "send" but does not shutdown the channel if an error occurs.
1316    pub fn send_no_shutdown_on_err(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1317        let _result = self.send_raw(result);
1318        self.drop_without_shutdown();
1319        _result
1320    }
1321
1322    fn send_raw(&self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1323        self.control_handle
1324            .inner
1325            .send::<fidl::encoding::ResultType<DeviceRequestVoltageResponse, i32>>(
1326                result.map(|actual_voltage| (actual_voltage,)),
1327                self.tx_id,
1328                0x23ca354dfe067e9b,
1329                fidl::encoding::DynamicFlags::empty(),
1330            )
1331    }
1332}
1333
1334#[must_use = "FIDL methods require a response to be sent"]
1335#[derive(Debug)]
1336pub struct DeviceGetCurrentVoltageResponder {
1337    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1338    tx_id: u32,
1339}
1340
1341/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1342/// if the responder is dropped without sending a response, so that the client
1343/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1344impl std::ops::Drop for DeviceGetCurrentVoltageResponder {
1345    fn drop(&mut self) {
1346        self.control_handle.shutdown();
1347        // Safety: drops once, never accessed again
1348        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1349    }
1350}
1351
1352impl fidl::endpoints::Responder for DeviceGetCurrentVoltageResponder {
1353    type ControlHandle = DeviceControlHandle;
1354
1355    fn control_handle(&self) -> &DeviceControlHandle {
1356        &self.control_handle
1357    }
1358
1359    fn drop_without_shutdown(mut self) {
1360        // Safety: drops once, never accessed again due to mem::forget
1361        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1362        // Prevent Drop from running (which would shut down the channel)
1363        std::mem::forget(self);
1364    }
1365}
1366
1367impl DeviceGetCurrentVoltageResponder {
1368    /// Sends a response to the FIDL transaction.
1369    ///
1370    /// Sets the channel to shutdown if an error occurs.
1371    pub fn send(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1372        let _result = self.send_raw(result);
1373        if _result.is_err() {
1374            self.control_handle.shutdown();
1375        }
1376        self.drop_without_shutdown();
1377        _result
1378    }
1379
1380    /// Similar to "send" but does not shutdown the channel if an error occurs.
1381    pub fn send_no_shutdown_on_err(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1382        let _result = self.send_raw(result);
1383        self.drop_without_shutdown();
1384        _result
1385    }
1386
1387    fn send_raw(&self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1388        self.control_handle
1389            .inner
1390            .send::<fidl::encoding::ResultType<DeviceGetCurrentVoltageResponse, i32>>(
1391                result.map(|current_voltage| (current_voltage,)),
1392                self.tx_id,
1393                0x6a9f80a0412da961,
1394                fidl::encoding::DynamicFlags::empty(),
1395            )
1396    }
1397}
1398
1399#[must_use = "FIDL methods require a response to be sent"]
1400#[derive(Debug)]
1401pub struct DeviceGetPowerDomainStatusResponder {
1402    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1403    tx_id: u32,
1404}
1405
1406/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1407/// if the responder is dropped without sending a response, so that the client
1408/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1409impl std::ops::Drop for DeviceGetPowerDomainStatusResponder {
1410    fn drop(&mut self) {
1411        self.control_handle.shutdown();
1412        // Safety: drops once, never accessed again
1413        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1414    }
1415}
1416
1417impl fidl::endpoints::Responder for DeviceGetPowerDomainStatusResponder {
1418    type ControlHandle = DeviceControlHandle;
1419
1420    fn control_handle(&self) -> &DeviceControlHandle {
1421        &self.control_handle
1422    }
1423
1424    fn drop_without_shutdown(mut self) {
1425        // Safety: drops once, never accessed again due to mem::forget
1426        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1427        // Prevent Drop from running (which would shut down the channel)
1428        std::mem::forget(self);
1429    }
1430}
1431
1432impl DeviceGetPowerDomainStatusResponder {
1433    /// Sends a response to the FIDL transaction.
1434    ///
1435    /// Sets the channel to shutdown if an error occurs.
1436    pub fn send(self, mut result: Result<PowerDomainStatus, i32>) -> Result<(), fidl::Error> {
1437        let _result = self.send_raw(result);
1438        if _result.is_err() {
1439            self.control_handle.shutdown();
1440        }
1441        self.drop_without_shutdown();
1442        _result
1443    }
1444
1445    /// Similar to "send" but does not shutdown the channel if an error occurs.
1446    pub fn send_no_shutdown_on_err(
1447        self,
1448        mut result: Result<PowerDomainStatus, i32>,
1449    ) -> Result<(), fidl::Error> {
1450        let _result = self.send_raw(result);
1451        self.drop_without_shutdown();
1452        _result
1453    }
1454
1455    fn send_raw(&self, mut result: Result<PowerDomainStatus, i32>) -> Result<(), fidl::Error> {
1456        self.control_handle
1457            .inner
1458            .send::<fidl::encoding::ResultType<DeviceGetPowerDomainStatusResponse, i32>>(
1459                result.map(|status| (status,)),
1460                self.tx_id,
1461                0x39fe7f1e3e3c74ba,
1462                fidl::encoding::DynamicFlags::empty(),
1463            )
1464    }
1465}
1466
1467#[must_use = "FIDL methods require a response to be sent"]
1468#[derive(Debug)]
1469pub struct DeviceWritePmicCtrlRegResponder {
1470    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1471    tx_id: u32,
1472}
1473
1474/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1475/// if the responder is dropped without sending a response, so that the client
1476/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1477impl std::ops::Drop for DeviceWritePmicCtrlRegResponder {
1478    fn drop(&mut self) {
1479        self.control_handle.shutdown();
1480        // Safety: drops once, never accessed again
1481        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1482    }
1483}
1484
1485impl fidl::endpoints::Responder for DeviceWritePmicCtrlRegResponder {
1486    type ControlHandle = DeviceControlHandle;
1487
1488    fn control_handle(&self) -> &DeviceControlHandle {
1489        &self.control_handle
1490    }
1491
1492    fn drop_without_shutdown(mut self) {
1493        // Safety: drops once, never accessed again due to mem::forget
1494        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1495        // Prevent Drop from running (which would shut down the channel)
1496        std::mem::forget(self);
1497    }
1498}
1499
1500impl DeviceWritePmicCtrlRegResponder {
1501    /// Sends a response to the FIDL transaction.
1502    ///
1503    /// Sets the channel to shutdown if an error occurs.
1504    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1505        let _result = self.send_raw(result);
1506        if _result.is_err() {
1507            self.control_handle.shutdown();
1508        }
1509        self.drop_without_shutdown();
1510        _result
1511    }
1512
1513    /// Similar to "send" but does not shutdown the channel if an error occurs.
1514    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1515        let _result = self.send_raw(result);
1516        self.drop_without_shutdown();
1517        _result
1518    }
1519
1520    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
1521        self.control_handle
1522            .inner
1523            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, i32>>(
1524                result,
1525                self.tx_id,
1526                0x340a3483d4740299,
1527                fidl::encoding::DynamicFlags::empty(),
1528            )
1529    }
1530}
1531
1532#[must_use = "FIDL methods require a response to be sent"]
1533#[derive(Debug)]
1534pub struct DeviceReadPmicCtrlRegResponder {
1535    control_handle: std::mem::ManuallyDrop<DeviceControlHandle>,
1536    tx_id: u32,
1537}
1538
1539/// Set the the channel to be shutdown (see [`DeviceControlHandle::shutdown`])
1540/// if the responder is dropped without sending a response, so that the client
1541/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1542impl std::ops::Drop for DeviceReadPmicCtrlRegResponder {
1543    fn drop(&mut self) {
1544        self.control_handle.shutdown();
1545        // Safety: drops once, never accessed again
1546        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1547    }
1548}
1549
1550impl fidl::endpoints::Responder for DeviceReadPmicCtrlRegResponder {
1551    type ControlHandle = DeviceControlHandle;
1552
1553    fn control_handle(&self) -> &DeviceControlHandle {
1554        &self.control_handle
1555    }
1556
1557    fn drop_without_shutdown(mut self) {
1558        // Safety: drops once, never accessed again due to mem::forget
1559        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1560        // Prevent Drop from running (which would shut down the channel)
1561        std::mem::forget(self);
1562    }
1563}
1564
1565impl DeviceReadPmicCtrlRegResponder {
1566    /// Sends a response to the FIDL transaction.
1567    ///
1568    /// Sets the channel to shutdown if an error occurs.
1569    pub fn send(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1570        let _result = self.send_raw(result);
1571        if _result.is_err() {
1572            self.control_handle.shutdown();
1573        }
1574        self.drop_without_shutdown();
1575        _result
1576    }
1577
1578    /// Similar to "send" but does not shutdown the channel if an error occurs.
1579    pub fn send_no_shutdown_on_err(self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1580        let _result = self.send_raw(result);
1581        self.drop_without_shutdown();
1582        _result
1583    }
1584
1585    fn send_raw(&self, mut result: Result<u32, i32>) -> Result<(), fidl::Error> {
1586        self.control_handle
1587            .inner
1588            .send::<fidl::encoding::ResultType<DeviceReadPmicCtrlRegResponse, i32>>(
1589                result.map(|value| (value,)),
1590                self.tx_id,
1591                0x72eebf304bb82f13,
1592                fidl::encoding::DynamicFlags::empty(),
1593            )
1594    }
1595}
1596
1597#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1598pub struct PowerTokenProviderMarker;
1599
1600impl fidl::endpoints::ProtocolMarker for PowerTokenProviderMarker {
1601    type Proxy = PowerTokenProviderProxy;
1602    type RequestStream = PowerTokenProviderRequestStream;
1603    #[cfg(target_os = "fuchsia")]
1604    type SynchronousProxy = PowerTokenProviderSynchronousProxy;
1605
1606    const DEBUG_NAME: &'static str = "fuchsia.hardware.power.PowerTokenProvider";
1607}
1608impl fidl::endpoints::DiscoverableProtocolMarker for PowerTokenProviderMarker {}
1609pub type PowerTokenProviderGetTokenResult = Result<fidl::Event, i32>;
1610
1611pub trait PowerTokenProviderProxyInterface: Send + Sync {
1612    type GetTokenResponseFut: std::future::Future<Output = Result<PowerTokenProviderGetTokenResult, fidl::Error>>
1613        + Send;
1614    fn r#get_token(&self) -> Self::GetTokenResponseFut;
1615}
1616#[derive(Debug)]
1617#[cfg(target_os = "fuchsia")]
1618pub struct PowerTokenProviderSynchronousProxy {
1619    client: fidl::client::sync::Client,
1620}
1621
1622#[cfg(target_os = "fuchsia")]
1623impl fidl::endpoints::SynchronousProxy for PowerTokenProviderSynchronousProxy {
1624    type Proxy = PowerTokenProviderProxy;
1625    type Protocol = PowerTokenProviderMarker;
1626
1627    fn from_channel(inner: fidl::Channel) -> Self {
1628        Self::new(inner)
1629    }
1630
1631    fn into_channel(self) -> fidl::Channel {
1632        self.client.into_channel()
1633    }
1634
1635    fn as_channel(&self) -> &fidl::Channel {
1636        self.client.as_channel()
1637    }
1638}
1639
1640#[cfg(target_os = "fuchsia")]
1641impl PowerTokenProviderSynchronousProxy {
1642    pub fn new(channel: fidl::Channel) -> Self {
1643        let protocol_name =
1644            <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1645        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1646    }
1647
1648    pub fn into_channel(self) -> fidl::Channel {
1649        self.client.into_channel()
1650    }
1651
1652    /// Waits until an event arrives and returns it. It is safe for other
1653    /// threads to make concurrent requests while waiting for an event.
1654    pub fn wait_for_event(
1655        &self,
1656        deadline: zx::MonotonicInstant,
1657    ) -> Result<PowerTokenProviderEvent, fidl::Error> {
1658        PowerTokenProviderEvent::decode(self.client.wait_for_event(deadline)?)
1659    }
1660
1661    /// Returns a token which can be used with `fuchsia.power.broker` APIs to
1662    /// create a relationship between this driver's power element(s) and the
1663    /// power element this token is associated with.
1664    pub fn r#get_token(
1665        &self,
1666        ___deadline: zx::MonotonicInstant,
1667    ) -> Result<PowerTokenProviderGetTokenResult, fidl::Error> {
1668        let _response = self.client.send_query::<
1669            fidl::encoding::EmptyPayload,
1670            fidl::encoding::FlexibleResultType<PowerTokenProviderGetTokenResponse, i32>,
1671        >(
1672            (),
1673            0x289cd59b7d9f90ca,
1674            fidl::encoding::DynamicFlags::FLEXIBLE,
1675            ___deadline,
1676        )?
1677        .into_result::<PowerTokenProviderMarker>("get_token")?;
1678        Ok(_response.map(|x| x.handle))
1679    }
1680}
1681
1682#[cfg(target_os = "fuchsia")]
1683impl From<PowerTokenProviderSynchronousProxy> for zx::NullableHandle {
1684    fn from(value: PowerTokenProviderSynchronousProxy) -> Self {
1685        value.into_channel().into()
1686    }
1687}
1688
1689#[cfg(target_os = "fuchsia")]
1690impl From<fidl::Channel> for PowerTokenProviderSynchronousProxy {
1691    fn from(value: fidl::Channel) -> Self {
1692        Self::new(value)
1693    }
1694}
1695
1696#[cfg(target_os = "fuchsia")]
1697impl fidl::endpoints::FromClient for PowerTokenProviderSynchronousProxy {
1698    type Protocol = PowerTokenProviderMarker;
1699
1700    fn from_client(value: fidl::endpoints::ClientEnd<PowerTokenProviderMarker>) -> Self {
1701        Self::new(value.into_channel())
1702    }
1703}
1704
1705#[derive(Debug, Clone)]
1706pub struct PowerTokenProviderProxy {
1707    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1708}
1709
1710impl fidl::endpoints::Proxy for PowerTokenProviderProxy {
1711    type Protocol = PowerTokenProviderMarker;
1712
1713    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1714        Self::new(inner)
1715    }
1716
1717    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1718        self.client.into_channel().map_err(|client| Self { client })
1719    }
1720
1721    fn as_channel(&self) -> &::fidl::AsyncChannel {
1722        self.client.as_channel()
1723    }
1724}
1725
1726impl PowerTokenProviderProxy {
1727    /// Create a new Proxy for fuchsia.hardware.power/PowerTokenProvider.
1728    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1729        let protocol_name =
1730            <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1731        Self { client: fidl::client::Client::new(channel, protocol_name) }
1732    }
1733
1734    /// Get a Stream of events from the remote end of the protocol.
1735    ///
1736    /// # Panics
1737    ///
1738    /// Panics if the event stream was already taken.
1739    pub fn take_event_stream(&self) -> PowerTokenProviderEventStream {
1740        PowerTokenProviderEventStream { event_receiver: self.client.take_event_receiver() }
1741    }
1742
1743    /// Returns a token which can be used with `fuchsia.power.broker` APIs to
1744    /// create a relationship between this driver's power element(s) and the
1745    /// power element this token is associated with.
1746    pub fn r#get_token(
1747        &self,
1748    ) -> fidl::client::QueryResponseFut<
1749        PowerTokenProviderGetTokenResult,
1750        fidl::encoding::DefaultFuchsiaResourceDialect,
1751    > {
1752        PowerTokenProviderProxyInterface::r#get_token(self)
1753    }
1754}
1755
1756impl PowerTokenProviderProxyInterface for PowerTokenProviderProxy {
1757    type GetTokenResponseFut = fidl::client::QueryResponseFut<
1758        PowerTokenProviderGetTokenResult,
1759        fidl::encoding::DefaultFuchsiaResourceDialect,
1760    >;
1761    fn r#get_token(&self) -> Self::GetTokenResponseFut {
1762        fn _decode(
1763            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1764        ) -> Result<PowerTokenProviderGetTokenResult, fidl::Error> {
1765            let _response = fidl::client::decode_transaction_body::<
1766                fidl::encoding::FlexibleResultType<PowerTokenProviderGetTokenResponse, i32>,
1767                fidl::encoding::DefaultFuchsiaResourceDialect,
1768                0x289cd59b7d9f90ca,
1769            >(_buf?)?
1770            .into_result::<PowerTokenProviderMarker>("get_token")?;
1771            Ok(_response.map(|x| x.handle))
1772        }
1773        self.client.send_query_and_decode::<
1774            fidl::encoding::EmptyPayload,
1775            PowerTokenProviderGetTokenResult,
1776        >(
1777            (),
1778            0x289cd59b7d9f90ca,
1779            fidl::encoding::DynamicFlags::FLEXIBLE,
1780            _decode,
1781        )
1782    }
1783}
1784
1785pub struct PowerTokenProviderEventStream {
1786    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1787}
1788
1789impl std::marker::Unpin for PowerTokenProviderEventStream {}
1790
1791impl futures::stream::FusedStream for PowerTokenProviderEventStream {
1792    fn is_terminated(&self) -> bool {
1793        self.event_receiver.is_terminated()
1794    }
1795}
1796
1797impl futures::Stream for PowerTokenProviderEventStream {
1798    type Item = Result<PowerTokenProviderEvent, fidl::Error>;
1799
1800    fn poll_next(
1801        mut self: std::pin::Pin<&mut Self>,
1802        cx: &mut std::task::Context<'_>,
1803    ) -> std::task::Poll<Option<Self::Item>> {
1804        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1805            &mut self.event_receiver,
1806            cx
1807        )?) {
1808            Some(buf) => std::task::Poll::Ready(Some(PowerTokenProviderEvent::decode(buf))),
1809            None => std::task::Poll::Ready(None),
1810        }
1811    }
1812}
1813
1814#[derive(Debug)]
1815pub enum PowerTokenProviderEvent {
1816    #[non_exhaustive]
1817    _UnknownEvent {
1818        /// Ordinal of the event that was sent.
1819        ordinal: u64,
1820    },
1821}
1822
1823impl PowerTokenProviderEvent {
1824    /// Decodes a message buffer as a [`PowerTokenProviderEvent`].
1825    fn decode(
1826        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1827    ) -> Result<PowerTokenProviderEvent, fidl::Error> {
1828        let (bytes, _handles) = buf.split_mut();
1829        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1830        debug_assert_eq!(tx_header.tx_id, 0);
1831        match tx_header.ordinal {
1832            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1833                Ok(PowerTokenProviderEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1834            }
1835            _ => Err(fidl::Error::UnknownOrdinal {
1836                ordinal: tx_header.ordinal,
1837                protocol_name:
1838                    <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1839            }),
1840        }
1841    }
1842}
1843
1844/// A Stream of incoming requests for fuchsia.hardware.power/PowerTokenProvider.
1845pub struct PowerTokenProviderRequestStream {
1846    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1847    is_terminated: bool,
1848}
1849
1850impl std::marker::Unpin for PowerTokenProviderRequestStream {}
1851
1852impl futures::stream::FusedStream for PowerTokenProviderRequestStream {
1853    fn is_terminated(&self) -> bool {
1854        self.is_terminated
1855    }
1856}
1857
1858impl fidl::endpoints::RequestStream for PowerTokenProviderRequestStream {
1859    type Protocol = PowerTokenProviderMarker;
1860    type ControlHandle = PowerTokenProviderControlHandle;
1861
1862    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1863        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1864    }
1865
1866    fn control_handle(&self) -> Self::ControlHandle {
1867        PowerTokenProviderControlHandle { inner: self.inner.clone() }
1868    }
1869
1870    fn into_inner(
1871        self,
1872    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1873    {
1874        (self.inner, self.is_terminated)
1875    }
1876
1877    fn from_inner(
1878        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1879        is_terminated: bool,
1880    ) -> Self {
1881        Self { inner, is_terminated }
1882    }
1883}
1884
1885impl futures::Stream for PowerTokenProviderRequestStream {
1886    type Item = Result<PowerTokenProviderRequest, fidl::Error>;
1887
1888    fn poll_next(
1889        mut self: std::pin::Pin<&mut Self>,
1890        cx: &mut std::task::Context<'_>,
1891    ) -> std::task::Poll<Option<Self::Item>> {
1892        let this = &mut *self;
1893        if this.inner.check_shutdown(cx) {
1894            this.is_terminated = true;
1895            return std::task::Poll::Ready(None);
1896        }
1897        if this.is_terminated {
1898            panic!("polled PowerTokenProviderRequestStream after completion");
1899        }
1900        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1901            |bytes, handles| {
1902                match this.inner.channel().read_etc(cx, bytes, handles) {
1903                    std::task::Poll::Ready(Ok(())) => {}
1904                    std::task::Poll::Pending => return std::task::Poll::Pending,
1905                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1906                        this.is_terminated = true;
1907                        return std::task::Poll::Ready(None);
1908                    }
1909                    std::task::Poll::Ready(Err(e)) => {
1910                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1911                            e.into(),
1912                        ))));
1913                    }
1914                }
1915
1916                // A message has been received from the channel
1917                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1918
1919                std::task::Poll::Ready(Some(match header.ordinal {
1920                0x289cd59b7d9f90ca => {
1921                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1922                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
1923                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1924                    let control_handle = PowerTokenProviderControlHandle {
1925                        inner: this.inner.clone(),
1926                    };
1927                    Ok(PowerTokenProviderRequest::GetToken {
1928                        responder: PowerTokenProviderGetTokenResponder {
1929                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1930                            tx_id: header.tx_id,
1931                        },
1932                    })
1933                }
1934                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1935                    Ok(PowerTokenProviderRequest::_UnknownMethod {
1936                        ordinal: header.ordinal,
1937                        control_handle: PowerTokenProviderControlHandle { inner: this.inner.clone() },
1938                        method_type: fidl::MethodType::OneWay,
1939                    })
1940                }
1941                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1942                    this.inner.send_framework_err(
1943                        fidl::encoding::FrameworkErr::UnknownMethod,
1944                        header.tx_id,
1945                        header.ordinal,
1946                        header.dynamic_flags(),
1947                        (bytes, handles),
1948                    )?;
1949                    Ok(PowerTokenProviderRequest::_UnknownMethod {
1950                        ordinal: header.ordinal,
1951                        control_handle: PowerTokenProviderControlHandle { inner: this.inner.clone() },
1952                        method_type: fidl::MethodType::TwoWay,
1953                    })
1954                }
1955                _ => Err(fidl::Error::UnknownOrdinal {
1956                    ordinal: header.ordinal,
1957                    protocol_name: <PowerTokenProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1958                }),
1959            }))
1960            },
1961        )
1962    }
1963}
1964
1965#[derive(Debug)]
1966pub enum PowerTokenProviderRequest {
1967    /// Returns a token which can be used with `fuchsia.power.broker` APIs to
1968    /// create a relationship between this driver's power element(s) and the
1969    /// power element this token is associated with.
1970    GetToken { responder: PowerTokenProviderGetTokenResponder },
1971    /// An interaction was received which does not match any known method.
1972    #[non_exhaustive]
1973    _UnknownMethod {
1974        /// Ordinal of the method that was called.
1975        ordinal: u64,
1976        control_handle: PowerTokenProviderControlHandle,
1977        method_type: fidl::MethodType,
1978    },
1979}
1980
1981impl PowerTokenProviderRequest {
1982    #[allow(irrefutable_let_patterns)]
1983    pub fn into_get_token(self) -> Option<(PowerTokenProviderGetTokenResponder)> {
1984        if let PowerTokenProviderRequest::GetToken { responder } = self {
1985            Some((responder))
1986        } else {
1987            None
1988        }
1989    }
1990
1991    /// Name of the method defined in FIDL
1992    pub fn method_name(&self) -> &'static str {
1993        match *self {
1994            PowerTokenProviderRequest::GetToken { .. } => "get_token",
1995            PowerTokenProviderRequest::_UnknownMethod {
1996                method_type: fidl::MethodType::OneWay,
1997                ..
1998            } => "unknown one-way method",
1999            PowerTokenProviderRequest::_UnknownMethod {
2000                method_type: fidl::MethodType::TwoWay,
2001                ..
2002            } => "unknown two-way method",
2003        }
2004    }
2005}
2006
2007#[derive(Debug, Clone)]
2008pub struct PowerTokenProviderControlHandle {
2009    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2010}
2011
2012impl fidl::endpoints::ControlHandle for PowerTokenProviderControlHandle {
2013    fn shutdown(&self) {
2014        self.inner.shutdown()
2015    }
2016
2017    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2018        self.inner.shutdown_with_epitaph(status)
2019    }
2020
2021    fn is_closed(&self) -> bool {
2022        self.inner.channel().is_closed()
2023    }
2024    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2025        self.inner.channel().on_closed()
2026    }
2027
2028    #[cfg(target_os = "fuchsia")]
2029    fn signal_peer(
2030        &self,
2031        clear_mask: zx::Signals,
2032        set_mask: zx::Signals,
2033    ) -> Result<(), zx_status::Status> {
2034        use fidl::Peered;
2035        self.inner.channel().signal_peer(clear_mask, set_mask)
2036    }
2037}
2038
2039impl PowerTokenProviderControlHandle {}
2040
2041#[must_use = "FIDL methods require a response to be sent"]
2042#[derive(Debug)]
2043pub struct PowerTokenProviderGetTokenResponder {
2044    control_handle: std::mem::ManuallyDrop<PowerTokenProviderControlHandle>,
2045    tx_id: u32,
2046}
2047
2048/// Set the the channel to be shutdown (see [`PowerTokenProviderControlHandle::shutdown`])
2049/// if the responder is dropped without sending a response, so that the client
2050/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2051impl std::ops::Drop for PowerTokenProviderGetTokenResponder {
2052    fn drop(&mut self) {
2053        self.control_handle.shutdown();
2054        // Safety: drops once, never accessed again
2055        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2056    }
2057}
2058
2059impl fidl::endpoints::Responder for PowerTokenProviderGetTokenResponder {
2060    type ControlHandle = PowerTokenProviderControlHandle;
2061
2062    fn control_handle(&self) -> &PowerTokenProviderControlHandle {
2063        &self.control_handle
2064    }
2065
2066    fn drop_without_shutdown(mut self) {
2067        // Safety: drops once, never accessed again due to mem::forget
2068        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2069        // Prevent Drop from running (which would shut down the channel)
2070        std::mem::forget(self);
2071    }
2072}
2073
2074impl PowerTokenProviderGetTokenResponder {
2075    /// Sends a response to the FIDL transaction.
2076    ///
2077    /// Sets the channel to shutdown if an error occurs.
2078    pub fn send(self, mut result: Result<fidl::Event, i32>) -> Result<(), fidl::Error> {
2079        let _result = self.send_raw(result);
2080        if _result.is_err() {
2081            self.control_handle.shutdown();
2082        }
2083        self.drop_without_shutdown();
2084        _result
2085    }
2086
2087    /// Similar to "send" but does not shutdown the channel if an error occurs.
2088    pub fn send_no_shutdown_on_err(
2089        self,
2090        mut result: Result<fidl::Event, i32>,
2091    ) -> Result<(), fidl::Error> {
2092        let _result = self.send_raw(result);
2093        self.drop_without_shutdown();
2094        _result
2095    }
2096
2097    fn send_raw(&self, mut result: Result<fidl::Event, i32>) -> Result<(), fidl::Error> {
2098        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2099            PowerTokenProviderGetTokenResponse,
2100            i32,
2101        >>(
2102            fidl::encoding::FlexibleResult::new(result.map(|handle| (handle,))),
2103            self.tx_id,
2104            0x289cd59b7d9f90ca,
2105            fidl::encoding::DynamicFlags::FLEXIBLE,
2106        )
2107    }
2108}
2109
2110#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2111pub struct PowerTokenServiceMarker;
2112
2113#[cfg(target_os = "fuchsia")]
2114impl fidl::endpoints::ServiceMarker for PowerTokenServiceMarker {
2115    type Proxy = PowerTokenServiceProxy;
2116    type Request = PowerTokenServiceRequest;
2117    const SERVICE_NAME: &'static str = "fuchsia.hardware.power.PowerTokenService";
2118}
2119
2120/// A request for one of the member protocols of PowerTokenService.
2121///
2122#[cfg(target_os = "fuchsia")]
2123pub enum PowerTokenServiceRequest {
2124    TokenProvider(PowerTokenProviderRequestStream),
2125}
2126
2127#[cfg(target_os = "fuchsia")]
2128impl fidl::endpoints::ServiceRequest for PowerTokenServiceRequest {
2129    type Service = PowerTokenServiceMarker;
2130
2131    fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self {
2132        match name {
2133            "token_provider" => Self::TokenProvider(
2134                <PowerTokenProviderRequestStream as fidl::endpoints::RequestStream>::from_channel(
2135                    _channel,
2136                ),
2137            ),
2138            _ => panic!("no such member protocol name for service PowerTokenService"),
2139        }
2140    }
2141
2142    fn member_names() -> &'static [&'static str] {
2143        &["token_provider"]
2144    }
2145}
2146#[cfg(target_os = "fuchsia")]
2147pub struct PowerTokenServiceProxy(#[allow(dead_code)] Box<dyn fidl::endpoints::MemberOpener>);
2148
2149#[cfg(target_os = "fuchsia")]
2150impl fidl::endpoints::ServiceProxy for PowerTokenServiceProxy {
2151    type Service = PowerTokenServiceMarker;
2152
2153    fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self {
2154        Self(opener)
2155    }
2156}
2157
2158#[cfg(target_os = "fuchsia")]
2159impl PowerTokenServiceProxy {
2160    pub fn connect_to_token_provider(&self) -> Result<PowerTokenProviderProxy, fidl::Error> {
2161        let (proxy, server_end) = fidl::endpoints::create_proxy::<PowerTokenProviderMarker>();
2162        self.connect_channel_to_token_provider(server_end)?;
2163        Ok(proxy)
2164    }
2165
2166    /// Like `connect_to_token_provider`, but returns a sync proxy.
2167    /// See [`Self::connect_to_token_provider`] for more details.
2168    pub fn connect_to_token_provider_sync(
2169        &self,
2170    ) -> Result<PowerTokenProviderSynchronousProxy, fidl::Error> {
2171        let (proxy, server_end) = fidl::endpoints::create_sync_proxy::<PowerTokenProviderMarker>();
2172        self.connect_channel_to_token_provider(server_end)?;
2173        Ok(proxy)
2174    }
2175
2176    /// Like `connect_to_token_provider`, but accepts a server end.
2177    /// See [`Self::connect_to_token_provider`] for more details.
2178    pub fn connect_channel_to_token_provider(
2179        &self,
2180        server_end: fidl::endpoints::ServerEnd<PowerTokenProviderMarker>,
2181    ) -> Result<(), fidl::Error> {
2182        self.0.open_member("token_provider", server_end.into_channel())
2183    }
2184
2185    pub fn instance_name(&self) -> &str {
2186        self.0.instance_name()
2187    }
2188}
2189
2190#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2191pub struct ServiceMarker;
2192
2193#[cfg(target_os = "fuchsia")]
2194impl fidl::endpoints::ServiceMarker for ServiceMarker {
2195    type Proxy = ServiceProxy;
2196    type Request = ServiceRequest;
2197    const SERVICE_NAME: &'static str = "fuchsia.hardware.power.Service";
2198}
2199
2200/// A request for one of the member protocols of Service.
2201///
2202#[cfg(target_os = "fuchsia")]
2203pub enum ServiceRequest {
2204    Device(DeviceRequestStream),
2205}
2206
2207#[cfg(target_os = "fuchsia")]
2208impl fidl::endpoints::ServiceRequest for ServiceRequest {
2209    type Service = ServiceMarker;
2210
2211    fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self {
2212        match name {
2213            "device" => Self::Device(
2214                <DeviceRequestStream as fidl::endpoints::RequestStream>::from_channel(_channel),
2215            ),
2216            _ => panic!("no such member protocol name for service Service"),
2217        }
2218    }
2219
2220    fn member_names() -> &'static [&'static str] {
2221        &["device"]
2222    }
2223}
2224#[cfg(target_os = "fuchsia")]
2225pub struct ServiceProxy(#[allow(dead_code)] Box<dyn fidl::endpoints::MemberOpener>);
2226
2227#[cfg(target_os = "fuchsia")]
2228impl fidl::endpoints::ServiceProxy for ServiceProxy {
2229    type Service = ServiceMarker;
2230
2231    fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self {
2232        Self(opener)
2233    }
2234}
2235
2236#[cfg(target_os = "fuchsia")]
2237impl ServiceProxy {
2238    pub fn connect_to_device(&self) -> Result<DeviceProxy, fidl::Error> {
2239        let (proxy, server_end) = fidl::endpoints::create_proxy::<DeviceMarker>();
2240        self.connect_channel_to_device(server_end)?;
2241        Ok(proxy)
2242    }
2243
2244    /// Like `connect_to_device`, but returns a sync proxy.
2245    /// See [`Self::connect_to_device`] for more details.
2246    pub fn connect_to_device_sync(&self) -> Result<DeviceSynchronousProxy, fidl::Error> {
2247        let (proxy, server_end) = fidl::endpoints::create_sync_proxy::<DeviceMarker>();
2248        self.connect_channel_to_device(server_end)?;
2249        Ok(proxy)
2250    }
2251
2252    /// Like `connect_to_device`, but accepts a server end.
2253    /// See [`Self::connect_to_device`] for more details.
2254    pub fn connect_channel_to_device(
2255        &self,
2256        server_end: fidl::endpoints::ServerEnd<DeviceMarker>,
2257    ) -> Result<(), fidl::Error> {
2258        self.0.open_member("device", server_end.into_channel())
2259    }
2260
2261    pub fn instance_name(&self) -> &str {
2262        self.0.instance_name()
2263    }
2264}
2265
2266mod internal {
2267    use super::*;
2268
2269    impl fidl::encoding::ResourceTypeMarker for PowerTokenProviderGetTokenResponse {
2270        type Borrowed<'a> = &'a mut Self;
2271        fn take_or_borrow<'a>(
2272            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2273        ) -> Self::Borrowed<'a> {
2274            value
2275        }
2276    }
2277
2278    unsafe impl fidl::encoding::TypeMarker for PowerTokenProviderGetTokenResponse {
2279        type Owned = Self;
2280
2281        #[inline(always)]
2282        fn inline_align(_context: fidl::encoding::Context) -> usize {
2283            4
2284        }
2285
2286        #[inline(always)]
2287        fn inline_size(_context: fidl::encoding::Context) -> usize {
2288            4
2289        }
2290    }
2291
2292    unsafe impl
2293        fidl::encoding::Encode<
2294            PowerTokenProviderGetTokenResponse,
2295            fidl::encoding::DefaultFuchsiaResourceDialect,
2296        > for &mut PowerTokenProviderGetTokenResponse
2297    {
2298        #[inline]
2299        unsafe fn encode(
2300            self,
2301            encoder: &mut fidl::encoding::Encoder<
2302                '_,
2303                fidl::encoding::DefaultFuchsiaResourceDialect,
2304            >,
2305            offset: usize,
2306            _depth: fidl::encoding::Depth,
2307        ) -> fidl::Result<()> {
2308            encoder.debug_check_bounds::<PowerTokenProviderGetTokenResponse>(offset);
2309            // Delegate to tuple encoding.
2310            fidl::encoding::Encode::<
2311                PowerTokenProviderGetTokenResponse,
2312                fidl::encoding::DefaultFuchsiaResourceDialect,
2313            >::encode(
2314                (<fidl::encoding::HandleType<
2315                    fidl::Event,
2316                    { fidl::ObjectType::EVENT.into_raw() },
2317                    2147483648,
2318                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
2319                    &mut self.handle
2320                ),),
2321                encoder,
2322                offset,
2323                _depth,
2324            )
2325        }
2326    }
2327    unsafe impl<
2328        T0: fidl::encoding::Encode<
2329                fidl::encoding::HandleType<
2330                    fidl::Event,
2331                    { fidl::ObjectType::EVENT.into_raw() },
2332                    2147483648,
2333                >,
2334                fidl::encoding::DefaultFuchsiaResourceDialect,
2335            >,
2336    >
2337        fidl::encoding::Encode<
2338            PowerTokenProviderGetTokenResponse,
2339            fidl::encoding::DefaultFuchsiaResourceDialect,
2340        > for (T0,)
2341    {
2342        #[inline]
2343        unsafe fn encode(
2344            self,
2345            encoder: &mut fidl::encoding::Encoder<
2346                '_,
2347                fidl::encoding::DefaultFuchsiaResourceDialect,
2348            >,
2349            offset: usize,
2350            depth: fidl::encoding::Depth,
2351        ) -> fidl::Result<()> {
2352            encoder.debug_check_bounds::<PowerTokenProviderGetTokenResponse>(offset);
2353            // Zero out padding regions. There's no need to apply masks
2354            // because the unmasked parts will be overwritten by fields.
2355            // Write the fields.
2356            self.0.encode(encoder, offset + 0, depth)?;
2357            Ok(())
2358        }
2359    }
2360
2361    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2362        for PowerTokenProviderGetTokenResponse
2363    {
2364        #[inline(always)]
2365        fn new_empty() -> Self {
2366            Self {
2367                handle: fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
2368            }
2369        }
2370
2371        #[inline]
2372        unsafe fn decode(
2373            &mut self,
2374            decoder: &mut fidl::encoding::Decoder<
2375                '_,
2376                fidl::encoding::DefaultFuchsiaResourceDialect,
2377            >,
2378            offset: usize,
2379            _depth: fidl::encoding::Depth,
2380        ) -> fidl::Result<()> {
2381            decoder.debug_check_bounds::<Self>(offset);
2382            // Verify that padding bytes are zero.
2383            fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.handle, decoder, offset + 0, _depth)?;
2384            Ok(())
2385        }
2386    }
2387}