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