Skip to main content

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