Skip to main content

fidl_fuchsia_power_broker/
fidl_fuchsia_power_broker.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_power_broker_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14/// A token that represents the right to add a dependency upon another
15/// element. Should first be registered with Power Broker via
16/// ElementControl.RegisterDependencyToken of the required element.
17pub type DependencyToken = fidl::Event;
18
19pub type LeaseToken = fidl::EventPair;
20
21#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
22pub struct ElementControlOpenStatusChannelRequest {
23    pub status_channel: fidl::endpoints::ServerEnd<StatusMarker>,
24}
25
26impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
27    for ElementControlOpenStatusChannelRequest
28{
29}
30
31#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
32pub struct ElementControlRegisterDependencyTokenRequest {
33    pub token: fidl::Event,
34}
35
36impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
37    for ElementControlRegisterDependencyTokenRequest
38{
39}
40
41#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
42pub struct ElementControlUnregisterDependencyTokenRequest {
43    pub token: fidl::Event,
44}
45
46impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
47    for ElementControlUnregisterDependencyTokenRequest
48{
49}
50
51#[derive(Debug, PartialEq)]
52pub struct ElementInfoProviderGetElementPowerLevelNamesResponse {
53    pub level_names: Vec<ElementPowerLevelNames>,
54}
55
56impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
57    for ElementInfoProviderGetElementPowerLevelNamesResponse
58{
59}
60
61#[derive(Debug, PartialEq)]
62pub struct ElementInfoProviderGetStatusEndpointsResponse {
63    pub endpoints: Vec<ElementStatusEndpoint>,
64}
65
66impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
67    for ElementInfoProviderGetStatusEndpointsResponse
68{
69}
70
71#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
72#[repr(C)]
73pub struct LessorLeaseRequest {
74    /// Power level of this element to be raised to.
75    pub level: u8,
76}
77
78impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for LessorLeaseRequest {}
79
80#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
81pub struct LessorLeaseResponse {
82    /// Channel for actions to be taken on the lease.
83    /// When this channel is closed, the lease will be dropped.
84    pub lease_control: fidl::endpoints::ClientEnd<LeaseControlMarker>,
85}
86
87impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for LessorLeaseResponse {}
88
89#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
90#[repr(C)]
91pub struct StatusWatchPowerLevelResponse {
92    pub current_level: u8,
93}
94
95impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
96    for StatusWatchPowerLevelResponse
97{
98}
99
100/// Passed to Topology.AddElement.
101#[derive(Debug, Default, PartialEq)]
102pub struct ElementSchema {
103    /// Human-readable name for logging and debug purposes.
104    pub element_name: Option<String>,
105    /// The initial current power level of the element.
106    /// To be used with `initial_lease_token`, see note below.
107    pub initial_current_level: Option<u8>,
108    /// All power levels that are valid for this element. Any level not
109    /// specified here will be treated as invalid.
110    ///
111    /// Levels must be listed in ascending order from low to high. Note, levels are enums and their
112    /// integer values do not have an inherent meaning. For example, *theoretically* a binary
113    /// (off, on) could be represented with (0, 1), (1, 0), (17, 19) or any combination of two
114    /// two numbers. (But please use BinaryPowerLevel above!)
115    pub valid_levels: Option<Vec<u8>>,
116    /// List of dependencies for this element's power levels.
117    /// Note: dependencies UPON this element's levels cannot be added here.
118    pub dependencies: Option<Vec<LevelDependency>>,
119    /// REMOVED: 7: level_control_channels, use `element_runner` instead (see below).
120    ///
121    /// DEPRECATED. Use `Topology.Lease` instead.
122    /// Optional. If passed, Leases for this element can be requested via this
123    /// channel.
124    pub lessor_channel: Option<fidl::endpoints::ServerEnd<LessorMarker>>,
125    /// Caller-provided ElementControl channel to be passed to Power Broker.
126    /// When this channel is dropped, the element will be removed from the
127    /// topology. All channels associated with this element will be
128    /// closed and all tokens registered to this element will be
129    /// unregistered.
130    pub element_control: Option<fidl::endpoints::ServerEnd<ElementControlMarker>>,
131    /// The client-end that Power Broker should use to set the power level of this element.
132    /// The server_end of this should be retained and the ElementRunner
133    /// protocol implemented by the element's runner.
134    pub element_runner: Option<fidl::endpoints::ClientEnd<ElementRunnerMarker>>,
135    /// If `initial_lease_token` is set, a lease will be immediately taken at
136    /// `initial_current_level` and all SetLevel calls prior to reaching
137    /// `initial_current_level` will be suppressed. The first SetLevel call
138    /// will be for `initial_current_level`.
139    /// The client should pass here the half of an eventpair to be held by
140    /// Power Broker. The other half of the pair should be retained by the
141    /// client.
142    /// Note: this lease will likely not be SATISFIED when returned, as that
143    /// would require the ElementRunner server to already have received and
144    /// responded to a SetLevel request from Power Broker.
145    /// Clients can listen for `LEASE_SIGNAL_SATISFIED` to know when the
146    /// lease has been `SATISFIED`.
147    pub initial_lease_token: Option<fidl::EventPair>,
148    #[doc(hidden)]
149    pub __source_breaking: fidl::marker::SourceBreaking,
150}
151
152impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ElementSchema {}
153
154/// Status client endpoint and a plaintext name for a specific Power Element. Names are
155/// expected to be unique between elements and persistent across reboots of the same build,
156/// but consistency is not guaranteed between different builds.
157#[derive(Debug, Default, PartialEq)]
158pub struct ElementStatusEndpoint {
159    pub identifier: Option<String>,
160    pub status: Option<fidl::endpoints::ClientEnd<StatusMarker>>,
161    #[doc(hidden)]
162    pub __source_breaking: fidl::marker::SourceBreaking,
163}
164
165impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ElementStatusEndpoint {}
166
167#[derive(Debug, Default, PartialEq)]
168pub struct LeaseDependency {
169    /// Must supply a token registered via the RegisterDependencyToken call of
170    /// the required element's ElementControl protocol.
171    pub requires_token: Option<fidl::Event>,
172    /// Level of the element required. Most clients will want to use this, but
173    /// for forward compatibility, requires_level_by_preference may be used
174    /// instead.
175    pub requires_level: Option<u8>,
176    /// Advanced Options
177    ///
178    /// (Optional) For forward compatibility, the list of levels in decreasing
179    /// preferential order that power broker should attempt to make required for
180    /// this dependency to be satisfied. The first level in list that is a valid
181    /// level will become the required level. If this is set, `requires_level`
182    /// will be ignored.
183    ///
184    /// Platform clients can use this list to keep backwards compatibility with
185    /// dependencies by providing multiple levels that the dependency may have
186    /// implemented in older API levels.
187    pub requires_level_by_preference: Option<Vec<u8>>,
188    #[doc(hidden)]
189    pub __source_breaking: fidl::marker::SourceBreaking,
190}
191
192impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for LeaseDependency {}
193
194/// Passed to Topology.Lease.
195#[derive(Debug, Default, PartialEq)]
196pub struct LeaseSchema {
197    /// The half of an eventpair to be held by the Power Broker. The other
198    /// half of the pair should be retained by the client. See `LeaseToken`
199    /// below for more usage details.
200    pub lease_token: Option<fidl::EventPair>,
201    /// Human-readable name for logging and debug purposes.
202    pub lease_name: Option<String>,
203    /// List of dependencies for this lease.
204    pub dependencies: Option<Vec<LeaseDependency>>,
205    /// (Optional) By default, `Topology.Lease` will wait until the lease is
206    /// `SATISFIED` before returning. If `should_return_pending_lease` is true,
207    /// it will instead return as soon as the lease has been granted by Power
208    /// Broker but it may still be `PENDING`. Clients can listen for
209    /// `LEASE_SIGNAL_SATISFIED` to know when the lease has been `SATISFIED`.
210    pub should_return_pending_lease: Option<bool>,
211    #[doc(hidden)]
212    pub __source_breaking: fidl::marker::SourceBreaking,
213}
214
215impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for LeaseSchema {}
216
217/// Describes a dependency from one power element's level on another power
218/// element's level.
219/// For example if element `PowerElement_A` has a level `PowerLevel_A3` which
220/// depends on an element `PowerElement_B` being at `PowerLevel_B2` then we would
221/// fill out the struct to convey the meaning:
222///   - `dependent_level` = `PowerLevel_A3`
223///   - `requires_token` = `PowerElement_B`
224///   - `requires_level_by_preference` = `[PowerLevel_B2]`
225/// (Note the values above are only *symbolic*, eg. `dependent_level` requires
226/// an integer value, not a string.)
227///
228/// The dependent Element's identity is not specified in this struct and must
229/// be specified as a separate argument in a request or be inferred, perhaps
230/// because a channel is scoped to the dependent element.
231#[derive(Debug, Default, PartialEq)]
232pub struct LevelDependency {
233    /// The power element level that this `LevelDependency` struct declaration
234    /// supports. This is level that has a dependency on
235    /// `requires_level_by_preference`.
236    pub dependent_level: Option<u8>,
237    /// Must supply a token registered via the RegisterDependencyToken call of
238    /// the required element's ElementControl protocol.
239    pub requires_token: Option<fidl::Event>,
240    /// A list of levels in decreasing preferential order that power broker
241    /// should attempt to make required for this dependency to be satisfied.
242    /// The first level in list that is a valid level will become the required
243    /// level.
244    ///
245    /// Platform clients can use this list to keep backwards compatibility with
246    /// dependencies by providing multiple levels that the dependency may have
247    /// implemented in older API levels.
248    pub requires_level_by_preference: Option<Vec<u8>>,
249    /// If true, this dependency will be automatically removed if/when the
250    /// required element is removed.
251    pub remove_with_required_element: Option<bool>,
252    #[doc(hidden)]
253    pub __source_breaking: fidl::marker::SourceBreaking,
254}
255
256impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for LevelDependency {}
257
258#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
259pub struct ElementControlMarker;
260
261impl fidl::endpoints::ProtocolMarker for ElementControlMarker {
262    type Proxy = ElementControlProxy;
263    type RequestStream = ElementControlRequestStream;
264    #[cfg(target_os = "fuchsia")]
265    type SynchronousProxy = ElementControlSynchronousProxy;
266
267    const DEBUG_NAME: &'static str = "(anonymous) ElementControl";
268}
269pub type ElementControlRegisterDependencyTokenResult = Result<(), RegisterDependencyTokenError>;
270pub type ElementControlUnregisterDependencyTokenResult = Result<(), UnregisterDependencyTokenError>;
271pub type ElementControlAddDependencyResult = Result<(), ModifyDependencyError>;
272
273pub trait ElementControlProxyInterface: Send + Sync {
274    fn r#open_status_channel(
275        &self,
276        status_channel: fidl::endpoints::ServerEnd<StatusMarker>,
277    ) -> Result<(), fidl::Error>;
278    type RegisterDependencyTokenResponseFut: std::future::Future<
279            Output = Result<ElementControlRegisterDependencyTokenResult, fidl::Error>,
280        > + Send;
281    fn r#register_dependency_token(
282        &self,
283        token: fidl::Event,
284    ) -> Self::RegisterDependencyTokenResponseFut;
285    type UnregisterDependencyTokenResponseFut: std::future::Future<
286            Output = Result<ElementControlUnregisterDependencyTokenResult, fidl::Error>,
287        > + Send;
288    fn r#unregister_dependency_token(
289        &self,
290        token: fidl::Event,
291    ) -> Self::UnregisterDependencyTokenResponseFut;
292    type AddDependencyResponseFut: std::future::Future<Output = Result<ElementControlAddDependencyResult, fidl::Error>>
293        + Send;
294    fn r#add_dependency(&self, payload: LevelDependency) -> Self::AddDependencyResponseFut;
295}
296#[derive(Debug)]
297#[cfg(target_os = "fuchsia")]
298pub struct ElementControlSynchronousProxy {
299    client: fidl::client::sync::Client,
300}
301
302#[cfg(target_os = "fuchsia")]
303impl fidl::endpoints::SynchronousProxy for ElementControlSynchronousProxy {
304    type Proxy = ElementControlProxy;
305    type Protocol = ElementControlMarker;
306
307    fn from_channel(inner: fidl::Channel) -> Self {
308        Self::new(inner)
309    }
310
311    fn into_channel(self) -> fidl::Channel {
312        self.client.into_channel()
313    }
314
315    fn as_channel(&self) -> &fidl::Channel {
316        self.client.as_channel()
317    }
318}
319
320#[cfg(target_os = "fuchsia")]
321impl ElementControlSynchronousProxy {
322    pub fn new(channel: fidl::Channel) -> Self {
323        Self { client: fidl::client::sync::Client::new(channel) }
324    }
325
326    pub fn into_channel(self) -> fidl::Channel {
327        self.client.into_channel()
328    }
329
330    /// Waits until an event arrives and returns it. It is safe for other
331    /// threads to make concurrent requests while waiting for an event.
332    pub fn wait_for_event(
333        &self,
334        deadline: zx::MonotonicInstant,
335    ) -> Result<ElementControlEvent, fidl::Error> {
336        ElementControlEvent::decode(self.client.wait_for_event::<ElementControlMarker>(deadline)?)
337    }
338
339    /// Register a new Status channel on which Power Broker will send
340    /// read-only updates of the element's current power level. This method
341    /// is intended to allow element owners to give read-only access to the
342    /// element's current power level to clients by opening and transferring
343    /// this channel.
344    pub fn r#open_status_channel(
345        &self,
346        mut status_channel: fidl::endpoints::ServerEnd<StatusMarker>,
347    ) -> Result<(), fidl::Error> {
348        self.client.send::<ElementControlOpenStatusChannelRequest>(
349            (status_channel,),
350            0x4d7772e93dba6300,
351            fidl::encoding::DynamicFlags::FLEXIBLE,
352        )
353    }
354
355    /// Register a token which will permit the bearer to add either a
356    /// dependency upon this element.
357    pub fn r#register_dependency_token(
358        &self,
359        mut token: fidl::Event,
360        ___deadline: zx::MonotonicInstant,
361    ) -> Result<ElementControlRegisterDependencyTokenResult, fidl::Error> {
362        let _response = self.client.send_query::<
363            ElementControlRegisterDependencyTokenRequest,
364            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, RegisterDependencyTokenError>,
365            ElementControlMarker,
366        >(
367            (token,),
368            0x3a5016663d198d61,
369            fidl::encoding::DynamicFlags::FLEXIBLE,
370            ___deadline,
371        )?
372        .into_result::<ElementControlMarker>("register_dependency_token")?;
373        Ok(_response.map(|x| x))
374    }
375
376    /// Unregister a token previously registered via RegisterDependencyToken.
377    pub fn r#unregister_dependency_token(
378        &self,
379        mut token: fidl::Event,
380        ___deadline: zx::MonotonicInstant,
381    ) -> Result<ElementControlUnregisterDependencyTokenResult, fidl::Error> {
382        let _response = self.client.send_query::<
383            ElementControlUnregisterDependencyTokenRequest,
384            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, UnregisterDependencyTokenError>,
385            ElementControlMarker,
386        >(
387            (token,),
388            0x65a31a3661499529,
389            fidl::encoding::DynamicFlags::FLEXIBLE,
390            ___deadline,
391        )?
392        .into_result::<ElementControlMarker>("unregister_dependency_token")?;
393        Ok(_response.map(|x| x))
394    }
395
396    /// Add a new dependency to an existing element.
397    /// If any open leases would incorporate this dependency, the required
398    /// element and any transitively required elements must complete all
399    /// necessary transitions (via ElementRunner.SetLevel calls) before this
400    /// method will return.
401    pub fn r#add_dependency(
402        &self,
403        mut payload: LevelDependency,
404        ___deadline: zx::MonotonicInstant,
405    ) -> Result<ElementControlAddDependencyResult, fidl::Error> {
406        let _response =
407            self.client
408                .send_query::<LevelDependency, fidl::encoding::FlexibleResultType<
409                    fidl::encoding::EmptyStruct,
410                    ModifyDependencyError,
411                >, ElementControlMarker>(
412                    &mut payload,
413                    0x3df1b453e28691f4,
414                    fidl::encoding::DynamicFlags::FLEXIBLE,
415                    ___deadline,
416                )?
417                .into_result::<ElementControlMarker>("add_dependency")?;
418        Ok(_response.map(|x| x))
419    }
420}
421
422#[cfg(target_os = "fuchsia")]
423impl From<ElementControlSynchronousProxy> for zx::NullableHandle {
424    fn from(value: ElementControlSynchronousProxy) -> Self {
425        value.into_channel().into()
426    }
427}
428
429#[cfg(target_os = "fuchsia")]
430impl From<fidl::Channel> for ElementControlSynchronousProxy {
431    fn from(value: fidl::Channel) -> Self {
432        Self::new(value)
433    }
434}
435
436#[cfg(target_os = "fuchsia")]
437impl fidl::endpoints::FromClient for ElementControlSynchronousProxy {
438    type Protocol = ElementControlMarker;
439
440    fn from_client(value: fidl::endpoints::ClientEnd<ElementControlMarker>) -> Self {
441        Self::new(value.into_channel())
442    }
443}
444
445#[derive(Debug, Clone)]
446pub struct ElementControlProxy {
447    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
448}
449
450impl fidl::endpoints::Proxy for ElementControlProxy {
451    type Protocol = ElementControlMarker;
452
453    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
454        Self::new(inner)
455    }
456
457    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
458        self.client.into_channel().map_err(|client| Self { client })
459    }
460
461    fn as_channel(&self) -> &::fidl::AsyncChannel {
462        self.client.as_channel()
463    }
464}
465
466impl ElementControlProxy {
467    /// Create a new Proxy for fuchsia.power.broker/ElementControl.
468    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
469        let protocol_name = <ElementControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
470        Self { client: fidl::client::Client::new(channel, protocol_name) }
471    }
472
473    /// Get a Stream of events from the remote end of the protocol.
474    ///
475    /// # Panics
476    ///
477    /// Panics if the event stream was already taken.
478    pub fn take_event_stream(&self) -> ElementControlEventStream {
479        ElementControlEventStream { event_receiver: self.client.take_event_receiver() }
480    }
481
482    /// Register a new Status channel on which Power Broker will send
483    /// read-only updates of the element's current power level. This method
484    /// is intended to allow element owners to give read-only access to the
485    /// element's current power level to clients by opening and transferring
486    /// this channel.
487    pub fn r#open_status_channel(
488        &self,
489        mut status_channel: fidl::endpoints::ServerEnd<StatusMarker>,
490    ) -> Result<(), fidl::Error> {
491        ElementControlProxyInterface::r#open_status_channel(self, status_channel)
492    }
493
494    /// Register a token which will permit the bearer to add either a
495    /// dependency upon this element.
496    pub fn r#register_dependency_token(
497        &self,
498        mut token: fidl::Event,
499    ) -> fidl::client::QueryResponseFut<
500        ElementControlRegisterDependencyTokenResult,
501        fidl::encoding::DefaultFuchsiaResourceDialect,
502    > {
503        ElementControlProxyInterface::r#register_dependency_token(self, token)
504    }
505
506    /// Unregister a token previously registered via RegisterDependencyToken.
507    pub fn r#unregister_dependency_token(
508        &self,
509        mut token: fidl::Event,
510    ) -> fidl::client::QueryResponseFut<
511        ElementControlUnregisterDependencyTokenResult,
512        fidl::encoding::DefaultFuchsiaResourceDialect,
513    > {
514        ElementControlProxyInterface::r#unregister_dependency_token(self, token)
515    }
516
517    /// Add a new dependency to an existing element.
518    /// If any open leases would incorporate this dependency, the required
519    /// element and any transitively required elements must complete all
520    /// necessary transitions (via ElementRunner.SetLevel calls) before this
521    /// method will return.
522    pub fn r#add_dependency(
523        &self,
524        mut payload: LevelDependency,
525    ) -> fidl::client::QueryResponseFut<
526        ElementControlAddDependencyResult,
527        fidl::encoding::DefaultFuchsiaResourceDialect,
528    > {
529        ElementControlProxyInterface::r#add_dependency(self, payload)
530    }
531}
532
533impl ElementControlProxyInterface for ElementControlProxy {
534    fn r#open_status_channel(
535        &self,
536        mut status_channel: fidl::endpoints::ServerEnd<StatusMarker>,
537    ) -> Result<(), fidl::Error> {
538        self.client.send::<ElementControlOpenStatusChannelRequest>(
539            (status_channel,),
540            0x4d7772e93dba6300,
541            fidl::encoding::DynamicFlags::FLEXIBLE,
542        )
543    }
544
545    type RegisterDependencyTokenResponseFut = fidl::client::QueryResponseFut<
546        ElementControlRegisterDependencyTokenResult,
547        fidl::encoding::DefaultFuchsiaResourceDialect,
548    >;
549    fn r#register_dependency_token(
550        &self,
551        mut token: fidl::Event,
552    ) -> Self::RegisterDependencyTokenResponseFut {
553        fn _decode(
554            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
555        ) -> Result<ElementControlRegisterDependencyTokenResult, fidl::Error> {
556            let _response = fidl::client::decode_transaction_body::<
557                fidl::encoding::FlexibleResultType<
558                    fidl::encoding::EmptyStruct,
559                    RegisterDependencyTokenError,
560                >,
561                fidl::encoding::DefaultFuchsiaResourceDialect,
562                0x3a5016663d198d61,
563            >(_buf?)?
564            .into_result::<ElementControlMarker>("register_dependency_token")?;
565            Ok(_response.map(|x| x))
566        }
567        self.client.send_query_and_decode::<
568            ElementControlRegisterDependencyTokenRequest,
569            ElementControlRegisterDependencyTokenResult,
570        >(
571            (token,),
572            0x3a5016663d198d61,
573            fidl::encoding::DynamicFlags::FLEXIBLE,
574            _decode,
575        )
576    }
577
578    type UnregisterDependencyTokenResponseFut = fidl::client::QueryResponseFut<
579        ElementControlUnregisterDependencyTokenResult,
580        fidl::encoding::DefaultFuchsiaResourceDialect,
581    >;
582    fn r#unregister_dependency_token(
583        &self,
584        mut token: fidl::Event,
585    ) -> Self::UnregisterDependencyTokenResponseFut {
586        fn _decode(
587            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
588        ) -> Result<ElementControlUnregisterDependencyTokenResult, fidl::Error> {
589            let _response = fidl::client::decode_transaction_body::<
590                fidl::encoding::FlexibleResultType<
591                    fidl::encoding::EmptyStruct,
592                    UnregisterDependencyTokenError,
593                >,
594                fidl::encoding::DefaultFuchsiaResourceDialect,
595                0x65a31a3661499529,
596            >(_buf?)?
597            .into_result::<ElementControlMarker>("unregister_dependency_token")?;
598            Ok(_response.map(|x| x))
599        }
600        self.client.send_query_and_decode::<
601            ElementControlUnregisterDependencyTokenRequest,
602            ElementControlUnregisterDependencyTokenResult,
603        >(
604            (token,),
605            0x65a31a3661499529,
606            fidl::encoding::DynamicFlags::FLEXIBLE,
607            _decode,
608        )
609    }
610
611    type AddDependencyResponseFut = fidl::client::QueryResponseFut<
612        ElementControlAddDependencyResult,
613        fidl::encoding::DefaultFuchsiaResourceDialect,
614    >;
615    fn r#add_dependency(&self, mut payload: LevelDependency) -> Self::AddDependencyResponseFut {
616        fn _decode(
617            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
618        ) -> Result<ElementControlAddDependencyResult, fidl::Error> {
619            let _response = fidl::client::decode_transaction_body::<
620                fidl::encoding::FlexibleResultType<
621                    fidl::encoding::EmptyStruct,
622                    ModifyDependencyError,
623                >,
624                fidl::encoding::DefaultFuchsiaResourceDialect,
625                0x3df1b453e28691f4,
626            >(_buf?)?
627            .into_result::<ElementControlMarker>("add_dependency")?;
628            Ok(_response.map(|x| x))
629        }
630        self.client.send_query_and_decode::<LevelDependency, ElementControlAddDependencyResult>(
631            &mut payload,
632            0x3df1b453e28691f4,
633            fidl::encoding::DynamicFlags::FLEXIBLE,
634            _decode,
635        )
636    }
637}
638
639pub struct ElementControlEventStream {
640    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
641}
642
643impl std::marker::Unpin for ElementControlEventStream {}
644
645impl futures::stream::FusedStream for ElementControlEventStream {
646    fn is_terminated(&self) -> bool {
647        self.event_receiver.is_terminated()
648    }
649}
650
651impl futures::Stream for ElementControlEventStream {
652    type Item = Result<ElementControlEvent, fidl::Error>;
653
654    fn poll_next(
655        mut self: std::pin::Pin<&mut Self>,
656        cx: &mut std::task::Context<'_>,
657    ) -> std::task::Poll<Option<Self::Item>> {
658        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
659            &mut self.event_receiver,
660            cx
661        )?) {
662            Some(buf) => std::task::Poll::Ready(Some(ElementControlEvent::decode(buf))),
663            None => std::task::Poll::Ready(None),
664        }
665    }
666}
667
668#[derive(Debug)]
669pub enum ElementControlEvent {
670    #[non_exhaustive]
671    _UnknownEvent {
672        /// Ordinal of the event that was sent.
673        ordinal: u64,
674    },
675}
676
677impl ElementControlEvent {
678    /// Decodes a message buffer as a [`ElementControlEvent`].
679    fn decode(
680        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
681    ) -> Result<ElementControlEvent, fidl::Error> {
682        let (bytes, _handles) = buf.split_mut();
683        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
684        debug_assert_eq!(tx_header.tx_id, 0);
685        match tx_header.ordinal {
686            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
687                Ok(ElementControlEvent::_UnknownEvent { ordinal: tx_header.ordinal })
688            }
689            _ => Err(fidl::Error::UnknownOrdinal {
690                ordinal: tx_header.ordinal,
691                protocol_name:
692                    <ElementControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
693            }),
694        }
695    }
696}
697
698/// A Stream of incoming requests for fuchsia.power.broker/ElementControl.
699pub struct ElementControlRequestStream {
700    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
701    is_terminated: bool,
702}
703
704impl std::marker::Unpin for ElementControlRequestStream {}
705
706impl futures::stream::FusedStream for ElementControlRequestStream {
707    fn is_terminated(&self) -> bool {
708        self.is_terminated
709    }
710}
711
712impl fidl::endpoints::RequestStream for ElementControlRequestStream {
713    type Protocol = ElementControlMarker;
714    type ControlHandle = ElementControlControlHandle;
715
716    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
717        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
718    }
719
720    fn control_handle(&self) -> Self::ControlHandle {
721        ElementControlControlHandle { inner: self.inner.clone() }
722    }
723
724    fn into_inner(
725        self,
726    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
727    {
728        (self.inner, self.is_terminated)
729    }
730
731    fn from_inner(
732        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
733        is_terminated: bool,
734    ) -> Self {
735        Self { inner, is_terminated }
736    }
737}
738
739impl futures::Stream for ElementControlRequestStream {
740    type Item = Result<ElementControlRequest, fidl::Error>;
741
742    fn poll_next(
743        mut self: std::pin::Pin<&mut Self>,
744        cx: &mut std::task::Context<'_>,
745    ) -> std::task::Poll<Option<Self::Item>> {
746        let this = &mut *self;
747        if this.inner.check_shutdown(cx) {
748            this.is_terminated = true;
749            return std::task::Poll::Ready(None);
750        }
751        if this.is_terminated {
752            panic!("polled ElementControlRequestStream after completion");
753        }
754        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
755            |bytes, handles| {
756                match this.inner.channel().read_etc(cx, bytes, handles) {
757                    std::task::Poll::Ready(Ok(())) => {}
758                    std::task::Poll::Pending => return std::task::Poll::Pending,
759                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
760                        this.is_terminated = true;
761                        return std::task::Poll::Ready(None);
762                    }
763                    std::task::Poll::Ready(Err(e)) => {
764                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
765                            e.into(),
766                        ))));
767                    }
768                }
769
770                // A message has been received from the channel
771                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
772
773                std::task::Poll::Ready(Some(match header.ordinal {
774                    0x4d7772e93dba6300 => {
775                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
776                        let mut req = fidl::new_empty!(
777                            ElementControlOpenStatusChannelRequest,
778                            fidl::encoding::DefaultFuchsiaResourceDialect
779                        );
780                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ElementControlOpenStatusChannelRequest>(&header, _body_bytes, handles, &mut req)?;
781                        let control_handle =
782                            ElementControlControlHandle { inner: this.inner.clone() };
783                        Ok(ElementControlRequest::OpenStatusChannel {
784                            status_channel: req.status_channel,
785
786                            control_handle,
787                        })
788                    }
789                    0x3a5016663d198d61 => {
790                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
791                        let mut req = fidl::new_empty!(
792                            ElementControlRegisterDependencyTokenRequest,
793                            fidl::encoding::DefaultFuchsiaResourceDialect
794                        );
795                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ElementControlRegisterDependencyTokenRequest>(&header, _body_bytes, handles, &mut req)?;
796                        let control_handle =
797                            ElementControlControlHandle { inner: this.inner.clone() };
798                        Ok(ElementControlRequest::RegisterDependencyToken {
799                            token: req.token,
800
801                            responder: ElementControlRegisterDependencyTokenResponder {
802                                control_handle: std::mem::ManuallyDrop::new(control_handle),
803                                tx_id: header.tx_id,
804                            },
805                        })
806                    }
807                    0x65a31a3661499529 => {
808                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
809                        let mut req = fidl::new_empty!(
810                            ElementControlUnregisterDependencyTokenRequest,
811                            fidl::encoding::DefaultFuchsiaResourceDialect
812                        );
813                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ElementControlUnregisterDependencyTokenRequest>(&header, _body_bytes, handles, &mut req)?;
814                        let control_handle =
815                            ElementControlControlHandle { inner: this.inner.clone() };
816                        Ok(ElementControlRequest::UnregisterDependencyToken {
817                            token: req.token,
818
819                            responder: ElementControlUnregisterDependencyTokenResponder {
820                                control_handle: std::mem::ManuallyDrop::new(control_handle),
821                                tx_id: header.tx_id,
822                            },
823                        })
824                    }
825                    0x3df1b453e28691f4 => {
826                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
827                        let mut req = fidl::new_empty!(
828                            LevelDependency,
829                            fidl::encoding::DefaultFuchsiaResourceDialect
830                        );
831                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LevelDependency>(&header, _body_bytes, handles, &mut req)?;
832                        let control_handle =
833                            ElementControlControlHandle { inner: this.inner.clone() };
834                        Ok(ElementControlRequest::AddDependency {
835                            payload: req,
836                            responder: ElementControlAddDependencyResponder {
837                                control_handle: std::mem::ManuallyDrop::new(control_handle),
838                                tx_id: header.tx_id,
839                            },
840                        })
841                    }
842                    _ if header.tx_id == 0
843                        && header
844                            .dynamic_flags()
845                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
846                    {
847                        Ok(ElementControlRequest::_UnknownMethod {
848                            ordinal: header.ordinal,
849                            control_handle: ElementControlControlHandle {
850                                inner: this.inner.clone(),
851                            },
852                            method_type: fidl::MethodType::OneWay,
853                        })
854                    }
855                    _ if header
856                        .dynamic_flags()
857                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
858                    {
859                        this.inner.send_framework_err(
860                            fidl::encoding::FrameworkErr::UnknownMethod,
861                            header.tx_id,
862                            header.ordinal,
863                            header.dynamic_flags(),
864                            (bytes, handles),
865                        )?;
866                        Ok(ElementControlRequest::_UnknownMethod {
867                            ordinal: header.ordinal,
868                            control_handle: ElementControlControlHandle {
869                                inner: this.inner.clone(),
870                            },
871                            method_type: fidl::MethodType::TwoWay,
872                        })
873                    }
874                    _ => Err(fidl::Error::UnknownOrdinal {
875                        ordinal: header.ordinal,
876                        protocol_name:
877                            <ElementControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
878                    }),
879                }))
880            },
881        )
882    }
883}
884
885/// Provides element-scoped access to an element previously added via
886/// Topology.AddElement.
887#[derive(Debug)]
888pub enum ElementControlRequest {
889    /// Register a new Status channel on which Power Broker will send
890    /// read-only updates of the element's current power level. This method
891    /// is intended to allow element owners to give read-only access to the
892    /// element's current power level to clients by opening and transferring
893    /// this channel.
894    OpenStatusChannel {
895        status_channel: fidl::endpoints::ServerEnd<StatusMarker>,
896        control_handle: ElementControlControlHandle,
897    },
898    /// Register a token which will permit the bearer to add either a
899    /// dependency upon this element.
900    RegisterDependencyToken {
901        token: fidl::Event,
902        responder: ElementControlRegisterDependencyTokenResponder,
903    },
904    /// Unregister a token previously registered via RegisterDependencyToken.
905    UnregisterDependencyToken {
906        token: fidl::Event,
907        responder: ElementControlUnregisterDependencyTokenResponder,
908    },
909    /// Add a new dependency to an existing element.
910    /// If any open leases would incorporate this dependency, the required
911    /// element and any transitively required elements must complete all
912    /// necessary transitions (via ElementRunner.SetLevel calls) before this
913    /// method will return.
914    AddDependency { payload: LevelDependency, responder: ElementControlAddDependencyResponder },
915    /// An interaction was received which does not match any known method.
916    #[non_exhaustive]
917    _UnknownMethod {
918        /// Ordinal of the method that was called.
919        ordinal: u64,
920        control_handle: ElementControlControlHandle,
921        method_type: fidl::MethodType,
922    },
923}
924
925impl ElementControlRequest {
926    #[allow(irrefutable_let_patterns)]
927    pub fn into_open_status_channel(
928        self,
929    ) -> Option<(fidl::endpoints::ServerEnd<StatusMarker>, ElementControlControlHandle)> {
930        if let ElementControlRequest::OpenStatusChannel { status_channel, control_handle } = self {
931            Some((status_channel, control_handle))
932        } else {
933            None
934        }
935    }
936
937    #[allow(irrefutable_let_patterns)]
938    pub fn into_register_dependency_token(
939        self,
940    ) -> Option<(fidl::Event, ElementControlRegisterDependencyTokenResponder)> {
941        if let ElementControlRequest::RegisterDependencyToken { token, responder } = self {
942            Some((token, responder))
943        } else {
944            None
945        }
946    }
947
948    #[allow(irrefutable_let_patterns)]
949    pub fn into_unregister_dependency_token(
950        self,
951    ) -> Option<(fidl::Event, ElementControlUnregisterDependencyTokenResponder)> {
952        if let ElementControlRequest::UnregisterDependencyToken { token, responder } = self {
953            Some((token, responder))
954        } else {
955            None
956        }
957    }
958
959    #[allow(irrefutable_let_patterns)]
960    pub fn into_add_dependency(
961        self,
962    ) -> Option<(LevelDependency, ElementControlAddDependencyResponder)> {
963        if let ElementControlRequest::AddDependency { payload, responder } = self {
964            Some((payload, responder))
965        } else {
966            None
967        }
968    }
969
970    /// Name of the method defined in FIDL
971    pub fn method_name(&self) -> &'static str {
972        match *self {
973            ElementControlRequest::OpenStatusChannel { .. } => "open_status_channel",
974            ElementControlRequest::RegisterDependencyToken { .. } => "register_dependency_token",
975            ElementControlRequest::UnregisterDependencyToken { .. } => {
976                "unregister_dependency_token"
977            }
978            ElementControlRequest::AddDependency { .. } => "add_dependency",
979            ElementControlRequest::_UnknownMethod {
980                method_type: fidl::MethodType::OneWay, ..
981            } => "unknown one-way method",
982            ElementControlRequest::_UnknownMethod {
983                method_type: fidl::MethodType::TwoWay, ..
984            } => "unknown two-way method",
985        }
986    }
987}
988
989#[derive(Debug, Clone)]
990pub struct ElementControlControlHandle {
991    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
992}
993
994impl ElementControlControlHandle {
995    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
996        self.inner.shutdown_with_epitaph(status.into())
997    }
998}
999
1000impl fidl::endpoints::ControlHandle for ElementControlControlHandle {
1001    fn shutdown(&self) {
1002        self.inner.shutdown()
1003    }
1004
1005    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1006        self.inner.shutdown_with_epitaph(status)
1007    }
1008
1009    fn is_closed(&self) -> bool {
1010        self.inner.channel().is_closed()
1011    }
1012    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1013        self.inner.channel().on_closed()
1014    }
1015
1016    #[cfg(target_os = "fuchsia")]
1017    fn signal_peer(
1018        &self,
1019        clear_mask: zx::Signals,
1020        set_mask: zx::Signals,
1021    ) -> Result<(), zx_status::Status> {
1022        use fidl::Peered;
1023        self.inner.channel().signal_peer(clear_mask, set_mask)
1024    }
1025}
1026
1027impl ElementControlControlHandle {}
1028
1029#[must_use = "FIDL methods require a response to be sent"]
1030#[derive(Debug)]
1031pub struct ElementControlRegisterDependencyTokenResponder {
1032    control_handle: std::mem::ManuallyDrop<ElementControlControlHandle>,
1033    tx_id: u32,
1034}
1035
1036/// Set the the channel to be shutdown (see [`ElementControlControlHandle::shutdown`])
1037/// if the responder is dropped without sending a response, so that the client
1038/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1039impl std::ops::Drop for ElementControlRegisterDependencyTokenResponder {
1040    fn drop(&mut self) {
1041        self.control_handle.shutdown();
1042        // Safety: drops once, never accessed again
1043        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1044    }
1045}
1046
1047impl fidl::endpoints::Responder for ElementControlRegisterDependencyTokenResponder {
1048    type ControlHandle = ElementControlControlHandle;
1049
1050    fn control_handle(&self) -> &ElementControlControlHandle {
1051        &self.control_handle
1052    }
1053
1054    fn drop_without_shutdown(mut self) {
1055        // Safety: drops once, never accessed again due to mem::forget
1056        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1057        // Prevent Drop from running (which would shut down the channel)
1058        std::mem::forget(self);
1059    }
1060}
1061
1062impl ElementControlRegisterDependencyTokenResponder {
1063    /// Sends a response to the FIDL transaction.
1064    ///
1065    /// Sets the channel to shutdown if an error occurs.
1066    pub fn send(
1067        self,
1068        mut result: Result<(), RegisterDependencyTokenError>,
1069    ) -> Result<(), fidl::Error> {
1070        let _result = self.send_raw(result);
1071        if _result.is_err() {
1072            self.control_handle.shutdown();
1073        }
1074        self.drop_without_shutdown();
1075        _result
1076    }
1077
1078    /// Similar to "send" but does not shutdown the channel if an error occurs.
1079    pub fn send_no_shutdown_on_err(
1080        self,
1081        mut result: Result<(), RegisterDependencyTokenError>,
1082    ) -> Result<(), fidl::Error> {
1083        let _result = self.send_raw(result);
1084        self.drop_without_shutdown();
1085        _result
1086    }
1087
1088    fn send_raw(
1089        &self,
1090        mut result: Result<(), RegisterDependencyTokenError>,
1091    ) -> Result<(), fidl::Error> {
1092        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1093            fidl::encoding::EmptyStruct,
1094            RegisterDependencyTokenError,
1095        >>(
1096            fidl::encoding::FlexibleResult::new(result),
1097            self.tx_id,
1098            0x3a5016663d198d61,
1099            fidl::encoding::DynamicFlags::FLEXIBLE,
1100        )
1101    }
1102}
1103
1104#[must_use = "FIDL methods require a response to be sent"]
1105#[derive(Debug)]
1106pub struct ElementControlUnregisterDependencyTokenResponder {
1107    control_handle: std::mem::ManuallyDrop<ElementControlControlHandle>,
1108    tx_id: u32,
1109}
1110
1111/// Set the the channel to be shutdown (see [`ElementControlControlHandle::shutdown`])
1112/// if the responder is dropped without sending a response, so that the client
1113/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1114impl std::ops::Drop for ElementControlUnregisterDependencyTokenResponder {
1115    fn drop(&mut self) {
1116        self.control_handle.shutdown();
1117        // Safety: drops once, never accessed again
1118        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1119    }
1120}
1121
1122impl fidl::endpoints::Responder for ElementControlUnregisterDependencyTokenResponder {
1123    type ControlHandle = ElementControlControlHandle;
1124
1125    fn control_handle(&self) -> &ElementControlControlHandle {
1126        &self.control_handle
1127    }
1128
1129    fn drop_without_shutdown(mut self) {
1130        // Safety: drops once, never accessed again due to mem::forget
1131        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1132        // Prevent Drop from running (which would shut down the channel)
1133        std::mem::forget(self);
1134    }
1135}
1136
1137impl ElementControlUnregisterDependencyTokenResponder {
1138    /// Sends a response to the FIDL transaction.
1139    ///
1140    /// Sets the channel to shutdown if an error occurs.
1141    pub fn send(
1142        self,
1143        mut result: Result<(), UnregisterDependencyTokenError>,
1144    ) -> Result<(), fidl::Error> {
1145        let _result = self.send_raw(result);
1146        if _result.is_err() {
1147            self.control_handle.shutdown();
1148        }
1149        self.drop_without_shutdown();
1150        _result
1151    }
1152
1153    /// Similar to "send" but does not shutdown the channel if an error occurs.
1154    pub fn send_no_shutdown_on_err(
1155        self,
1156        mut result: Result<(), UnregisterDependencyTokenError>,
1157    ) -> Result<(), fidl::Error> {
1158        let _result = self.send_raw(result);
1159        self.drop_without_shutdown();
1160        _result
1161    }
1162
1163    fn send_raw(
1164        &self,
1165        mut result: Result<(), UnregisterDependencyTokenError>,
1166    ) -> Result<(), fidl::Error> {
1167        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1168            fidl::encoding::EmptyStruct,
1169            UnregisterDependencyTokenError,
1170        >>(
1171            fidl::encoding::FlexibleResult::new(result),
1172            self.tx_id,
1173            0x65a31a3661499529,
1174            fidl::encoding::DynamicFlags::FLEXIBLE,
1175        )
1176    }
1177}
1178
1179#[must_use = "FIDL methods require a response to be sent"]
1180#[derive(Debug)]
1181pub struct ElementControlAddDependencyResponder {
1182    control_handle: std::mem::ManuallyDrop<ElementControlControlHandle>,
1183    tx_id: u32,
1184}
1185
1186/// Set the the channel to be shutdown (see [`ElementControlControlHandle::shutdown`])
1187/// if the responder is dropped without sending a response, so that the client
1188/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1189impl std::ops::Drop for ElementControlAddDependencyResponder {
1190    fn drop(&mut self) {
1191        self.control_handle.shutdown();
1192        // Safety: drops once, never accessed again
1193        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1194    }
1195}
1196
1197impl fidl::endpoints::Responder for ElementControlAddDependencyResponder {
1198    type ControlHandle = ElementControlControlHandle;
1199
1200    fn control_handle(&self) -> &ElementControlControlHandle {
1201        &self.control_handle
1202    }
1203
1204    fn drop_without_shutdown(mut self) {
1205        // Safety: drops once, never accessed again due to mem::forget
1206        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1207        // Prevent Drop from running (which would shut down the channel)
1208        std::mem::forget(self);
1209    }
1210}
1211
1212impl ElementControlAddDependencyResponder {
1213    /// Sends a response to the FIDL transaction.
1214    ///
1215    /// Sets the channel to shutdown if an error occurs.
1216    pub fn send(self, mut result: Result<(), ModifyDependencyError>) -> Result<(), fidl::Error> {
1217        let _result = self.send_raw(result);
1218        if _result.is_err() {
1219            self.control_handle.shutdown();
1220        }
1221        self.drop_without_shutdown();
1222        _result
1223    }
1224
1225    /// Similar to "send" but does not shutdown the channel if an error occurs.
1226    pub fn send_no_shutdown_on_err(
1227        self,
1228        mut result: Result<(), ModifyDependencyError>,
1229    ) -> Result<(), fidl::Error> {
1230        let _result = self.send_raw(result);
1231        self.drop_without_shutdown();
1232        _result
1233    }
1234
1235    fn send_raw(&self, mut result: Result<(), ModifyDependencyError>) -> Result<(), fidl::Error> {
1236        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1237            fidl::encoding::EmptyStruct,
1238            ModifyDependencyError,
1239        >>(
1240            fidl::encoding::FlexibleResult::new(result),
1241            self.tx_id,
1242            0x3df1b453e28691f4,
1243            fidl::encoding::DynamicFlags::FLEXIBLE,
1244        )
1245    }
1246}
1247
1248#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1249pub struct ElementInfoProviderMarker;
1250
1251impl fidl::endpoints::ProtocolMarker for ElementInfoProviderMarker {
1252    type Proxy = ElementInfoProviderProxy;
1253    type RequestStream = ElementInfoProviderRequestStream;
1254    #[cfg(target_os = "fuchsia")]
1255    type SynchronousProxy = ElementInfoProviderSynchronousProxy;
1256
1257    const DEBUG_NAME: &'static str = "fuchsia.power.broker.ElementInfoProvider";
1258}
1259impl fidl::endpoints::DiscoverableProtocolMarker for ElementInfoProviderMarker {}
1260pub type ElementInfoProviderGetElementPowerLevelNamesResult =
1261    Result<Vec<ElementPowerLevelNames>, ElementInfoProviderError>;
1262pub type ElementInfoProviderGetStatusEndpointsResult =
1263    Result<Vec<ElementStatusEndpoint>, ElementInfoProviderError>;
1264
1265pub trait ElementInfoProviderProxyInterface: Send + Sync {
1266    type GetElementPowerLevelNamesResponseFut: std::future::Future<
1267            Output = Result<ElementInfoProviderGetElementPowerLevelNamesResult, fidl::Error>,
1268        > + Send;
1269    fn r#get_element_power_level_names(&self) -> Self::GetElementPowerLevelNamesResponseFut;
1270    type GetStatusEndpointsResponseFut: std::future::Future<
1271            Output = Result<ElementInfoProviderGetStatusEndpointsResult, fidl::Error>,
1272        > + Send;
1273    fn r#get_status_endpoints(&self) -> Self::GetStatusEndpointsResponseFut;
1274}
1275#[derive(Debug)]
1276#[cfg(target_os = "fuchsia")]
1277pub struct ElementInfoProviderSynchronousProxy {
1278    client: fidl::client::sync::Client,
1279}
1280
1281#[cfg(target_os = "fuchsia")]
1282impl fidl::endpoints::SynchronousProxy for ElementInfoProviderSynchronousProxy {
1283    type Proxy = ElementInfoProviderProxy;
1284    type Protocol = ElementInfoProviderMarker;
1285
1286    fn from_channel(inner: fidl::Channel) -> Self {
1287        Self::new(inner)
1288    }
1289
1290    fn into_channel(self) -> fidl::Channel {
1291        self.client.into_channel()
1292    }
1293
1294    fn as_channel(&self) -> &fidl::Channel {
1295        self.client.as_channel()
1296    }
1297}
1298
1299#[cfg(target_os = "fuchsia")]
1300impl ElementInfoProviderSynchronousProxy {
1301    pub fn new(channel: fidl::Channel) -> Self {
1302        Self { client: fidl::client::sync::Client::new(channel) }
1303    }
1304
1305    pub fn into_channel(self) -> fidl::Channel {
1306        self.client.into_channel()
1307    }
1308
1309    /// Waits until an event arrives and returns it. It is safe for other
1310    /// threads to make concurrent requests while waiting for an event.
1311    pub fn wait_for_event(
1312        &self,
1313        deadline: zx::MonotonicInstant,
1314    ) -> Result<ElementInfoProviderEvent, fidl::Error> {
1315        ElementInfoProviderEvent::decode(
1316            self.client.wait_for_event::<ElementInfoProviderMarker>(deadline)?,
1317        )
1318    }
1319
1320    /// Returns mappings of PowerLevels to plaintext names for each element managed
1321    /// by a component. Returns an error if no mappings can be returned.
1322    pub fn r#get_element_power_level_names(
1323        &self,
1324        ___deadline: zx::MonotonicInstant,
1325    ) -> Result<ElementInfoProviderGetElementPowerLevelNamesResult, fidl::Error> {
1326        let _response = self
1327            .client
1328            .send_query::<fidl::encoding::EmptyPayload, fidl::encoding::FlexibleResultType<
1329                ElementInfoProviderGetElementPowerLevelNamesResponse,
1330                ElementInfoProviderError,
1331            >, ElementInfoProviderMarker>(
1332                (),
1333                0x298f63881fc9ed49,
1334                fidl::encoding::DynamicFlags::FLEXIBLE,
1335                ___deadline,
1336            )?
1337            .into_result::<ElementInfoProviderMarker>("get_element_power_level_names")?;
1338        Ok(_response.map(|x| x.level_names))
1339    }
1340
1341    /// Returns available Status client endpoints and stable identifiers for each
1342    /// element managed by a component. Returns an error if no endpoints can be
1343    /// returned (i.e. no elements were able to implement the Status channel).
1344    pub fn r#get_status_endpoints(
1345        &self,
1346        ___deadline: zx::MonotonicInstant,
1347    ) -> Result<ElementInfoProviderGetStatusEndpointsResult, fidl::Error> {
1348        let _response = self
1349            .client
1350            .send_query::<fidl::encoding::EmptyPayload, fidl::encoding::FlexibleResultType<
1351                ElementInfoProviderGetStatusEndpointsResponse,
1352                ElementInfoProviderError,
1353            >, ElementInfoProviderMarker>(
1354                (),
1355                0x456f2b6c5bf0777c,
1356                fidl::encoding::DynamicFlags::FLEXIBLE,
1357                ___deadline,
1358            )?
1359            .into_result::<ElementInfoProviderMarker>("get_status_endpoints")?;
1360        Ok(_response.map(|x| x.endpoints))
1361    }
1362}
1363
1364#[cfg(target_os = "fuchsia")]
1365impl From<ElementInfoProviderSynchronousProxy> for zx::NullableHandle {
1366    fn from(value: ElementInfoProviderSynchronousProxy) -> Self {
1367        value.into_channel().into()
1368    }
1369}
1370
1371#[cfg(target_os = "fuchsia")]
1372impl From<fidl::Channel> for ElementInfoProviderSynchronousProxy {
1373    fn from(value: fidl::Channel) -> Self {
1374        Self::new(value)
1375    }
1376}
1377
1378#[cfg(target_os = "fuchsia")]
1379impl fidl::endpoints::FromClient for ElementInfoProviderSynchronousProxy {
1380    type Protocol = ElementInfoProviderMarker;
1381
1382    fn from_client(value: fidl::endpoints::ClientEnd<ElementInfoProviderMarker>) -> Self {
1383        Self::new(value.into_channel())
1384    }
1385}
1386
1387#[derive(Debug, Clone)]
1388pub struct ElementInfoProviderProxy {
1389    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1390}
1391
1392impl fidl::endpoints::Proxy for ElementInfoProviderProxy {
1393    type Protocol = ElementInfoProviderMarker;
1394
1395    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1396        Self::new(inner)
1397    }
1398
1399    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1400        self.client.into_channel().map_err(|client| Self { client })
1401    }
1402
1403    fn as_channel(&self) -> &::fidl::AsyncChannel {
1404        self.client.as_channel()
1405    }
1406}
1407
1408impl ElementInfoProviderProxy {
1409    /// Create a new Proxy for fuchsia.power.broker/ElementInfoProvider.
1410    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1411        let protocol_name =
1412            <ElementInfoProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1413        Self { client: fidl::client::Client::new(channel, protocol_name) }
1414    }
1415
1416    /// Get a Stream of events from the remote end of the protocol.
1417    ///
1418    /// # Panics
1419    ///
1420    /// Panics if the event stream was already taken.
1421    pub fn take_event_stream(&self) -> ElementInfoProviderEventStream {
1422        ElementInfoProviderEventStream { event_receiver: self.client.take_event_receiver() }
1423    }
1424
1425    /// Returns mappings of PowerLevels to plaintext names for each element managed
1426    /// by a component. Returns an error if no mappings can be returned.
1427    pub fn r#get_element_power_level_names(
1428        &self,
1429    ) -> fidl::client::QueryResponseFut<
1430        ElementInfoProviderGetElementPowerLevelNamesResult,
1431        fidl::encoding::DefaultFuchsiaResourceDialect,
1432    > {
1433        ElementInfoProviderProxyInterface::r#get_element_power_level_names(self)
1434    }
1435
1436    /// Returns available Status client endpoints and stable identifiers for each
1437    /// element managed by a component. Returns an error if no endpoints can be
1438    /// returned (i.e. no elements were able to implement the Status channel).
1439    pub fn r#get_status_endpoints(
1440        &self,
1441    ) -> fidl::client::QueryResponseFut<
1442        ElementInfoProviderGetStatusEndpointsResult,
1443        fidl::encoding::DefaultFuchsiaResourceDialect,
1444    > {
1445        ElementInfoProviderProxyInterface::r#get_status_endpoints(self)
1446    }
1447}
1448
1449impl ElementInfoProviderProxyInterface for ElementInfoProviderProxy {
1450    type GetElementPowerLevelNamesResponseFut = fidl::client::QueryResponseFut<
1451        ElementInfoProviderGetElementPowerLevelNamesResult,
1452        fidl::encoding::DefaultFuchsiaResourceDialect,
1453    >;
1454    fn r#get_element_power_level_names(&self) -> Self::GetElementPowerLevelNamesResponseFut {
1455        fn _decode(
1456            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1457        ) -> Result<ElementInfoProviderGetElementPowerLevelNamesResult, fidl::Error> {
1458            let _response = fidl::client::decode_transaction_body::<
1459                fidl::encoding::FlexibleResultType<
1460                    ElementInfoProviderGetElementPowerLevelNamesResponse,
1461                    ElementInfoProviderError,
1462                >,
1463                fidl::encoding::DefaultFuchsiaResourceDialect,
1464                0x298f63881fc9ed49,
1465            >(_buf?)?
1466            .into_result::<ElementInfoProviderMarker>("get_element_power_level_names")?;
1467            Ok(_response.map(|x| x.level_names))
1468        }
1469        self.client.send_query_and_decode::<
1470            fidl::encoding::EmptyPayload,
1471            ElementInfoProviderGetElementPowerLevelNamesResult,
1472        >(
1473            (),
1474            0x298f63881fc9ed49,
1475            fidl::encoding::DynamicFlags::FLEXIBLE,
1476            _decode,
1477        )
1478    }
1479
1480    type GetStatusEndpointsResponseFut = fidl::client::QueryResponseFut<
1481        ElementInfoProviderGetStatusEndpointsResult,
1482        fidl::encoding::DefaultFuchsiaResourceDialect,
1483    >;
1484    fn r#get_status_endpoints(&self) -> Self::GetStatusEndpointsResponseFut {
1485        fn _decode(
1486            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1487        ) -> Result<ElementInfoProviderGetStatusEndpointsResult, fidl::Error> {
1488            let _response = fidl::client::decode_transaction_body::<
1489                fidl::encoding::FlexibleResultType<
1490                    ElementInfoProviderGetStatusEndpointsResponse,
1491                    ElementInfoProviderError,
1492                >,
1493                fidl::encoding::DefaultFuchsiaResourceDialect,
1494                0x456f2b6c5bf0777c,
1495            >(_buf?)?
1496            .into_result::<ElementInfoProviderMarker>("get_status_endpoints")?;
1497            Ok(_response.map(|x| x.endpoints))
1498        }
1499        self.client.send_query_and_decode::<
1500            fidl::encoding::EmptyPayload,
1501            ElementInfoProviderGetStatusEndpointsResult,
1502        >(
1503            (),
1504            0x456f2b6c5bf0777c,
1505            fidl::encoding::DynamicFlags::FLEXIBLE,
1506            _decode,
1507        )
1508    }
1509}
1510
1511pub struct ElementInfoProviderEventStream {
1512    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1513}
1514
1515impl std::marker::Unpin for ElementInfoProviderEventStream {}
1516
1517impl futures::stream::FusedStream for ElementInfoProviderEventStream {
1518    fn is_terminated(&self) -> bool {
1519        self.event_receiver.is_terminated()
1520    }
1521}
1522
1523impl futures::Stream for ElementInfoProviderEventStream {
1524    type Item = Result<ElementInfoProviderEvent, fidl::Error>;
1525
1526    fn poll_next(
1527        mut self: std::pin::Pin<&mut Self>,
1528        cx: &mut std::task::Context<'_>,
1529    ) -> std::task::Poll<Option<Self::Item>> {
1530        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1531            &mut self.event_receiver,
1532            cx
1533        )?) {
1534            Some(buf) => std::task::Poll::Ready(Some(ElementInfoProviderEvent::decode(buf))),
1535            None => std::task::Poll::Ready(None),
1536        }
1537    }
1538}
1539
1540#[derive(Debug)]
1541pub enum ElementInfoProviderEvent {
1542    #[non_exhaustive]
1543    _UnknownEvent {
1544        /// Ordinal of the event that was sent.
1545        ordinal: u64,
1546    },
1547}
1548
1549impl ElementInfoProviderEvent {
1550    /// Decodes a message buffer as a [`ElementInfoProviderEvent`].
1551    fn decode(
1552        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1553    ) -> Result<ElementInfoProviderEvent, fidl::Error> {
1554        let (bytes, _handles) = buf.split_mut();
1555        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1556        debug_assert_eq!(tx_header.tx_id, 0);
1557        match tx_header.ordinal {
1558            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1559                Ok(ElementInfoProviderEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1560            }
1561            _ => Err(fidl::Error::UnknownOrdinal {
1562                ordinal: tx_header.ordinal,
1563                protocol_name:
1564                    <ElementInfoProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1565            }),
1566        }
1567    }
1568}
1569
1570/// A Stream of incoming requests for fuchsia.power.broker/ElementInfoProvider.
1571pub struct ElementInfoProviderRequestStream {
1572    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1573    is_terminated: bool,
1574}
1575
1576impl std::marker::Unpin for ElementInfoProviderRequestStream {}
1577
1578impl futures::stream::FusedStream for ElementInfoProviderRequestStream {
1579    fn is_terminated(&self) -> bool {
1580        self.is_terminated
1581    }
1582}
1583
1584impl fidl::endpoints::RequestStream for ElementInfoProviderRequestStream {
1585    type Protocol = ElementInfoProviderMarker;
1586    type ControlHandle = ElementInfoProviderControlHandle;
1587
1588    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1589        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1590    }
1591
1592    fn control_handle(&self) -> Self::ControlHandle {
1593        ElementInfoProviderControlHandle { inner: self.inner.clone() }
1594    }
1595
1596    fn into_inner(
1597        self,
1598    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1599    {
1600        (self.inner, self.is_terminated)
1601    }
1602
1603    fn from_inner(
1604        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1605        is_terminated: bool,
1606    ) -> Self {
1607        Self { inner, is_terminated }
1608    }
1609}
1610
1611impl futures::Stream for ElementInfoProviderRequestStream {
1612    type Item = Result<ElementInfoProviderRequest, fidl::Error>;
1613
1614    fn poll_next(
1615        mut self: std::pin::Pin<&mut Self>,
1616        cx: &mut std::task::Context<'_>,
1617    ) -> std::task::Poll<Option<Self::Item>> {
1618        let this = &mut *self;
1619        if this.inner.check_shutdown(cx) {
1620            this.is_terminated = true;
1621            return std::task::Poll::Ready(None);
1622        }
1623        if this.is_terminated {
1624            panic!("polled ElementInfoProviderRequestStream after completion");
1625        }
1626        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1627            |bytes, handles| {
1628                match this.inner.channel().read_etc(cx, bytes, handles) {
1629                    std::task::Poll::Ready(Ok(())) => {}
1630                    std::task::Poll::Pending => return std::task::Poll::Pending,
1631                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1632                        this.is_terminated = true;
1633                        return std::task::Poll::Ready(None);
1634                    }
1635                    std::task::Poll::Ready(Err(e)) => {
1636                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1637                            e.into(),
1638                        ))));
1639                    }
1640                }
1641
1642                // A message has been received from the channel
1643                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1644
1645                std::task::Poll::Ready(Some(match header.ordinal {
1646                0x298f63881fc9ed49 => {
1647                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1648                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
1649                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1650                    let control_handle = ElementInfoProviderControlHandle {
1651                        inner: this.inner.clone(),
1652                    };
1653                    Ok(ElementInfoProviderRequest::GetElementPowerLevelNames {
1654                        responder: ElementInfoProviderGetElementPowerLevelNamesResponder {
1655                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1656                            tx_id: header.tx_id,
1657                        },
1658                    })
1659                }
1660                0x456f2b6c5bf0777c => {
1661                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1662                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
1663                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1664                    let control_handle = ElementInfoProviderControlHandle {
1665                        inner: this.inner.clone(),
1666                    };
1667                    Ok(ElementInfoProviderRequest::GetStatusEndpoints {
1668                        responder: ElementInfoProviderGetStatusEndpointsResponder {
1669                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1670                            tx_id: header.tx_id,
1671                        },
1672                    })
1673                }
1674                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1675                    Ok(ElementInfoProviderRequest::_UnknownMethod {
1676                        ordinal: header.ordinal,
1677                        control_handle: ElementInfoProviderControlHandle { inner: this.inner.clone() },
1678                        method_type: fidl::MethodType::OneWay,
1679                    })
1680                }
1681                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1682                    this.inner.send_framework_err(
1683                        fidl::encoding::FrameworkErr::UnknownMethod,
1684                        header.tx_id,
1685                        header.ordinal,
1686                        header.dynamic_flags(),
1687                        (bytes, handles),
1688                    )?;
1689                    Ok(ElementInfoProviderRequest::_UnknownMethod {
1690                        ordinal: header.ordinal,
1691                        control_handle: ElementInfoProviderControlHandle { inner: this.inner.clone() },
1692                        method_type: fidl::MethodType::TwoWay,
1693                    })
1694                }
1695                _ => Err(fidl::Error::UnknownOrdinal {
1696                    ordinal: header.ordinal,
1697                    protocol_name: <ElementInfoProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1698                }),
1699            }))
1700            },
1701        )
1702    }
1703}
1704
1705/// Provides an interface to retrieve information about PowerElements managed by a component.
1706#[derive(Debug)]
1707pub enum ElementInfoProviderRequest {
1708    /// Returns mappings of PowerLevels to plaintext names for each element managed
1709    /// by a component. Returns an error if no mappings can be returned.
1710    GetElementPowerLevelNames { responder: ElementInfoProviderGetElementPowerLevelNamesResponder },
1711    /// Returns available Status client endpoints and stable identifiers for each
1712    /// element managed by a component. Returns an error if no endpoints can be
1713    /// returned (i.e. no elements were able to implement the Status channel).
1714    GetStatusEndpoints { responder: ElementInfoProviderGetStatusEndpointsResponder },
1715    /// An interaction was received which does not match any known method.
1716    #[non_exhaustive]
1717    _UnknownMethod {
1718        /// Ordinal of the method that was called.
1719        ordinal: u64,
1720        control_handle: ElementInfoProviderControlHandle,
1721        method_type: fidl::MethodType,
1722    },
1723}
1724
1725impl ElementInfoProviderRequest {
1726    #[allow(irrefutable_let_patterns)]
1727    pub fn into_get_element_power_level_names(
1728        self,
1729    ) -> Option<(ElementInfoProviderGetElementPowerLevelNamesResponder)> {
1730        if let ElementInfoProviderRequest::GetElementPowerLevelNames { responder } = self {
1731            Some((responder))
1732        } else {
1733            None
1734        }
1735    }
1736
1737    #[allow(irrefutable_let_patterns)]
1738    pub fn into_get_status_endpoints(
1739        self,
1740    ) -> Option<(ElementInfoProviderGetStatusEndpointsResponder)> {
1741        if let ElementInfoProviderRequest::GetStatusEndpoints { responder } = self {
1742            Some((responder))
1743        } else {
1744            None
1745        }
1746    }
1747
1748    /// Name of the method defined in FIDL
1749    pub fn method_name(&self) -> &'static str {
1750        match *self {
1751            ElementInfoProviderRequest::GetElementPowerLevelNames { .. } => {
1752                "get_element_power_level_names"
1753            }
1754            ElementInfoProviderRequest::GetStatusEndpoints { .. } => "get_status_endpoints",
1755            ElementInfoProviderRequest::_UnknownMethod {
1756                method_type: fidl::MethodType::OneWay,
1757                ..
1758            } => "unknown one-way method",
1759            ElementInfoProviderRequest::_UnknownMethod {
1760                method_type: fidl::MethodType::TwoWay,
1761                ..
1762            } => "unknown two-way method",
1763        }
1764    }
1765}
1766
1767#[derive(Debug, Clone)]
1768pub struct ElementInfoProviderControlHandle {
1769    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1770}
1771
1772impl ElementInfoProviderControlHandle {
1773    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1774        self.inner.shutdown_with_epitaph(status.into())
1775    }
1776}
1777
1778impl fidl::endpoints::ControlHandle for ElementInfoProviderControlHandle {
1779    fn shutdown(&self) {
1780        self.inner.shutdown()
1781    }
1782
1783    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1784        self.inner.shutdown_with_epitaph(status)
1785    }
1786
1787    fn is_closed(&self) -> bool {
1788        self.inner.channel().is_closed()
1789    }
1790    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1791        self.inner.channel().on_closed()
1792    }
1793
1794    #[cfg(target_os = "fuchsia")]
1795    fn signal_peer(
1796        &self,
1797        clear_mask: zx::Signals,
1798        set_mask: zx::Signals,
1799    ) -> Result<(), zx_status::Status> {
1800        use fidl::Peered;
1801        self.inner.channel().signal_peer(clear_mask, set_mask)
1802    }
1803}
1804
1805impl ElementInfoProviderControlHandle {}
1806
1807#[must_use = "FIDL methods require a response to be sent"]
1808#[derive(Debug)]
1809pub struct ElementInfoProviderGetElementPowerLevelNamesResponder {
1810    control_handle: std::mem::ManuallyDrop<ElementInfoProviderControlHandle>,
1811    tx_id: u32,
1812}
1813
1814/// Set the the channel to be shutdown (see [`ElementInfoProviderControlHandle::shutdown`])
1815/// if the responder is dropped without sending a response, so that the client
1816/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1817impl std::ops::Drop for ElementInfoProviderGetElementPowerLevelNamesResponder {
1818    fn drop(&mut self) {
1819        self.control_handle.shutdown();
1820        // Safety: drops once, never accessed again
1821        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1822    }
1823}
1824
1825impl fidl::endpoints::Responder for ElementInfoProviderGetElementPowerLevelNamesResponder {
1826    type ControlHandle = ElementInfoProviderControlHandle;
1827
1828    fn control_handle(&self) -> &ElementInfoProviderControlHandle {
1829        &self.control_handle
1830    }
1831
1832    fn drop_without_shutdown(mut self) {
1833        // Safety: drops once, never accessed again due to mem::forget
1834        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1835        // Prevent Drop from running (which would shut down the channel)
1836        std::mem::forget(self);
1837    }
1838}
1839
1840impl ElementInfoProviderGetElementPowerLevelNamesResponder {
1841    /// Sends a response to the FIDL transaction.
1842    ///
1843    /// Sets the channel to shutdown if an error occurs.
1844    pub fn send(
1845        self,
1846        mut result: Result<&[ElementPowerLevelNames], ElementInfoProviderError>,
1847    ) -> Result<(), fidl::Error> {
1848        let _result = self.send_raw(result);
1849        if _result.is_err() {
1850            self.control_handle.shutdown();
1851        }
1852        self.drop_without_shutdown();
1853        _result
1854    }
1855
1856    /// Similar to "send" but does not shutdown the channel if an error occurs.
1857    pub fn send_no_shutdown_on_err(
1858        self,
1859        mut result: Result<&[ElementPowerLevelNames], ElementInfoProviderError>,
1860    ) -> Result<(), fidl::Error> {
1861        let _result = self.send_raw(result);
1862        self.drop_without_shutdown();
1863        _result
1864    }
1865
1866    fn send_raw(
1867        &self,
1868        mut result: Result<&[ElementPowerLevelNames], ElementInfoProviderError>,
1869    ) -> Result<(), fidl::Error> {
1870        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1871            ElementInfoProviderGetElementPowerLevelNamesResponse,
1872            ElementInfoProviderError,
1873        >>(
1874            fidl::encoding::FlexibleResult::new(result.map(|level_names| (level_names,))),
1875            self.tx_id,
1876            0x298f63881fc9ed49,
1877            fidl::encoding::DynamicFlags::FLEXIBLE,
1878        )
1879    }
1880}
1881
1882#[must_use = "FIDL methods require a response to be sent"]
1883#[derive(Debug)]
1884pub struct ElementInfoProviderGetStatusEndpointsResponder {
1885    control_handle: std::mem::ManuallyDrop<ElementInfoProviderControlHandle>,
1886    tx_id: u32,
1887}
1888
1889/// Set the the channel to be shutdown (see [`ElementInfoProviderControlHandle::shutdown`])
1890/// if the responder is dropped without sending a response, so that the client
1891/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1892impl std::ops::Drop for ElementInfoProviderGetStatusEndpointsResponder {
1893    fn drop(&mut self) {
1894        self.control_handle.shutdown();
1895        // Safety: drops once, never accessed again
1896        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1897    }
1898}
1899
1900impl fidl::endpoints::Responder for ElementInfoProviderGetStatusEndpointsResponder {
1901    type ControlHandle = ElementInfoProviderControlHandle;
1902
1903    fn control_handle(&self) -> &ElementInfoProviderControlHandle {
1904        &self.control_handle
1905    }
1906
1907    fn drop_without_shutdown(mut self) {
1908        // Safety: drops once, never accessed again due to mem::forget
1909        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1910        // Prevent Drop from running (which would shut down the channel)
1911        std::mem::forget(self);
1912    }
1913}
1914
1915impl ElementInfoProviderGetStatusEndpointsResponder {
1916    /// Sends a response to the FIDL transaction.
1917    ///
1918    /// Sets the channel to shutdown if an error occurs.
1919    pub fn send(
1920        self,
1921        mut result: Result<Vec<ElementStatusEndpoint>, ElementInfoProviderError>,
1922    ) -> Result<(), fidl::Error> {
1923        let _result = self.send_raw(result);
1924        if _result.is_err() {
1925            self.control_handle.shutdown();
1926        }
1927        self.drop_without_shutdown();
1928        _result
1929    }
1930
1931    /// Similar to "send" but does not shutdown the channel if an error occurs.
1932    pub fn send_no_shutdown_on_err(
1933        self,
1934        mut result: Result<Vec<ElementStatusEndpoint>, ElementInfoProviderError>,
1935    ) -> Result<(), fidl::Error> {
1936        let _result = self.send_raw(result);
1937        self.drop_without_shutdown();
1938        _result
1939    }
1940
1941    fn send_raw(
1942        &self,
1943        mut result: Result<Vec<ElementStatusEndpoint>, ElementInfoProviderError>,
1944    ) -> Result<(), fidl::Error> {
1945        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1946            ElementInfoProviderGetStatusEndpointsResponse,
1947            ElementInfoProviderError,
1948        >>(
1949            fidl::encoding::FlexibleResult::new(
1950                result.as_mut().map_err(|e| *e).map(|endpoints| (endpoints.as_mut_slice(),)),
1951            ),
1952            self.tx_id,
1953            0x456f2b6c5bf0777c,
1954            fidl::encoding::DynamicFlags::FLEXIBLE,
1955        )
1956    }
1957}
1958
1959#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1960pub struct ElementRunnerMarker;
1961
1962impl fidl::endpoints::ProtocolMarker for ElementRunnerMarker {
1963    type Proxy = ElementRunnerProxy;
1964    type RequestStream = ElementRunnerRequestStream;
1965    #[cfg(target_os = "fuchsia")]
1966    type SynchronousProxy = ElementRunnerSynchronousProxy;
1967
1968    const DEBUG_NAME: &'static str = "fuchsia.power.broker.ElementRunner";
1969}
1970impl fidl::endpoints::DiscoverableProtocolMarker for ElementRunnerMarker {}
1971
1972pub trait ElementRunnerProxyInterface: Send + Sync {
1973    type SetLevelResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
1974    fn r#set_level(&self, level: u8) -> Self::SetLevelResponseFut;
1975}
1976#[derive(Debug)]
1977#[cfg(target_os = "fuchsia")]
1978pub struct ElementRunnerSynchronousProxy {
1979    client: fidl::client::sync::Client,
1980}
1981
1982#[cfg(target_os = "fuchsia")]
1983impl fidl::endpoints::SynchronousProxy for ElementRunnerSynchronousProxy {
1984    type Proxy = ElementRunnerProxy;
1985    type Protocol = ElementRunnerMarker;
1986
1987    fn from_channel(inner: fidl::Channel) -> Self {
1988        Self::new(inner)
1989    }
1990
1991    fn into_channel(self) -> fidl::Channel {
1992        self.client.into_channel()
1993    }
1994
1995    fn as_channel(&self) -> &fidl::Channel {
1996        self.client.as_channel()
1997    }
1998}
1999
2000#[cfg(target_os = "fuchsia")]
2001impl ElementRunnerSynchronousProxy {
2002    pub fn new(channel: fidl::Channel) -> Self {
2003        Self { client: fidl::client::sync::Client::new(channel) }
2004    }
2005
2006    pub fn into_channel(self) -> fidl::Channel {
2007        self.client.into_channel()
2008    }
2009
2010    /// Waits until an event arrives and returns it. It is safe for other
2011    /// threads to make concurrent requests while waiting for an event.
2012    pub fn wait_for_event(
2013        &self,
2014        deadline: zx::MonotonicInstant,
2015    ) -> Result<ElementRunnerEvent, fidl::Error> {
2016        ElementRunnerEvent::decode(self.client.wait_for_event::<ElementRunnerMarker>(deadline)?)
2017    }
2018
2019    /// Sets the level of the power element.
2020    ///
2021    /// The server blocks while making the level transition. It returns
2022    /// once the transition to the new required level is complete.
2023    /// If the element cannot transition to the new required level and
2024    /// it cannot retry, the channel will be closed.
2025    pub fn r#set_level(
2026        &self,
2027        mut level: u8,
2028        ___deadline: zx::MonotonicInstant,
2029    ) -> Result<(), fidl::Error> {
2030        let _response = self.client.send_query::<
2031            ElementRunnerSetLevelRequest,
2032            fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
2033            ElementRunnerMarker,
2034        >(
2035            (level,),
2036            0x11a93092b228f0b,
2037            fidl::encoding::DynamicFlags::FLEXIBLE,
2038            ___deadline,
2039        )?
2040        .into_result::<ElementRunnerMarker>("set_level")?;
2041        Ok(_response)
2042    }
2043}
2044
2045#[cfg(target_os = "fuchsia")]
2046impl From<ElementRunnerSynchronousProxy> for zx::NullableHandle {
2047    fn from(value: ElementRunnerSynchronousProxy) -> Self {
2048        value.into_channel().into()
2049    }
2050}
2051
2052#[cfg(target_os = "fuchsia")]
2053impl From<fidl::Channel> for ElementRunnerSynchronousProxy {
2054    fn from(value: fidl::Channel) -> Self {
2055        Self::new(value)
2056    }
2057}
2058
2059#[cfg(target_os = "fuchsia")]
2060impl fidl::endpoints::FromClient for ElementRunnerSynchronousProxy {
2061    type Protocol = ElementRunnerMarker;
2062
2063    fn from_client(value: fidl::endpoints::ClientEnd<ElementRunnerMarker>) -> Self {
2064        Self::new(value.into_channel())
2065    }
2066}
2067
2068#[derive(Debug, Clone)]
2069pub struct ElementRunnerProxy {
2070    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2071}
2072
2073impl fidl::endpoints::Proxy for ElementRunnerProxy {
2074    type Protocol = ElementRunnerMarker;
2075
2076    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2077        Self::new(inner)
2078    }
2079
2080    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2081        self.client.into_channel().map_err(|client| Self { client })
2082    }
2083
2084    fn as_channel(&self) -> &::fidl::AsyncChannel {
2085        self.client.as_channel()
2086    }
2087}
2088
2089impl ElementRunnerProxy {
2090    /// Create a new Proxy for fuchsia.power.broker/ElementRunner.
2091    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2092        let protocol_name = <ElementRunnerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2093        Self { client: fidl::client::Client::new(channel, protocol_name) }
2094    }
2095
2096    /// Get a Stream of events from the remote end of the protocol.
2097    ///
2098    /// # Panics
2099    ///
2100    /// Panics if the event stream was already taken.
2101    pub fn take_event_stream(&self) -> ElementRunnerEventStream {
2102        ElementRunnerEventStream { event_receiver: self.client.take_event_receiver() }
2103    }
2104
2105    /// Sets the level of the power element.
2106    ///
2107    /// The server blocks while making the level transition. It returns
2108    /// once the transition to the new required level is complete.
2109    /// If the element cannot transition to the new required level and
2110    /// it cannot retry, the channel will be closed.
2111    pub fn r#set_level(
2112        &self,
2113        mut level: u8,
2114    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
2115        ElementRunnerProxyInterface::r#set_level(self, level)
2116    }
2117}
2118
2119impl ElementRunnerProxyInterface for ElementRunnerProxy {
2120    type SetLevelResponseFut =
2121        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
2122    fn r#set_level(&self, mut level: u8) -> Self::SetLevelResponseFut {
2123        fn _decode(
2124            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2125        ) -> Result<(), fidl::Error> {
2126            let _response = fidl::client::decode_transaction_body::<
2127                fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
2128                fidl::encoding::DefaultFuchsiaResourceDialect,
2129                0x11a93092b228f0b,
2130            >(_buf?)?
2131            .into_result::<ElementRunnerMarker>("set_level")?;
2132            Ok(_response)
2133        }
2134        self.client.send_query_and_decode::<ElementRunnerSetLevelRequest, ()>(
2135            (level,),
2136            0x11a93092b228f0b,
2137            fidl::encoding::DynamicFlags::FLEXIBLE,
2138            _decode,
2139        )
2140    }
2141}
2142
2143pub struct ElementRunnerEventStream {
2144    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2145}
2146
2147impl std::marker::Unpin for ElementRunnerEventStream {}
2148
2149impl futures::stream::FusedStream for ElementRunnerEventStream {
2150    fn is_terminated(&self) -> bool {
2151        self.event_receiver.is_terminated()
2152    }
2153}
2154
2155impl futures::Stream for ElementRunnerEventStream {
2156    type Item = Result<ElementRunnerEvent, fidl::Error>;
2157
2158    fn poll_next(
2159        mut self: std::pin::Pin<&mut Self>,
2160        cx: &mut std::task::Context<'_>,
2161    ) -> std::task::Poll<Option<Self::Item>> {
2162        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2163            &mut self.event_receiver,
2164            cx
2165        )?) {
2166            Some(buf) => std::task::Poll::Ready(Some(ElementRunnerEvent::decode(buf))),
2167            None => std::task::Poll::Ready(None),
2168        }
2169    }
2170}
2171
2172#[derive(Debug)]
2173pub enum ElementRunnerEvent {
2174    #[non_exhaustive]
2175    _UnknownEvent {
2176        /// Ordinal of the event that was sent.
2177        ordinal: u64,
2178    },
2179}
2180
2181impl ElementRunnerEvent {
2182    /// Decodes a message buffer as a [`ElementRunnerEvent`].
2183    fn decode(
2184        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2185    ) -> Result<ElementRunnerEvent, fidl::Error> {
2186        let (bytes, _handles) = buf.split_mut();
2187        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2188        debug_assert_eq!(tx_header.tx_id, 0);
2189        match tx_header.ordinal {
2190            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2191                Ok(ElementRunnerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
2192            }
2193            _ => Err(fidl::Error::UnknownOrdinal {
2194                ordinal: tx_header.ordinal,
2195                protocol_name: <ElementRunnerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2196            }),
2197        }
2198    }
2199}
2200
2201/// A Stream of incoming requests for fuchsia.power.broker/ElementRunner.
2202pub struct ElementRunnerRequestStream {
2203    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2204    is_terminated: bool,
2205}
2206
2207impl std::marker::Unpin for ElementRunnerRequestStream {}
2208
2209impl futures::stream::FusedStream for ElementRunnerRequestStream {
2210    fn is_terminated(&self) -> bool {
2211        self.is_terminated
2212    }
2213}
2214
2215impl fidl::endpoints::RequestStream for ElementRunnerRequestStream {
2216    type Protocol = ElementRunnerMarker;
2217    type ControlHandle = ElementRunnerControlHandle;
2218
2219    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2220        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2221    }
2222
2223    fn control_handle(&self) -> Self::ControlHandle {
2224        ElementRunnerControlHandle { inner: self.inner.clone() }
2225    }
2226
2227    fn into_inner(
2228        self,
2229    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2230    {
2231        (self.inner, self.is_terminated)
2232    }
2233
2234    fn from_inner(
2235        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2236        is_terminated: bool,
2237    ) -> Self {
2238        Self { inner, is_terminated }
2239    }
2240}
2241
2242impl futures::Stream for ElementRunnerRequestStream {
2243    type Item = Result<ElementRunnerRequest, fidl::Error>;
2244
2245    fn poll_next(
2246        mut self: std::pin::Pin<&mut Self>,
2247        cx: &mut std::task::Context<'_>,
2248    ) -> std::task::Poll<Option<Self::Item>> {
2249        let this = &mut *self;
2250        if this.inner.check_shutdown(cx) {
2251            this.is_terminated = true;
2252            return std::task::Poll::Ready(None);
2253        }
2254        if this.is_terminated {
2255            panic!("polled ElementRunnerRequestStream after completion");
2256        }
2257        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2258            |bytes, handles| {
2259                match this.inner.channel().read_etc(cx, bytes, handles) {
2260                    std::task::Poll::Ready(Ok(())) => {}
2261                    std::task::Poll::Pending => return std::task::Poll::Pending,
2262                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2263                        this.is_terminated = true;
2264                        return std::task::Poll::Ready(None);
2265                    }
2266                    std::task::Poll::Ready(Err(e)) => {
2267                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2268                            e.into(),
2269                        ))));
2270                    }
2271                }
2272
2273                // A message has been received from the channel
2274                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2275
2276                std::task::Poll::Ready(Some(match header.ordinal {
2277                    0x11a93092b228f0b => {
2278                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2279                        let mut req = fidl::new_empty!(
2280                            ElementRunnerSetLevelRequest,
2281                            fidl::encoding::DefaultFuchsiaResourceDialect
2282                        );
2283                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ElementRunnerSetLevelRequest>(&header, _body_bytes, handles, &mut req)?;
2284                        let control_handle =
2285                            ElementRunnerControlHandle { inner: this.inner.clone() };
2286                        Ok(ElementRunnerRequest::SetLevel {
2287                            level: req.level,
2288
2289                            responder: ElementRunnerSetLevelResponder {
2290                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2291                                tx_id: header.tx_id,
2292                            },
2293                        })
2294                    }
2295                    _ if header.tx_id == 0
2296                        && header
2297                            .dynamic_flags()
2298                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2299                    {
2300                        Ok(ElementRunnerRequest::_UnknownMethod {
2301                            ordinal: header.ordinal,
2302                            control_handle: ElementRunnerControlHandle {
2303                                inner: this.inner.clone(),
2304                            },
2305                            method_type: fidl::MethodType::OneWay,
2306                        })
2307                    }
2308                    _ if header
2309                        .dynamic_flags()
2310                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2311                    {
2312                        this.inner.send_framework_err(
2313                            fidl::encoding::FrameworkErr::UnknownMethod,
2314                            header.tx_id,
2315                            header.ordinal,
2316                            header.dynamic_flags(),
2317                            (bytes, handles),
2318                        )?;
2319                        Ok(ElementRunnerRequest::_UnknownMethod {
2320                            ordinal: header.ordinal,
2321                            control_handle: ElementRunnerControlHandle {
2322                                inner: this.inner.clone(),
2323                            },
2324                            method_type: fidl::MethodType::TwoWay,
2325                        })
2326                    }
2327                    _ => Err(fidl::Error::UnknownOrdinal {
2328                        ordinal: header.ordinal,
2329                        protocol_name:
2330                            <ElementRunnerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2331                    }),
2332                }))
2333            },
2334        )
2335    }
2336}
2337
2338/// The runner or operator of an element.
2339/// This should be implemented by all element owners.
2340/// The client end is passed to Power Broker via ElementSchema.element_runner.
2341/// Power Broker calls SetLevel initially, and then whenever the required level
2342/// of the element changes.
2343#[derive(Debug)]
2344pub enum ElementRunnerRequest {
2345    /// Sets the level of the power element.
2346    ///
2347    /// The server blocks while making the level transition. It returns
2348    /// once the transition to the new required level is complete.
2349    /// If the element cannot transition to the new required level and
2350    /// it cannot retry, the channel will be closed.
2351    SetLevel { level: u8, responder: ElementRunnerSetLevelResponder },
2352    /// An interaction was received which does not match any known method.
2353    #[non_exhaustive]
2354    _UnknownMethod {
2355        /// Ordinal of the method that was called.
2356        ordinal: u64,
2357        control_handle: ElementRunnerControlHandle,
2358        method_type: fidl::MethodType,
2359    },
2360}
2361
2362impl ElementRunnerRequest {
2363    #[allow(irrefutable_let_patterns)]
2364    pub fn into_set_level(self) -> Option<(u8, ElementRunnerSetLevelResponder)> {
2365        if let ElementRunnerRequest::SetLevel { level, responder } = self {
2366            Some((level, responder))
2367        } else {
2368            None
2369        }
2370    }
2371
2372    /// Name of the method defined in FIDL
2373    pub fn method_name(&self) -> &'static str {
2374        match *self {
2375            ElementRunnerRequest::SetLevel { .. } => "set_level",
2376            ElementRunnerRequest::_UnknownMethod {
2377                method_type: fidl::MethodType::OneWay, ..
2378            } => "unknown one-way method",
2379            ElementRunnerRequest::_UnknownMethod {
2380                method_type: fidl::MethodType::TwoWay, ..
2381            } => "unknown two-way method",
2382        }
2383    }
2384}
2385
2386#[derive(Debug, Clone)]
2387pub struct ElementRunnerControlHandle {
2388    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2389}
2390
2391impl ElementRunnerControlHandle {
2392    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
2393        self.inner.shutdown_with_epitaph(status.into())
2394    }
2395}
2396
2397impl fidl::endpoints::ControlHandle for ElementRunnerControlHandle {
2398    fn shutdown(&self) {
2399        self.inner.shutdown()
2400    }
2401
2402    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
2403        self.inner.shutdown_with_epitaph(status)
2404    }
2405
2406    fn is_closed(&self) -> bool {
2407        self.inner.channel().is_closed()
2408    }
2409    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2410        self.inner.channel().on_closed()
2411    }
2412
2413    #[cfg(target_os = "fuchsia")]
2414    fn signal_peer(
2415        &self,
2416        clear_mask: zx::Signals,
2417        set_mask: zx::Signals,
2418    ) -> Result<(), zx_status::Status> {
2419        use fidl::Peered;
2420        self.inner.channel().signal_peer(clear_mask, set_mask)
2421    }
2422}
2423
2424impl ElementRunnerControlHandle {}
2425
2426#[must_use = "FIDL methods require a response to be sent"]
2427#[derive(Debug)]
2428pub struct ElementRunnerSetLevelResponder {
2429    control_handle: std::mem::ManuallyDrop<ElementRunnerControlHandle>,
2430    tx_id: u32,
2431}
2432
2433/// Set the the channel to be shutdown (see [`ElementRunnerControlHandle::shutdown`])
2434/// if the responder is dropped without sending a response, so that the client
2435/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2436impl std::ops::Drop for ElementRunnerSetLevelResponder {
2437    fn drop(&mut self) {
2438        self.control_handle.shutdown();
2439        // Safety: drops once, never accessed again
2440        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2441    }
2442}
2443
2444impl fidl::endpoints::Responder for ElementRunnerSetLevelResponder {
2445    type ControlHandle = ElementRunnerControlHandle;
2446
2447    fn control_handle(&self) -> &ElementRunnerControlHandle {
2448        &self.control_handle
2449    }
2450
2451    fn drop_without_shutdown(mut self) {
2452        // Safety: drops once, never accessed again due to mem::forget
2453        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2454        // Prevent Drop from running (which would shut down the channel)
2455        std::mem::forget(self);
2456    }
2457}
2458
2459impl ElementRunnerSetLevelResponder {
2460    /// Sends a response to the FIDL transaction.
2461    ///
2462    /// Sets the channel to shutdown if an error occurs.
2463    pub fn send(self) -> Result<(), fidl::Error> {
2464        let _result = self.send_raw();
2465        if _result.is_err() {
2466            self.control_handle.shutdown();
2467        }
2468        self.drop_without_shutdown();
2469        _result
2470    }
2471
2472    /// Similar to "send" but does not shutdown the channel if an error occurs.
2473    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
2474        let _result = self.send_raw();
2475        self.drop_without_shutdown();
2476        _result
2477    }
2478
2479    fn send_raw(&self) -> Result<(), fidl::Error> {
2480        self.control_handle.inner.send::<fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>>(
2481            fidl::encoding::Flexible::new(()),
2482            self.tx_id,
2483            0x11a93092b228f0b,
2484            fidl::encoding::DynamicFlags::FLEXIBLE,
2485        )
2486    }
2487}
2488
2489#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2490pub struct LeaseControlMarker;
2491
2492impl fidl::endpoints::ProtocolMarker for LeaseControlMarker {
2493    type Proxy = LeaseControlProxy;
2494    type RequestStream = LeaseControlRequestStream;
2495    #[cfg(target_os = "fuchsia")]
2496    type SynchronousProxy = LeaseControlSynchronousProxy;
2497
2498    const DEBUG_NAME: &'static str = "(anonymous) LeaseControl";
2499}
2500
2501pub trait LeaseControlProxyInterface: Send + Sync {
2502    type WatchStatusResponseFut: std::future::Future<Output = Result<LeaseStatus, fidl::Error>>
2503        + Send;
2504    fn r#watch_status(&self, last_status: LeaseStatus) -> Self::WatchStatusResponseFut;
2505}
2506#[derive(Debug)]
2507#[cfg(target_os = "fuchsia")]
2508pub struct LeaseControlSynchronousProxy {
2509    client: fidl::client::sync::Client,
2510}
2511
2512#[cfg(target_os = "fuchsia")]
2513impl fidl::endpoints::SynchronousProxy for LeaseControlSynchronousProxy {
2514    type Proxy = LeaseControlProxy;
2515    type Protocol = LeaseControlMarker;
2516
2517    fn from_channel(inner: fidl::Channel) -> Self {
2518        Self::new(inner)
2519    }
2520
2521    fn into_channel(self) -> fidl::Channel {
2522        self.client.into_channel()
2523    }
2524
2525    fn as_channel(&self) -> &fidl::Channel {
2526        self.client.as_channel()
2527    }
2528}
2529
2530#[cfg(target_os = "fuchsia")]
2531impl LeaseControlSynchronousProxy {
2532    pub fn new(channel: fidl::Channel) -> Self {
2533        Self { client: fidl::client::sync::Client::new(channel) }
2534    }
2535
2536    pub fn into_channel(self) -> fidl::Channel {
2537        self.client.into_channel()
2538    }
2539
2540    /// Waits until an event arrives and returns it. It is safe for other
2541    /// threads to make concurrent requests while waiting for an event.
2542    pub fn wait_for_event(
2543        &self,
2544        deadline: zx::MonotonicInstant,
2545    ) -> Result<LeaseControlEvent, fidl::Error> {
2546        LeaseControlEvent::decode(self.client.wait_for_event::<LeaseControlMarker>(deadline)?)
2547    }
2548
2549    /// Get the current status of the lease.
2550    /// If last_status is UNKNOWN, the call will return immediately
2551    /// with the current status. Otherwise, the call will block
2552    /// until the current status differs from last_status.
2553    pub fn r#watch_status(
2554        &self,
2555        mut last_status: LeaseStatus,
2556        ___deadline: zx::MonotonicInstant,
2557    ) -> Result<LeaseStatus, fidl::Error> {
2558        let _response = self.client.send_query::<
2559            LeaseControlWatchStatusRequest,
2560            fidl::encoding::FlexibleType<LeaseControlWatchStatusResponse>,
2561            LeaseControlMarker,
2562        >(
2563            (last_status,),
2564            0x293ab9b0301ca881,
2565            fidl::encoding::DynamicFlags::FLEXIBLE,
2566            ___deadline,
2567        )?
2568        .into_result::<LeaseControlMarker>("watch_status")?;
2569        Ok(_response.status)
2570    }
2571}
2572
2573#[cfg(target_os = "fuchsia")]
2574impl From<LeaseControlSynchronousProxy> for zx::NullableHandle {
2575    fn from(value: LeaseControlSynchronousProxy) -> Self {
2576        value.into_channel().into()
2577    }
2578}
2579
2580#[cfg(target_os = "fuchsia")]
2581impl From<fidl::Channel> for LeaseControlSynchronousProxy {
2582    fn from(value: fidl::Channel) -> Self {
2583        Self::new(value)
2584    }
2585}
2586
2587#[cfg(target_os = "fuchsia")]
2588impl fidl::endpoints::FromClient for LeaseControlSynchronousProxy {
2589    type Protocol = LeaseControlMarker;
2590
2591    fn from_client(value: fidl::endpoints::ClientEnd<LeaseControlMarker>) -> Self {
2592        Self::new(value.into_channel())
2593    }
2594}
2595
2596#[derive(Debug, Clone)]
2597pub struct LeaseControlProxy {
2598    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2599}
2600
2601impl fidl::endpoints::Proxy for LeaseControlProxy {
2602    type Protocol = LeaseControlMarker;
2603
2604    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2605        Self::new(inner)
2606    }
2607
2608    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2609        self.client.into_channel().map_err(|client| Self { client })
2610    }
2611
2612    fn as_channel(&self) -> &::fidl::AsyncChannel {
2613        self.client.as_channel()
2614    }
2615}
2616
2617impl LeaseControlProxy {
2618    /// Create a new Proxy for fuchsia.power.broker/LeaseControl.
2619    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2620        let protocol_name = <LeaseControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2621        Self { client: fidl::client::Client::new(channel, protocol_name) }
2622    }
2623
2624    /// Get a Stream of events from the remote end of the protocol.
2625    ///
2626    /// # Panics
2627    ///
2628    /// Panics if the event stream was already taken.
2629    pub fn take_event_stream(&self) -> LeaseControlEventStream {
2630        LeaseControlEventStream { event_receiver: self.client.take_event_receiver() }
2631    }
2632
2633    /// Get the current status of the lease.
2634    /// If last_status is UNKNOWN, the call will return immediately
2635    /// with the current status. Otherwise, the call will block
2636    /// until the current status differs from last_status.
2637    pub fn r#watch_status(
2638        &self,
2639        mut last_status: LeaseStatus,
2640    ) -> fidl::client::QueryResponseFut<LeaseStatus, fidl::encoding::DefaultFuchsiaResourceDialect>
2641    {
2642        LeaseControlProxyInterface::r#watch_status(self, last_status)
2643    }
2644}
2645
2646impl LeaseControlProxyInterface for LeaseControlProxy {
2647    type WatchStatusResponseFut =
2648        fidl::client::QueryResponseFut<LeaseStatus, fidl::encoding::DefaultFuchsiaResourceDialect>;
2649    fn r#watch_status(&self, mut last_status: LeaseStatus) -> Self::WatchStatusResponseFut {
2650        fn _decode(
2651            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2652        ) -> Result<LeaseStatus, fidl::Error> {
2653            let _response = fidl::client::decode_transaction_body::<
2654                fidl::encoding::FlexibleType<LeaseControlWatchStatusResponse>,
2655                fidl::encoding::DefaultFuchsiaResourceDialect,
2656                0x293ab9b0301ca881,
2657            >(_buf?)?
2658            .into_result::<LeaseControlMarker>("watch_status")?;
2659            Ok(_response.status)
2660        }
2661        self.client.send_query_and_decode::<LeaseControlWatchStatusRequest, LeaseStatus>(
2662            (last_status,),
2663            0x293ab9b0301ca881,
2664            fidl::encoding::DynamicFlags::FLEXIBLE,
2665            _decode,
2666        )
2667    }
2668}
2669
2670pub struct LeaseControlEventStream {
2671    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2672}
2673
2674impl std::marker::Unpin for LeaseControlEventStream {}
2675
2676impl futures::stream::FusedStream for LeaseControlEventStream {
2677    fn is_terminated(&self) -> bool {
2678        self.event_receiver.is_terminated()
2679    }
2680}
2681
2682impl futures::Stream for LeaseControlEventStream {
2683    type Item = Result<LeaseControlEvent, fidl::Error>;
2684
2685    fn poll_next(
2686        mut self: std::pin::Pin<&mut Self>,
2687        cx: &mut std::task::Context<'_>,
2688    ) -> std::task::Poll<Option<Self::Item>> {
2689        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2690            &mut self.event_receiver,
2691            cx
2692        )?) {
2693            Some(buf) => std::task::Poll::Ready(Some(LeaseControlEvent::decode(buf))),
2694            None => std::task::Poll::Ready(None),
2695        }
2696    }
2697}
2698
2699#[derive(Debug)]
2700pub enum LeaseControlEvent {
2701    #[non_exhaustive]
2702    _UnknownEvent {
2703        /// Ordinal of the event that was sent.
2704        ordinal: u64,
2705    },
2706}
2707
2708impl LeaseControlEvent {
2709    /// Decodes a message buffer as a [`LeaseControlEvent`].
2710    fn decode(
2711        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2712    ) -> Result<LeaseControlEvent, fidl::Error> {
2713        let (bytes, _handles) = buf.split_mut();
2714        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2715        debug_assert_eq!(tx_header.tx_id, 0);
2716        match tx_header.ordinal {
2717            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2718                Ok(LeaseControlEvent::_UnknownEvent { ordinal: tx_header.ordinal })
2719            }
2720            _ => Err(fidl::Error::UnknownOrdinal {
2721                ordinal: tx_header.ordinal,
2722                protocol_name: <LeaseControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2723            }),
2724        }
2725    }
2726}
2727
2728/// A Stream of incoming requests for fuchsia.power.broker/LeaseControl.
2729pub struct LeaseControlRequestStream {
2730    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2731    is_terminated: bool,
2732}
2733
2734impl std::marker::Unpin for LeaseControlRequestStream {}
2735
2736impl futures::stream::FusedStream for LeaseControlRequestStream {
2737    fn is_terminated(&self) -> bool {
2738        self.is_terminated
2739    }
2740}
2741
2742impl fidl::endpoints::RequestStream for LeaseControlRequestStream {
2743    type Protocol = LeaseControlMarker;
2744    type ControlHandle = LeaseControlControlHandle;
2745
2746    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2747        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2748    }
2749
2750    fn control_handle(&self) -> Self::ControlHandle {
2751        LeaseControlControlHandle { inner: self.inner.clone() }
2752    }
2753
2754    fn into_inner(
2755        self,
2756    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2757    {
2758        (self.inner, self.is_terminated)
2759    }
2760
2761    fn from_inner(
2762        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2763        is_terminated: bool,
2764    ) -> Self {
2765        Self { inner, is_terminated }
2766    }
2767}
2768
2769impl futures::Stream for LeaseControlRequestStream {
2770    type Item = Result<LeaseControlRequest, fidl::Error>;
2771
2772    fn poll_next(
2773        mut self: std::pin::Pin<&mut Self>,
2774        cx: &mut std::task::Context<'_>,
2775    ) -> std::task::Poll<Option<Self::Item>> {
2776        let this = &mut *self;
2777        if this.inner.check_shutdown(cx) {
2778            this.is_terminated = true;
2779            return std::task::Poll::Ready(None);
2780        }
2781        if this.is_terminated {
2782            panic!("polled LeaseControlRequestStream after completion");
2783        }
2784        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2785            |bytes, handles| {
2786                match this.inner.channel().read_etc(cx, bytes, handles) {
2787                    std::task::Poll::Ready(Ok(())) => {}
2788                    std::task::Poll::Pending => return std::task::Poll::Pending,
2789                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2790                        this.is_terminated = true;
2791                        return std::task::Poll::Ready(None);
2792                    }
2793                    std::task::Poll::Ready(Err(e)) => {
2794                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2795                            e.into(),
2796                        ))));
2797                    }
2798                }
2799
2800                // A message has been received from the channel
2801                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2802
2803                std::task::Poll::Ready(Some(match header.ordinal {
2804                    0x293ab9b0301ca881 => {
2805                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2806                        let mut req = fidl::new_empty!(
2807                            LeaseControlWatchStatusRequest,
2808                            fidl::encoding::DefaultFuchsiaResourceDialect
2809                        );
2810                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LeaseControlWatchStatusRequest>(&header, _body_bytes, handles, &mut req)?;
2811                        let control_handle =
2812                            LeaseControlControlHandle { inner: this.inner.clone() };
2813                        Ok(LeaseControlRequest::WatchStatus {
2814                            last_status: req.last_status,
2815
2816                            responder: LeaseControlWatchStatusResponder {
2817                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2818                                tx_id: header.tx_id,
2819                            },
2820                        })
2821                    }
2822                    _ if header.tx_id == 0
2823                        && header
2824                            .dynamic_flags()
2825                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2826                    {
2827                        Ok(LeaseControlRequest::_UnknownMethod {
2828                            ordinal: header.ordinal,
2829                            control_handle: LeaseControlControlHandle { inner: this.inner.clone() },
2830                            method_type: fidl::MethodType::OneWay,
2831                        })
2832                    }
2833                    _ if header
2834                        .dynamic_flags()
2835                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2836                    {
2837                        this.inner.send_framework_err(
2838                            fidl::encoding::FrameworkErr::UnknownMethod,
2839                            header.tx_id,
2840                            header.ordinal,
2841                            header.dynamic_flags(),
2842                            (bytes, handles),
2843                        )?;
2844                        Ok(LeaseControlRequest::_UnknownMethod {
2845                            ordinal: header.ordinal,
2846                            control_handle: LeaseControlControlHandle { inner: this.inner.clone() },
2847                            method_type: fidl::MethodType::TwoWay,
2848                        })
2849                    }
2850                    _ => Err(fidl::Error::UnknownOrdinal {
2851                        ordinal: header.ordinal,
2852                        protocol_name:
2853                            <LeaseControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2854                    }),
2855                }))
2856            },
2857        )
2858    }
2859}
2860
2861/// Provides lease-scoped access to actions that can be taken on a lease
2862/// previously acquired via Lessor.Lease. Closing this control channel drops
2863/// the lease.
2864/// TODO(https://fxbug.dev/339474151): Switch from a protocol to an eventpair.
2865#[derive(Debug)]
2866pub enum LeaseControlRequest {
2867    /// Get the current status of the lease.
2868    /// If last_status is UNKNOWN, the call will return immediately
2869    /// with the current status. Otherwise, the call will block
2870    /// until the current status differs from last_status.
2871    WatchStatus { last_status: LeaseStatus, responder: LeaseControlWatchStatusResponder },
2872    /// An interaction was received which does not match any known method.
2873    #[non_exhaustive]
2874    _UnknownMethod {
2875        /// Ordinal of the method that was called.
2876        ordinal: u64,
2877        control_handle: LeaseControlControlHandle,
2878        method_type: fidl::MethodType,
2879    },
2880}
2881
2882impl LeaseControlRequest {
2883    #[allow(irrefutable_let_patterns)]
2884    pub fn into_watch_status(self) -> Option<(LeaseStatus, LeaseControlWatchStatusResponder)> {
2885        if let LeaseControlRequest::WatchStatus { last_status, responder } = self {
2886            Some((last_status, responder))
2887        } else {
2888            None
2889        }
2890    }
2891
2892    /// Name of the method defined in FIDL
2893    pub fn method_name(&self) -> &'static str {
2894        match *self {
2895            LeaseControlRequest::WatchStatus { .. } => "watch_status",
2896            LeaseControlRequest::_UnknownMethod {
2897                method_type: fidl::MethodType::OneWay, ..
2898            } => "unknown one-way method",
2899            LeaseControlRequest::_UnknownMethod {
2900                method_type: fidl::MethodType::TwoWay, ..
2901            } => "unknown two-way method",
2902        }
2903    }
2904}
2905
2906#[derive(Debug, Clone)]
2907pub struct LeaseControlControlHandle {
2908    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2909}
2910
2911impl LeaseControlControlHandle {
2912    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
2913        self.inner.shutdown_with_epitaph(status.into())
2914    }
2915}
2916
2917impl fidl::endpoints::ControlHandle for LeaseControlControlHandle {
2918    fn shutdown(&self) {
2919        self.inner.shutdown()
2920    }
2921
2922    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
2923        self.inner.shutdown_with_epitaph(status)
2924    }
2925
2926    fn is_closed(&self) -> bool {
2927        self.inner.channel().is_closed()
2928    }
2929    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2930        self.inner.channel().on_closed()
2931    }
2932
2933    #[cfg(target_os = "fuchsia")]
2934    fn signal_peer(
2935        &self,
2936        clear_mask: zx::Signals,
2937        set_mask: zx::Signals,
2938    ) -> Result<(), zx_status::Status> {
2939        use fidl::Peered;
2940        self.inner.channel().signal_peer(clear_mask, set_mask)
2941    }
2942}
2943
2944impl LeaseControlControlHandle {}
2945
2946#[must_use = "FIDL methods require a response to be sent"]
2947#[derive(Debug)]
2948pub struct LeaseControlWatchStatusResponder {
2949    control_handle: std::mem::ManuallyDrop<LeaseControlControlHandle>,
2950    tx_id: u32,
2951}
2952
2953/// Set the the channel to be shutdown (see [`LeaseControlControlHandle::shutdown`])
2954/// if the responder is dropped without sending a response, so that the client
2955/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2956impl std::ops::Drop for LeaseControlWatchStatusResponder {
2957    fn drop(&mut self) {
2958        self.control_handle.shutdown();
2959        // Safety: drops once, never accessed again
2960        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2961    }
2962}
2963
2964impl fidl::endpoints::Responder for LeaseControlWatchStatusResponder {
2965    type ControlHandle = LeaseControlControlHandle;
2966
2967    fn control_handle(&self) -> &LeaseControlControlHandle {
2968        &self.control_handle
2969    }
2970
2971    fn drop_without_shutdown(mut self) {
2972        // Safety: drops once, never accessed again due to mem::forget
2973        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2974        // Prevent Drop from running (which would shut down the channel)
2975        std::mem::forget(self);
2976    }
2977}
2978
2979impl LeaseControlWatchStatusResponder {
2980    /// Sends a response to the FIDL transaction.
2981    ///
2982    /// Sets the channel to shutdown if an error occurs.
2983    pub fn send(self, mut status: LeaseStatus) -> Result<(), fidl::Error> {
2984        let _result = self.send_raw(status);
2985        if _result.is_err() {
2986            self.control_handle.shutdown();
2987        }
2988        self.drop_without_shutdown();
2989        _result
2990    }
2991
2992    /// Similar to "send" but does not shutdown the channel if an error occurs.
2993    pub fn send_no_shutdown_on_err(self, mut status: LeaseStatus) -> Result<(), fidl::Error> {
2994        let _result = self.send_raw(status);
2995        self.drop_without_shutdown();
2996        _result
2997    }
2998
2999    fn send_raw(&self, mut status: LeaseStatus) -> Result<(), fidl::Error> {
3000        self.control_handle
3001            .inner
3002            .send::<fidl::encoding::FlexibleType<LeaseControlWatchStatusResponse>>(
3003                fidl::encoding::Flexible::new((status,)),
3004                self.tx_id,
3005                0x293ab9b0301ca881,
3006                fidl::encoding::DynamicFlags::FLEXIBLE,
3007            )
3008    }
3009}
3010
3011#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3012pub struct LessorMarker;
3013
3014impl fidl::endpoints::ProtocolMarker for LessorMarker {
3015    type Proxy = LessorProxy;
3016    type RequestStream = LessorRequestStream;
3017    #[cfg(target_os = "fuchsia")]
3018    type SynchronousProxy = LessorSynchronousProxy;
3019
3020    const DEBUG_NAME: &'static str = "(anonymous) Lessor";
3021}
3022pub type LessorLeaseResult = Result<fidl::endpoints::ClientEnd<LeaseControlMarker>, LeaseError>;
3023
3024pub trait LessorProxyInterface: Send + Sync {
3025    type LeaseResponseFut: std::future::Future<Output = Result<LessorLeaseResult, fidl::Error>>
3026        + Send;
3027    fn r#lease(&self, level: u8) -> Self::LeaseResponseFut;
3028}
3029#[derive(Debug)]
3030#[cfg(target_os = "fuchsia")]
3031pub struct LessorSynchronousProxy {
3032    client: fidl::client::sync::Client,
3033}
3034
3035#[cfg(target_os = "fuchsia")]
3036impl fidl::endpoints::SynchronousProxy for LessorSynchronousProxy {
3037    type Proxy = LessorProxy;
3038    type Protocol = LessorMarker;
3039
3040    fn from_channel(inner: fidl::Channel) -> Self {
3041        Self::new(inner)
3042    }
3043
3044    fn into_channel(self) -> fidl::Channel {
3045        self.client.into_channel()
3046    }
3047
3048    fn as_channel(&self) -> &fidl::Channel {
3049        self.client.as_channel()
3050    }
3051}
3052
3053#[cfg(target_os = "fuchsia")]
3054impl LessorSynchronousProxy {
3055    pub fn new(channel: fidl::Channel) -> Self {
3056        Self { client: fidl::client::sync::Client::new(channel) }
3057    }
3058
3059    pub fn into_channel(self) -> fidl::Channel {
3060        self.client.into_channel()
3061    }
3062
3063    /// Waits until an event arrives and returns it. It is safe for other
3064    /// threads to make concurrent requests while waiting for an event.
3065    pub fn wait_for_event(
3066        &self,
3067        deadline: zx::MonotonicInstant,
3068    ) -> Result<LessorEvent, fidl::Error> {
3069        LessorEvent::decode(self.client.wait_for_event::<LessorMarker>(deadline)?)
3070    }
3071
3072    /// Request made to indicate the client wants the element raised to the given
3073    /// level. When the call returns, this **does** **not** mean the
3074    /// corresponding element is at the requested level, only that the requested
3075    /// level is valid and request is being worked on.
3076    ///
3077    /// Fulfilling the request will raise the level of all the level's direct
3078    /// and transitive power dependencies to their required levels. When
3079    /// `LeaseControl.WatchStatus` reports `LeaseStatus::SATISFIED` this means
3080    /// given element is at the level specified by the lease.
3081    ///
3082    /// Requesting an invalid level returns `LeaseError::INVALID_LEVEL`.
3083    pub fn r#lease(
3084        &self,
3085        mut level: u8,
3086        ___deadline: zx::MonotonicInstant,
3087    ) -> Result<LessorLeaseResult, fidl::Error> {
3088        let _response = self.client.send_query::<
3089            LessorLeaseRequest,
3090            fidl::encoding::FlexibleResultType<LessorLeaseResponse, LeaseError>,
3091            LessorMarker,
3092        >(
3093            (level,),
3094            0x38999f84b2f1f9ad,
3095            fidl::encoding::DynamicFlags::FLEXIBLE,
3096            ___deadline,
3097        )?
3098        .into_result::<LessorMarker>("lease")?;
3099        Ok(_response.map(|x| x.lease_control))
3100    }
3101}
3102
3103#[cfg(target_os = "fuchsia")]
3104impl From<LessorSynchronousProxy> for zx::NullableHandle {
3105    fn from(value: LessorSynchronousProxy) -> Self {
3106        value.into_channel().into()
3107    }
3108}
3109
3110#[cfg(target_os = "fuchsia")]
3111impl From<fidl::Channel> for LessorSynchronousProxy {
3112    fn from(value: fidl::Channel) -> Self {
3113        Self::new(value)
3114    }
3115}
3116
3117#[cfg(target_os = "fuchsia")]
3118impl fidl::endpoints::FromClient for LessorSynchronousProxy {
3119    type Protocol = LessorMarker;
3120
3121    fn from_client(value: fidl::endpoints::ClientEnd<LessorMarker>) -> Self {
3122        Self::new(value.into_channel())
3123    }
3124}
3125
3126#[derive(Debug, Clone)]
3127pub struct LessorProxy {
3128    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3129}
3130
3131impl fidl::endpoints::Proxy for LessorProxy {
3132    type Protocol = LessorMarker;
3133
3134    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3135        Self::new(inner)
3136    }
3137
3138    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3139        self.client.into_channel().map_err(|client| Self { client })
3140    }
3141
3142    fn as_channel(&self) -> &::fidl::AsyncChannel {
3143        self.client.as_channel()
3144    }
3145}
3146
3147impl LessorProxy {
3148    /// Create a new Proxy for fuchsia.power.broker/Lessor.
3149    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3150        let protocol_name = <LessorMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3151        Self { client: fidl::client::Client::new(channel, protocol_name) }
3152    }
3153
3154    /// Get a Stream of events from the remote end of the protocol.
3155    ///
3156    /// # Panics
3157    ///
3158    /// Panics if the event stream was already taken.
3159    pub fn take_event_stream(&self) -> LessorEventStream {
3160        LessorEventStream { event_receiver: self.client.take_event_receiver() }
3161    }
3162
3163    /// Request made to indicate the client wants the element raised to the given
3164    /// level. When the call returns, this **does** **not** mean the
3165    /// corresponding element is at the requested level, only that the requested
3166    /// level is valid and request is being worked on.
3167    ///
3168    /// Fulfilling the request will raise the level of all the level's direct
3169    /// and transitive power dependencies to their required levels. When
3170    /// `LeaseControl.WatchStatus` reports `LeaseStatus::SATISFIED` this means
3171    /// given element is at the level specified by the lease.
3172    ///
3173    /// Requesting an invalid level returns `LeaseError::INVALID_LEVEL`.
3174    pub fn r#lease(
3175        &self,
3176        mut level: u8,
3177    ) -> fidl::client::QueryResponseFut<
3178        LessorLeaseResult,
3179        fidl::encoding::DefaultFuchsiaResourceDialect,
3180    > {
3181        LessorProxyInterface::r#lease(self, level)
3182    }
3183}
3184
3185impl LessorProxyInterface for LessorProxy {
3186    type LeaseResponseFut = fidl::client::QueryResponseFut<
3187        LessorLeaseResult,
3188        fidl::encoding::DefaultFuchsiaResourceDialect,
3189    >;
3190    fn r#lease(&self, mut level: u8) -> Self::LeaseResponseFut {
3191        fn _decode(
3192            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3193        ) -> Result<LessorLeaseResult, fidl::Error> {
3194            let _response = fidl::client::decode_transaction_body::<
3195                fidl::encoding::FlexibleResultType<LessorLeaseResponse, LeaseError>,
3196                fidl::encoding::DefaultFuchsiaResourceDialect,
3197                0x38999f84b2f1f9ad,
3198            >(_buf?)?
3199            .into_result::<LessorMarker>("lease")?;
3200            Ok(_response.map(|x| x.lease_control))
3201        }
3202        self.client.send_query_and_decode::<LessorLeaseRequest, LessorLeaseResult>(
3203            (level,),
3204            0x38999f84b2f1f9ad,
3205            fidl::encoding::DynamicFlags::FLEXIBLE,
3206            _decode,
3207        )
3208    }
3209}
3210
3211pub struct LessorEventStream {
3212    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3213}
3214
3215impl std::marker::Unpin for LessorEventStream {}
3216
3217impl futures::stream::FusedStream for LessorEventStream {
3218    fn is_terminated(&self) -> bool {
3219        self.event_receiver.is_terminated()
3220    }
3221}
3222
3223impl futures::Stream for LessorEventStream {
3224    type Item = Result<LessorEvent, fidl::Error>;
3225
3226    fn poll_next(
3227        mut self: std::pin::Pin<&mut Self>,
3228        cx: &mut std::task::Context<'_>,
3229    ) -> std::task::Poll<Option<Self::Item>> {
3230        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3231            &mut self.event_receiver,
3232            cx
3233        )?) {
3234            Some(buf) => std::task::Poll::Ready(Some(LessorEvent::decode(buf))),
3235            None => std::task::Poll::Ready(None),
3236        }
3237    }
3238}
3239
3240#[derive(Debug)]
3241pub enum LessorEvent {
3242    #[non_exhaustive]
3243    _UnknownEvent {
3244        /// Ordinal of the event that was sent.
3245        ordinal: u64,
3246    },
3247}
3248
3249impl LessorEvent {
3250    /// Decodes a message buffer as a [`LessorEvent`].
3251    fn decode(
3252        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3253    ) -> Result<LessorEvent, fidl::Error> {
3254        let (bytes, _handles) = buf.split_mut();
3255        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3256        debug_assert_eq!(tx_header.tx_id, 0);
3257        match tx_header.ordinal {
3258            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3259                Ok(LessorEvent::_UnknownEvent { ordinal: tx_header.ordinal })
3260            }
3261            _ => Err(fidl::Error::UnknownOrdinal {
3262                ordinal: tx_header.ordinal,
3263                protocol_name: <LessorMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3264            }),
3265        }
3266    }
3267}
3268
3269/// A Stream of incoming requests for fuchsia.power.broker/Lessor.
3270pub struct LessorRequestStream {
3271    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3272    is_terminated: bool,
3273}
3274
3275impl std::marker::Unpin for LessorRequestStream {}
3276
3277impl futures::stream::FusedStream for LessorRequestStream {
3278    fn is_terminated(&self) -> bool {
3279        self.is_terminated
3280    }
3281}
3282
3283impl fidl::endpoints::RequestStream for LessorRequestStream {
3284    type Protocol = LessorMarker;
3285    type ControlHandle = LessorControlHandle;
3286
3287    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3288        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3289    }
3290
3291    fn control_handle(&self) -> Self::ControlHandle {
3292        LessorControlHandle { inner: self.inner.clone() }
3293    }
3294
3295    fn into_inner(
3296        self,
3297    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3298    {
3299        (self.inner, self.is_terminated)
3300    }
3301
3302    fn from_inner(
3303        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3304        is_terminated: bool,
3305    ) -> Self {
3306        Self { inner, is_terminated }
3307    }
3308}
3309
3310impl futures::Stream for LessorRequestStream {
3311    type Item = Result<LessorRequest, fidl::Error>;
3312
3313    fn poll_next(
3314        mut self: std::pin::Pin<&mut Self>,
3315        cx: &mut std::task::Context<'_>,
3316    ) -> std::task::Poll<Option<Self::Item>> {
3317        let this = &mut *self;
3318        if this.inner.check_shutdown(cx) {
3319            this.is_terminated = true;
3320            return std::task::Poll::Ready(None);
3321        }
3322        if this.is_terminated {
3323            panic!("polled LessorRequestStream after completion");
3324        }
3325        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3326            |bytes, handles| {
3327                match this.inner.channel().read_etc(cx, bytes, handles) {
3328                    std::task::Poll::Ready(Ok(())) => {}
3329                    std::task::Poll::Pending => return std::task::Poll::Pending,
3330                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3331                        this.is_terminated = true;
3332                        return std::task::Poll::Ready(None);
3333                    }
3334                    std::task::Poll::Ready(Err(e)) => {
3335                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3336                            e.into(),
3337                        ))));
3338                    }
3339                }
3340
3341                // A message has been received from the channel
3342                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3343
3344                std::task::Poll::Ready(Some(match header.ordinal {
3345                    0x38999f84b2f1f9ad => {
3346                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3347                        let mut req = fidl::new_empty!(
3348                            LessorLeaseRequest,
3349                            fidl::encoding::DefaultFuchsiaResourceDialect
3350                        );
3351                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LessorLeaseRequest>(&header, _body_bytes, handles, &mut req)?;
3352                        let control_handle = LessorControlHandle { inner: this.inner.clone() };
3353                        Ok(LessorRequest::Lease {
3354                            level: req.level,
3355
3356                            responder: LessorLeaseResponder {
3357                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3358                                tx_id: header.tx_id,
3359                            },
3360                        })
3361                    }
3362                    _ if header.tx_id == 0
3363                        && header
3364                            .dynamic_flags()
3365                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
3366                    {
3367                        Ok(LessorRequest::_UnknownMethod {
3368                            ordinal: header.ordinal,
3369                            control_handle: LessorControlHandle { inner: this.inner.clone() },
3370                            method_type: fidl::MethodType::OneWay,
3371                        })
3372                    }
3373                    _ if header
3374                        .dynamic_flags()
3375                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
3376                    {
3377                        this.inner.send_framework_err(
3378                            fidl::encoding::FrameworkErr::UnknownMethod,
3379                            header.tx_id,
3380                            header.ordinal,
3381                            header.dynamic_flags(),
3382                            (bytes, handles),
3383                        )?;
3384                        Ok(LessorRequest::_UnknownMethod {
3385                            ordinal: header.ordinal,
3386                            control_handle: LessorControlHandle { inner: this.inner.clone() },
3387                            method_type: fidl::MethodType::TwoWay,
3388                        })
3389                    }
3390                    _ => Err(fidl::Error::UnknownOrdinal {
3391                        ordinal: header.ordinal,
3392                        protocol_name:
3393                            <LessorMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3394                    }),
3395                }))
3396            },
3397        )
3398    }
3399}
3400
3401/// DEPRECATED. Use `Topology.Lease` instead.
3402/// Provides element-scoped access to request leases to raise the levels of an
3403/// element previously added via Topology.AddElement.
3404#[derive(Debug)]
3405pub enum LessorRequest {
3406    /// Request made to indicate the client wants the element raised to the given
3407    /// level. When the call returns, this **does** **not** mean the
3408    /// corresponding element is at the requested level, only that the requested
3409    /// level is valid and request is being worked on.
3410    ///
3411    /// Fulfilling the request will raise the level of all the level's direct
3412    /// and transitive power dependencies to their required levels. When
3413    /// `LeaseControl.WatchStatus` reports `LeaseStatus::SATISFIED` this means
3414    /// given element is at the level specified by the lease.
3415    ///
3416    /// Requesting an invalid level returns `LeaseError::INVALID_LEVEL`.
3417    Lease { level: u8, responder: LessorLeaseResponder },
3418    /// An interaction was received which does not match any known method.
3419    #[non_exhaustive]
3420    _UnknownMethod {
3421        /// Ordinal of the method that was called.
3422        ordinal: u64,
3423        control_handle: LessorControlHandle,
3424        method_type: fidl::MethodType,
3425    },
3426}
3427
3428impl LessorRequest {
3429    #[allow(irrefutable_let_patterns)]
3430    pub fn into_lease(self) -> Option<(u8, LessorLeaseResponder)> {
3431        if let LessorRequest::Lease { level, responder } = self {
3432            Some((level, responder))
3433        } else {
3434            None
3435        }
3436    }
3437
3438    /// Name of the method defined in FIDL
3439    pub fn method_name(&self) -> &'static str {
3440        match *self {
3441            LessorRequest::Lease { .. } => "lease",
3442            LessorRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
3443                "unknown one-way method"
3444            }
3445            LessorRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
3446                "unknown two-way method"
3447            }
3448        }
3449    }
3450}
3451
3452#[derive(Debug, Clone)]
3453pub struct LessorControlHandle {
3454    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3455}
3456
3457impl LessorControlHandle {
3458    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
3459        self.inner.shutdown_with_epitaph(status.into())
3460    }
3461}
3462
3463impl fidl::endpoints::ControlHandle for LessorControlHandle {
3464    fn shutdown(&self) {
3465        self.inner.shutdown()
3466    }
3467
3468    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
3469        self.inner.shutdown_with_epitaph(status)
3470    }
3471
3472    fn is_closed(&self) -> bool {
3473        self.inner.channel().is_closed()
3474    }
3475    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3476        self.inner.channel().on_closed()
3477    }
3478
3479    #[cfg(target_os = "fuchsia")]
3480    fn signal_peer(
3481        &self,
3482        clear_mask: zx::Signals,
3483        set_mask: zx::Signals,
3484    ) -> Result<(), zx_status::Status> {
3485        use fidl::Peered;
3486        self.inner.channel().signal_peer(clear_mask, set_mask)
3487    }
3488}
3489
3490impl LessorControlHandle {}
3491
3492#[must_use = "FIDL methods require a response to be sent"]
3493#[derive(Debug)]
3494pub struct LessorLeaseResponder {
3495    control_handle: std::mem::ManuallyDrop<LessorControlHandle>,
3496    tx_id: u32,
3497}
3498
3499/// Set the the channel to be shutdown (see [`LessorControlHandle::shutdown`])
3500/// if the responder is dropped without sending a response, so that the client
3501/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3502impl std::ops::Drop for LessorLeaseResponder {
3503    fn drop(&mut self) {
3504        self.control_handle.shutdown();
3505        // Safety: drops once, never accessed again
3506        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3507    }
3508}
3509
3510impl fidl::endpoints::Responder for LessorLeaseResponder {
3511    type ControlHandle = LessorControlHandle;
3512
3513    fn control_handle(&self) -> &LessorControlHandle {
3514        &self.control_handle
3515    }
3516
3517    fn drop_without_shutdown(mut self) {
3518        // Safety: drops once, never accessed again due to mem::forget
3519        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3520        // Prevent Drop from running (which would shut down the channel)
3521        std::mem::forget(self);
3522    }
3523}
3524
3525impl LessorLeaseResponder {
3526    /// Sends a response to the FIDL transaction.
3527    ///
3528    /// Sets the channel to shutdown if an error occurs.
3529    pub fn send(
3530        self,
3531        mut result: Result<fidl::endpoints::ClientEnd<LeaseControlMarker>, LeaseError>,
3532    ) -> Result<(), fidl::Error> {
3533        let _result = self.send_raw(result);
3534        if _result.is_err() {
3535            self.control_handle.shutdown();
3536        }
3537        self.drop_without_shutdown();
3538        _result
3539    }
3540
3541    /// Similar to "send" but does not shutdown the channel if an error occurs.
3542    pub fn send_no_shutdown_on_err(
3543        self,
3544        mut result: Result<fidl::endpoints::ClientEnd<LeaseControlMarker>, LeaseError>,
3545    ) -> Result<(), fidl::Error> {
3546        let _result = self.send_raw(result);
3547        self.drop_without_shutdown();
3548        _result
3549    }
3550
3551    fn send_raw(
3552        &self,
3553        mut result: Result<fidl::endpoints::ClientEnd<LeaseControlMarker>, LeaseError>,
3554    ) -> Result<(), fidl::Error> {
3555        self.control_handle
3556            .inner
3557            .send::<fidl::encoding::FlexibleResultType<LessorLeaseResponse, LeaseError>>(
3558                fidl::encoding::FlexibleResult::new(result.map(|lease_control| (lease_control,))),
3559                self.tx_id,
3560                0x38999f84b2f1f9ad,
3561                fidl::encoding::DynamicFlags::FLEXIBLE,
3562            )
3563    }
3564}
3565
3566#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3567pub struct StatusMarker;
3568
3569impl fidl::endpoints::ProtocolMarker for StatusMarker {
3570    type Proxy = StatusProxy;
3571    type RequestStream = StatusRequestStream;
3572    #[cfg(target_os = "fuchsia")]
3573    type SynchronousProxy = StatusSynchronousProxy;
3574
3575    const DEBUG_NAME: &'static str = "(anonymous) Status";
3576}
3577pub type StatusWatchPowerLevelResult = Result<u8, StatusError>;
3578
3579pub trait StatusProxyInterface: Send + Sync {
3580    type WatchPowerLevelResponseFut: std::future::Future<Output = Result<StatusWatchPowerLevelResult, fidl::Error>>
3581        + Send;
3582    fn r#watch_power_level(&self) -> Self::WatchPowerLevelResponseFut;
3583}
3584#[derive(Debug)]
3585#[cfg(target_os = "fuchsia")]
3586pub struct StatusSynchronousProxy {
3587    client: fidl::client::sync::Client,
3588}
3589
3590#[cfg(target_os = "fuchsia")]
3591impl fidl::endpoints::SynchronousProxy for StatusSynchronousProxy {
3592    type Proxy = StatusProxy;
3593    type Protocol = StatusMarker;
3594
3595    fn from_channel(inner: fidl::Channel) -> Self {
3596        Self::new(inner)
3597    }
3598
3599    fn into_channel(self) -> fidl::Channel {
3600        self.client.into_channel()
3601    }
3602
3603    fn as_channel(&self) -> &fidl::Channel {
3604        self.client.as_channel()
3605    }
3606}
3607
3608#[cfg(target_os = "fuchsia")]
3609impl StatusSynchronousProxy {
3610    pub fn new(channel: fidl::Channel) -> Self {
3611        Self { client: fidl::client::sync::Client::new(channel) }
3612    }
3613
3614    pub fn into_channel(self) -> fidl::Channel {
3615        self.client.into_channel()
3616    }
3617
3618    /// Waits until an event arrives and returns it. It is safe for other
3619    /// threads to make concurrent requests while waiting for an event.
3620    pub fn wait_for_event(
3621        &self,
3622        deadline: zx::MonotonicInstant,
3623    ) -> Result<StatusEvent, fidl::Error> {
3624        StatusEvent::decode(self.client.wait_for_event::<StatusMarker>(deadline)?)
3625    }
3626
3627    /// Returns the current power level for this element. The first call on
3628    /// this channel will return immediately. Subsequent calls will block until
3629    /// the current power level has changed.
3630    pub fn r#watch_power_level(
3631        &self,
3632        ___deadline: zx::MonotonicInstant,
3633    ) -> Result<StatusWatchPowerLevelResult, fidl::Error> {
3634        let _response = self.client.send_query::<
3635            fidl::encoding::EmptyPayload,
3636            fidl::encoding::FlexibleResultType<StatusWatchPowerLevelResponse, StatusError>,
3637            StatusMarker,
3638        >(
3639            (),
3640            0x2f11ba8df9b5614e,
3641            fidl::encoding::DynamicFlags::FLEXIBLE,
3642            ___deadline,
3643        )?
3644        .into_result::<StatusMarker>("watch_power_level")?;
3645        Ok(_response.map(|x| x.current_level))
3646    }
3647}
3648
3649#[cfg(target_os = "fuchsia")]
3650impl From<StatusSynchronousProxy> for zx::NullableHandle {
3651    fn from(value: StatusSynchronousProxy) -> Self {
3652        value.into_channel().into()
3653    }
3654}
3655
3656#[cfg(target_os = "fuchsia")]
3657impl From<fidl::Channel> for StatusSynchronousProxy {
3658    fn from(value: fidl::Channel) -> Self {
3659        Self::new(value)
3660    }
3661}
3662
3663#[cfg(target_os = "fuchsia")]
3664impl fidl::endpoints::FromClient for StatusSynchronousProxy {
3665    type Protocol = StatusMarker;
3666
3667    fn from_client(value: fidl::endpoints::ClientEnd<StatusMarker>) -> Self {
3668        Self::new(value.into_channel())
3669    }
3670}
3671
3672#[derive(Debug, Clone)]
3673pub struct StatusProxy {
3674    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3675}
3676
3677impl fidl::endpoints::Proxy for StatusProxy {
3678    type Protocol = StatusMarker;
3679
3680    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3681        Self::new(inner)
3682    }
3683
3684    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3685        self.client.into_channel().map_err(|client| Self { client })
3686    }
3687
3688    fn as_channel(&self) -> &::fidl::AsyncChannel {
3689        self.client.as_channel()
3690    }
3691}
3692
3693impl StatusProxy {
3694    /// Create a new Proxy for fuchsia.power.broker/Status.
3695    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3696        let protocol_name = <StatusMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3697        Self { client: fidl::client::Client::new(channel, protocol_name) }
3698    }
3699
3700    /// Get a Stream of events from the remote end of the protocol.
3701    ///
3702    /// # Panics
3703    ///
3704    /// Panics if the event stream was already taken.
3705    pub fn take_event_stream(&self) -> StatusEventStream {
3706        StatusEventStream { event_receiver: self.client.take_event_receiver() }
3707    }
3708
3709    /// Returns the current power level for this element. The first call on
3710    /// this channel will return immediately. Subsequent calls will block until
3711    /// the current power level has changed.
3712    pub fn r#watch_power_level(
3713        &self,
3714    ) -> fidl::client::QueryResponseFut<
3715        StatusWatchPowerLevelResult,
3716        fidl::encoding::DefaultFuchsiaResourceDialect,
3717    > {
3718        StatusProxyInterface::r#watch_power_level(self)
3719    }
3720}
3721
3722impl StatusProxyInterface for StatusProxy {
3723    type WatchPowerLevelResponseFut = fidl::client::QueryResponseFut<
3724        StatusWatchPowerLevelResult,
3725        fidl::encoding::DefaultFuchsiaResourceDialect,
3726    >;
3727    fn r#watch_power_level(&self) -> Self::WatchPowerLevelResponseFut {
3728        fn _decode(
3729            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3730        ) -> Result<StatusWatchPowerLevelResult, fidl::Error> {
3731            let _response = fidl::client::decode_transaction_body::<
3732                fidl::encoding::FlexibleResultType<StatusWatchPowerLevelResponse, StatusError>,
3733                fidl::encoding::DefaultFuchsiaResourceDialect,
3734                0x2f11ba8df9b5614e,
3735            >(_buf?)?
3736            .into_result::<StatusMarker>("watch_power_level")?;
3737            Ok(_response.map(|x| x.current_level))
3738        }
3739        self.client
3740            .send_query_and_decode::<fidl::encoding::EmptyPayload, StatusWatchPowerLevelResult>(
3741                (),
3742                0x2f11ba8df9b5614e,
3743                fidl::encoding::DynamicFlags::FLEXIBLE,
3744                _decode,
3745            )
3746    }
3747}
3748
3749pub struct StatusEventStream {
3750    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3751}
3752
3753impl std::marker::Unpin for StatusEventStream {}
3754
3755impl futures::stream::FusedStream for StatusEventStream {
3756    fn is_terminated(&self) -> bool {
3757        self.event_receiver.is_terminated()
3758    }
3759}
3760
3761impl futures::Stream for StatusEventStream {
3762    type Item = Result<StatusEvent, fidl::Error>;
3763
3764    fn poll_next(
3765        mut self: std::pin::Pin<&mut Self>,
3766        cx: &mut std::task::Context<'_>,
3767    ) -> std::task::Poll<Option<Self::Item>> {
3768        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3769            &mut self.event_receiver,
3770            cx
3771        )?) {
3772            Some(buf) => std::task::Poll::Ready(Some(StatusEvent::decode(buf))),
3773            None => std::task::Poll::Ready(None),
3774        }
3775    }
3776}
3777
3778#[derive(Debug)]
3779pub enum StatusEvent {
3780    #[non_exhaustive]
3781    _UnknownEvent {
3782        /// Ordinal of the event that was sent.
3783        ordinal: u64,
3784    },
3785}
3786
3787impl StatusEvent {
3788    /// Decodes a message buffer as a [`StatusEvent`].
3789    fn decode(
3790        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3791    ) -> Result<StatusEvent, fidl::Error> {
3792        let (bytes, _handles) = buf.split_mut();
3793        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3794        debug_assert_eq!(tx_header.tx_id, 0);
3795        match tx_header.ordinal {
3796            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
3797                Ok(StatusEvent::_UnknownEvent { ordinal: tx_header.ordinal })
3798            }
3799            _ => Err(fidl::Error::UnknownOrdinal {
3800                ordinal: tx_header.ordinal,
3801                protocol_name: <StatusMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3802            }),
3803        }
3804    }
3805}
3806
3807/// A Stream of incoming requests for fuchsia.power.broker/Status.
3808pub struct StatusRequestStream {
3809    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3810    is_terminated: bool,
3811}
3812
3813impl std::marker::Unpin for StatusRequestStream {}
3814
3815impl futures::stream::FusedStream for StatusRequestStream {
3816    fn is_terminated(&self) -> bool {
3817        self.is_terminated
3818    }
3819}
3820
3821impl fidl::endpoints::RequestStream for StatusRequestStream {
3822    type Protocol = StatusMarker;
3823    type ControlHandle = StatusControlHandle;
3824
3825    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3826        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3827    }
3828
3829    fn control_handle(&self) -> Self::ControlHandle {
3830        StatusControlHandle { inner: self.inner.clone() }
3831    }
3832
3833    fn into_inner(
3834        self,
3835    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3836    {
3837        (self.inner, self.is_terminated)
3838    }
3839
3840    fn from_inner(
3841        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3842        is_terminated: bool,
3843    ) -> Self {
3844        Self { inner, is_terminated }
3845    }
3846}
3847
3848impl futures::Stream for StatusRequestStream {
3849    type Item = Result<StatusRequest, fidl::Error>;
3850
3851    fn poll_next(
3852        mut self: std::pin::Pin<&mut Self>,
3853        cx: &mut std::task::Context<'_>,
3854    ) -> std::task::Poll<Option<Self::Item>> {
3855        let this = &mut *self;
3856        if this.inner.check_shutdown(cx) {
3857            this.is_terminated = true;
3858            return std::task::Poll::Ready(None);
3859        }
3860        if this.is_terminated {
3861            panic!("polled StatusRequestStream after completion");
3862        }
3863        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3864            |bytes, handles| {
3865                match this.inner.channel().read_etc(cx, bytes, handles) {
3866                    std::task::Poll::Ready(Ok(())) => {}
3867                    std::task::Poll::Pending => return std::task::Poll::Pending,
3868                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3869                        this.is_terminated = true;
3870                        return std::task::Poll::Ready(None);
3871                    }
3872                    std::task::Poll::Ready(Err(e)) => {
3873                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3874                            e.into(),
3875                        ))));
3876                    }
3877                }
3878
3879                // A message has been received from the channel
3880                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3881
3882                std::task::Poll::Ready(Some(match header.ordinal {
3883                    0x2f11ba8df9b5614e => {
3884                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3885                        let mut req = fidl::new_empty!(
3886                            fidl::encoding::EmptyPayload,
3887                            fidl::encoding::DefaultFuchsiaResourceDialect
3888                        );
3889                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
3890                        let control_handle = StatusControlHandle { inner: this.inner.clone() };
3891                        Ok(StatusRequest::WatchPowerLevel {
3892                            responder: StatusWatchPowerLevelResponder {
3893                                control_handle: std::mem::ManuallyDrop::new(control_handle),
3894                                tx_id: header.tx_id,
3895                            },
3896                        })
3897                    }
3898                    _ if header.tx_id == 0
3899                        && header
3900                            .dynamic_flags()
3901                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
3902                    {
3903                        Ok(StatusRequest::_UnknownMethod {
3904                            ordinal: header.ordinal,
3905                            control_handle: StatusControlHandle { inner: this.inner.clone() },
3906                            method_type: fidl::MethodType::OneWay,
3907                        })
3908                    }
3909                    _ if header
3910                        .dynamic_flags()
3911                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
3912                    {
3913                        this.inner.send_framework_err(
3914                            fidl::encoding::FrameworkErr::UnknownMethod,
3915                            header.tx_id,
3916                            header.ordinal,
3917                            header.dynamic_flags(),
3918                            (bytes, handles),
3919                        )?;
3920                        Ok(StatusRequest::_UnknownMethod {
3921                            ordinal: header.ordinal,
3922                            control_handle: StatusControlHandle { inner: this.inner.clone() },
3923                            method_type: fidl::MethodType::TwoWay,
3924                        })
3925                    }
3926                    _ => Err(fidl::Error::UnknownOrdinal {
3927                        ordinal: header.ordinal,
3928                        protocol_name:
3929                            <StatusMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3930                    }),
3931                }))
3932            },
3933        )
3934    }
3935}
3936
3937/// Provides read-only access to the current PowerLevel of an element and the
3938/// ability to watch changes to an element's power level. A new channel to
3939/// this protocol can be obtained by calling OpenStatus on the element's
3940/// ElementControl channel (and passed to other clients who need access
3941/// to the element's current power level).
3942#[derive(Debug)]
3943pub enum StatusRequest {
3944    /// Returns the current power level for this element. The first call on
3945    /// this channel will return immediately. Subsequent calls will block until
3946    /// the current power level has changed.
3947    WatchPowerLevel { responder: StatusWatchPowerLevelResponder },
3948    /// An interaction was received which does not match any known method.
3949    #[non_exhaustive]
3950    _UnknownMethod {
3951        /// Ordinal of the method that was called.
3952        ordinal: u64,
3953        control_handle: StatusControlHandle,
3954        method_type: fidl::MethodType,
3955    },
3956}
3957
3958impl StatusRequest {
3959    #[allow(irrefutable_let_patterns)]
3960    pub fn into_watch_power_level(self) -> Option<(StatusWatchPowerLevelResponder)> {
3961        if let StatusRequest::WatchPowerLevel { responder } = self {
3962            Some((responder))
3963        } else {
3964            None
3965        }
3966    }
3967
3968    /// Name of the method defined in FIDL
3969    pub fn method_name(&self) -> &'static str {
3970        match *self {
3971            StatusRequest::WatchPowerLevel { .. } => "watch_power_level",
3972            StatusRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
3973                "unknown one-way method"
3974            }
3975            StatusRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
3976                "unknown two-way method"
3977            }
3978        }
3979    }
3980}
3981
3982#[derive(Debug, Clone)]
3983pub struct StatusControlHandle {
3984    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3985}
3986
3987impl StatusControlHandle {
3988    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
3989        self.inner.shutdown_with_epitaph(status.into())
3990    }
3991}
3992
3993impl fidl::endpoints::ControlHandle for StatusControlHandle {
3994    fn shutdown(&self) {
3995        self.inner.shutdown()
3996    }
3997
3998    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
3999        self.inner.shutdown_with_epitaph(status)
4000    }
4001
4002    fn is_closed(&self) -> bool {
4003        self.inner.channel().is_closed()
4004    }
4005    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
4006        self.inner.channel().on_closed()
4007    }
4008
4009    #[cfg(target_os = "fuchsia")]
4010    fn signal_peer(
4011        &self,
4012        clear_mask: zx::Signals,
4013        set_mask: zx::Signals,
4014    ) -> Result<(), zx_status::Status> {
4015        use fidl::Peered;
4016        self.inner.channel().signal_peer(clear_mask, set_mask)
4017    }
4018}
4019
4020impl StatusControlHandle {}
4021
4022#[must_use = "FIDL methods require a response to be sent"]
4023#[derive(Debug)]
4024pub struct StatusWatchPowerLevelResponder {
4025    control_handle: std::mem::ManuallyDrop<StatusControlHandle>,
4026    tx_id: u32,
4027}
4028
4029/// Set the the channel to be shutdown (see [`StatusControlHandle::shutdown`])
4030/// if the responder is dropped without sending a response, so that the client
4031/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4032impl std::ops::Drop for StatusWatchPowerLevelResponder {
4033    fn drop(&mut self) {
4034        self.control_handle.shutdown();
4035        // Safety: drops once, never accessed again
4036        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4037    }
4038}
4039
4040impl fidl::endpoints::Responder for StatusWatchPowerLevelResponder {
4041    type ControlHandle = StatusControlHandle;
4042
4043    fn control_handle(&self) -> &StatusControlHandle {
4044        &self.control_handle
4045    }
4046
4047    fn drop_without_shutdown(mut self) {
4048        // Safety: drops once, never accessed again due to mem::forget
4049        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4050        // Prevent Drop from running (which would shut down the channel)
4051        std::mem::forget(self);
4052    }
4053}
4054
4055impl StatusWatchPowerLevelResponder {
4056    /// Sends a response to the FIDL transaction.
4057    ///
4058    /// Sets the channel to shutdown if an error occurs.
4059    pub fn send(self, mut result: Result<u8, StatusError>) -> Result<(), fidl::Error> {
4060        let _result = self.send_raw(result);
4061        if _result.is_err() {
4062            self.control_handle.shutdown();
4063        }
4064        self.drop_without_shutdown();
4065        _result
4066    }
4067
4068    /// Similar to "send" but does not shutdown the channel if an error occurs.
4069    pub fn send_no_shutdown_on_err(
4070        self,
4071        mut result: Result<u8, StatusError>,
4072    ) -> Result<(), fidl::Error> {
4073        let _result = self.send_raw(result);
4074        self.drop_without_shutdown();
4075        _result
4076    }
4077
4078    fn send_raw(&self, mut result: Result<u8, StatusError>) -> Result<(), fidl::Error> {
4079        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
4080            StatusWatchPowerLevelResponse,
4081            StatusError,
4082        >>(
4083            fidl::encoding::FlexibleResult::new(result.map(|current_level| (current_level,))),
4084            self.tx_id,
4085            0x2f11ba8df9b5614e,
4086            fidl::encoding::DynamicFlags::FLEXIBLE,
4087        )
4088    }
4089}
4090
4091#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4092pub struct TopologyMarker;
4093
4094impl fidl::endpoints::ProtocolMarker for TopologyMarker {
4095    type Proxy = TopologyProxy;
4096    type RequestStream = TopologyRequestStream;
4097    #[cfg(target_os = "fuchsia")]
4098    type SynchronousProxy = TopologySynchronousProxy;
4099
4100    const DEBUG_NAME: &'static str = "fuchsia.power.broker.Topology";
4101}
4102impl fidl::endpoints::DiscoverableProtocolMarker for TopologyMarker {}
4103pub type TopologyAddElementResult = Result<(), AddElementError>;
4104pub type TopologyLeaseResult = Result<(), LeaseError>;
4105
4106pub trait TopologyProxyInterface: Send + Sync {
4107    type AddElementResponseFut: std::future::Future<Output = Result<TopologyAddElementResult, fidl::Error>>
4108        + Send;
4109    fn r#add_element(&self, payload: ElementSchema) -> Self::AddElementResponseFut;
4110    type LeaseResponseFut: std::future::Future<Output = Result<TopologyLeaseResult, fidl::Error>>
4111        + Send;
4112    fn r#lease(&self, payload: LeaseSchema) -> Self::LeaseResponseFut;
4113}
4114#[derive(Debug)]
4115#[cfg(target_os = "fuchsia")]
4116pub struct TopologySynchronousProxy {
4117    client: fidl::client::sync::Client,
4118}
4119
4120#[cfg(target_os = "fuchsia")]
4121impl fidl::endpoints::SynchronousProxy for TopologySynchronousProxy {
4122    type Proxy = TopologyProxy;
4123    type Protocol = TopologyMarker;
4124
4125    fn from_channel(inner: fidl::Channel) -> Self {
4126        Self::new(inner)
4127    }
4128
4129    fn into_channel(self) -> fidl::Channel {
4130        self.client.into_channel()
4131    }
4132
4133    fn as_channel(&self) -> &fidl::Channel {
4134        self.client.as_channel()
4135    }
4136}
4137
4138#[cfg(target_os = "fuchsia")]
4139impl TopologySynchronousProxy {
4140    pub fn new(channel: fidl::Channel) -> Self {
4141        Self { client: fidl::client::sync::Client::new(channel) }
4142    }
4143
4144    pub fn into_channel(self) -> fidl::Channel {
4145        self.client.into_channel()
4146    }
4147
4148    /// Waits until an event arrives and returns it. It is safe for other
4149    /// threads to make concurrent requests while waiting for an event.
4150    pub fn wait_for_event(
4151        &self,
4152        deadline: zx::MonotonicInstant,
4153    ) -> Result<TopologyEvent, fidl::Error> {
4154        TopologyEvent::decode(self.client.wait_for_event::<TopologyMarker>(deadline)?)
4155    }
4156
4157    /// Called by a Power Element owner to register a new Power Element and
4158    /// open control channels for that element.
4159    pub fn r#add_element(
4160        &self,
4161        mut payload: ElementSchema,
4162        ___deadline: zx::MonotonicInstant,
4163    ) -> Result<TopologyAddElementResult, fidl::Error> {
4164        let _response = self.client.send_query::<
4165            ElementSchema,
4166            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, AddElementError>,
4167            TopologyMarker,
4168        >(
4169            &mut payload,
4170            0x269ed93c9e87fa03,
4171            fidl::encoding::DynamicFlags::FLEXIBLE,
4172            ___deadline,
4173        )?
4174        .into_result::<TopologyMarker>("add_element")?;
4175        Ok(_response.map(|x| x))
4176    }
4177
4178    /// Called by a client to directly open a lease on the given dependencies
4179    /// without the need for creating and managing a new element.
4180    pub fn r#lease(
4181        &self,
4182        mut payload: LeaseSchema,
4183        ___deadline: zx::MonotonicInstant,
4184    ) -> Result<TopologyLeaseResult, fidl::Error> {
4185        let _response = self.client.send_query::<
4186            LeaseSchema,
4187            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, LeaseError>,
4188            TopologyMarker,
4189        >(
4190            &mut payload,
4191            0x7f39c02fb9775330,
4192            fidl::encoding::DynamicFlags::FLEXIBLE,
4193            ___deadline,
4194        )?
4195        .into_result::<TopologyMarker>("lease")?;
4196        Ok(_response.map(|x| x))
4197    }
4198}
4199
4200#[cfg(target_os = "fuchsia")]
4201impl From<TopologySynchronousProxy> for zx::NullableHandle {
4202    fn from(value: TopologySynchronousProxy) -> Self {
4203        value.into_channel().into()
4204    }
4205}
4206
4207#[cfg(target_os = "fuchsia")]
4208impl From<fidl::Channel> for TopologySynchronousProxy {
4209    fn from(value: fidl::Channel) -> Self {
4210        Self::new(value)
4211    }
4212}
4213
4214#[cfg(target_os = "fuchsia")]
4215impl fidl::endpoints::FromClient for TopologySynchronousProxy {
4216    type Protocol = TopologyMarker;
4217
4218    fn from_client(value: fidl::endpoints::ClientEnd<TopologyMarker>) -> Self {
4219        Self::new(value.into_channel())
4220    }
4221}
4222
4223#[derive(Debug, Clone)]
4224pub struct TopologyProxy {
4225    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
4226}
4227
4228impl fidl::endpoints::Proxy for TopologyProxy {
4229    type Protocol = TopologyMarker;
4230
4231    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
4232        Self::new(inner)
4233    }
4234
4235    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
4236        self.client.into_channel().map_err(|client| Self { client })
4237    }
4238
4239    fn as_channel(&self) -> &::fidl::AsyncChannel {
4240        self.client.as_channel()
4241    }
4242}
4243
4244impl TopologyProxy {
4245    /// Create a new Proxy for fuchsia.power.broker/Topology.
4246    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
4247        let protocol_name = <TopologyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
4248        Self { client: fidl::client::Client::new(channel, protocol_name) }
4249    }
4250
4251    /// Get a Stream of events from the remote end of the protocol.
4252    ///
4253    /// # Panics
4254    ///
4255    /// Panics if the event stream was already taken.
4256    pub fn take_event_stream(&self) -> TopologyEventStream {
4257        TopologyEventStream { event_receiver: self.client.take_event_receiver() }
4258    }
4259
4260    /// Called by a Power Element owner to register a new Power Element and
4261    /// open control channels for that element.
4262    pub fn r#add_element(
4263        &self,
4264        mut payload: ElementSchema,
4265    ) -> fidl::client::QueryResponseFut<
4266        TopologyAddElementResult,
4267        fidl::encoding::DefaultFuchsiaResourceDialect,
4268    > {
4269        TopologyProxyInterface::r#add_element(self, payload)
4270    }
4271
4272    /// Called by a client to directly open a lease on the given dependencies
4273    /// without the need for creating and managing a new element.
4274    pub fn r#lease(
4275        &self,
4276        mut payload: LeaseSchema,
4277    ) -> fidl::client::QueryResponseFut<
4278        TopologyLeaseResult,
4279        fidl::encoding::DefaultFuchsiaResourceDialect,
4280    > {
4281        TopologyProxyInterface::r#lease(self, payload)
4282    }
4283}
4284
4285impl TopologyProxyInterface for TopologyProxy {
4286    type AddElementResponseFut = fidl::client::QueryResponseFut<
4287        TopologyAddElementResult,
4288        fidl::encoding::DefaultFuchsiaResourceDialect,
4289    >;
4290    fn r#add_element(&self, mut payload: ElementSchema) -> Self::AddElementResponseFut {
4291        fn _decode(
4292            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4293        ) -> Result<TopologyAddElementResult, fidl::Error> {
4294            let _response = fidl::client::decode_transaction_body::<
4295                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, AddElementError>,
4296                fidl::encoding::DefaultFuchsiaResourceDialect,
4297                0x269ed93c9e87fa03,
4298            >(_buf?)?
4299            .into_result::<TopologyMarker>("add_element")?;
4300            Ok(_response.map(|x| x))
4301        }
4302        self.client.send_query_and_decode::<ElementSchema, TopologyAddElementResult>(
4303            &mut payload,
4304            0x269ed93c9e87fa03,
4305            fidl::encoding::DynamicFlags::FLEXIBLE,
4306            _decode,
4307        )
4308    }
4309
4310    type LeaseResponseFut = fidl::client::QueryResponseFut<
4311        TopologyLeaseResult,
4312        fidl::encoding::DefaultFuchsiaResourceDialect,
4313    >;
4314    fn r#lease(&self, mut payload: LeaseSchema) -> Self::LeaseResponseFut {
4315        fn _decode(
4316            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
4317        ) -> Result<TopologyLeaseResult, fidl::Error> {
4318            let _response = fidl::client::decode_transaction_body::<
4319                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, LeaseError>,
4320                fidl::encoding::DefaultFuchsiaResourceDialect,
4321                0x7f39c02fb9775330,
4322            >(_buf?)?
4323            .into_result::<TopologyMarker>("lease")?;
4324            Ok(_response.map(|x| x))
4325        }
4326        self.client.send_query_and_decode::<LeaseSchema, TopologyLeaseResult>(
4327            &mut payload,
4328            0x7f39c02fb9775330,
4329            fidl::encoding::DynamicFlags::FLEXIBLE,
4330            _decode,
4331        )
4332    }
4333}
4334
4335pub struct TopologyEventStream {
4336    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
4337}
4338
4339impl std::marker::Unpin for TopologyEventStream {}
4340
4341impl futures::stream::FusedStream for TopologyEventStream {
4342    fn is_terminated(&self) -> bool {
4343        self.event_receiver.is_terminated()
4344    }
4345}
4346
4347impl futures::Stream for TopologyEventStream {
4348    type Item = Result<TopologyEvent, fidl::Error>;
4349
4350    fn poll_next(
4351        mut self: std::pin::Pin<&mut Self>,
4352        cx: &mut std::task::Context<'_>,
4353    ) -> std::task::Poll<Option<Self::Item>> {
4354        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
4355            &mut self.event_receiver,
4356            cx
4357        )?) {
4358            Some(buf) => std::task::Poll::Ready(Some(TopologyEvent::decode(buf))),
4359            None => std::task::Poll::Ready(None),
4360        }
4361    }
4362}
4363
4364#[derive(Debug)]
4365pub enum TopologyEvent {
4366    #[non_exhaustive]
4367    _UnknownEvent {
4368        /// Ordinal of the event that was sent.
4369        ordinal: u64,
4370    },
4371}
4372
4373impl TopologyEvent {
4374    /// Decodes a message buffer as a [`TopologyEvent`].
4375    fn decode(
4376        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
4377    ) -> Result<TopologyEvent, fidl::Error> {
4378        let (bytes, _handles) = buf.split_mut();
4379        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4380        debug_assert_eq!(tx_header.tx_id, 0);
4381        match tx_header.ordinal {
4382            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
4383                Ok(TopologyEvent::_UnknownEvent { ordinal: tx_header.ordinal })
4384            }
4385            _ => Err(fidl::Error::UnknownOrdinal {
4386                ordinal: tx_header.ordinal,
4387                protocol_name: <TopologyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4388            }),
4389        }
4390    }
4391}
4392
4393/// A Stream of incoming requests for fuchsia.power.broker/Topology.
4394pub struct TopologyRequestStream {
4395    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4396    is_terminated: bool,
4397}
4398
4399impl std::marker::Unpin for TopologyRequestStream {}
4400
4401impl futures::stream::FusedStream for TopologyRequestStream {
4402    fn is_terminated(&self) -> bool {
4403        self.is_terminated
4404    }
4405}
4406
4407impl fidl::endpoints::RequestStream for TopologyRequestStream {
4408    type Protocol = TopologyMarker;
4409    type ControlHandle = TopologyControlHandle;
4410
4411    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
4412        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
4413    }
4414
4415    fn control_handle(&self) -> Self::ControlHandle {
4416        TopologyControlHandle { inner: self.inner.clone() }
4417    }
4418
4419    fn into_inner(
4420        self,
4421    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
4422    {
4423        (self.inner, self.is_terminated)
4424    }
4425
4426    fn from_inner(
4427        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4428        is_terminated: bool,
4429    ) -> Self {
4430        Self { inner, is_terminated }
4431    }
4432}
4433
4434impl futures::Stream for TopologyRequestStream {
4435    type Item = Result<TopologyRequest, fidl::Error>;
4436
4437    fn poll_next(
4438        mut self: std::pin::Pin<&mut Self>,
4439        cx: &mut std::task::Context<'_>,
4440    ) -> std::task::Poll<Option<Self::Item>> {
4441        let this = &mut *self;
4442        if this.inner.check_shutdown(cx) {
4443            this.is_terminated = true;
4444            return std::task::Poll::Ready(None);
4445        }
4446        if this.is_terminated {
4447            panic!("polled TopologyRequestStream after completion");
4448        }
4449        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
4450            |bytes, handles| {
4451                match this.inner.channel().read_etc(cx, bytes, handles) {
4452                    std::task::Poll::Ready(Ok(())) => {}
4453                    std::task::Poll::Pending => return std::task::Poll::Pending,
4454                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
4455                        this.is_terminated = true;
4456                        return std::task::Poll::Ready(None);
4457                    }
4458                    std::task::Poll::Ready(Err(e)) => {
4459                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
4460                            e.into(),
4461                        ))));
4462                    }
4463                }
4464
4465                // A message has been received from the channel
4466                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
4467
4468                std::task::Poll::Ready(Some(match header.ordinal {
4469                    0x269ed93c9e87fa03 => {
4470                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
4471                        let mut req = fidl::new_empty!(
4472                            ElementSchema,
4473                            fidl::encoding::DefaultFuchsiaResourceDialect
4474                        );
4475                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ElementSchema>(&header, _body_bytes, handles, &mut req)?;
4476                        let control_handle = TopologyControlHandle { inner: this.inner.clone() };
4477                        Ok(TopologyRequest::AddElement {
4478                            payload: req,
4479                            responder: TopologyAddElementResponder {
4480                                control_handle: std::mem::ManuallyDrop::new(control_handle),
4481                                tx_id: header.tx_id,
4482                            },
4483                        })
4484                    }
4485                    0x7f39c02fb9775330 => {
4486                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
4487                        let mut req = fidl::new_empty!(
4488                            LeaseSchema,
4489                            fidl::encoding::DefaultFuchsiaResourceDialect
4490                        );
4491                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<LeaseSchema>(&header, _body_bytes, handles, &mut req)?;
4492                        let control_handle = TopologyControlHandle { inner: this.inner.clone() };
4493                        Ok(TopologyRequest::Lease {
4494                            payload: req,
4495                            responder: TopologyLeaseResponder {
4496                                control_handle: std::mem::ManuallyDrop::new(control_handle),
4497                                tx_id: header.tx_id,
4498                            },
4499                        })
4500                    }
4501                    _ if header.tx_id == 0
4502                        && header
4503                            .dynamic_flags()
4504                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
4505                    {
4506                        Ok(TopologyRequest::_UnknownMethod {
4507                            ordinal: header.ordinal,
4508                            control_handle: TopologyControlHandle { inner: this.inner.clone() },
4509                            method_type: fidl::MethodType::OneWay,
4510                        })
4511                    }
4512                    _ if header
4513                        .dynamic_flags()
4514                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
4515                    {
4516                        this.inner.send_framework_err(
4517                            fidl::encoding::FrameworkErr::UnknownMethod,
4518                            header.tx_id,
4519                            header.ordinal,
4520                            header.dynamic_flags(),
4521                            (bytes, handles),
4522                        )?;
4523                        Ok(TopologyRequest::_UnknownMethod {
4524                            ordinal: header.ordinal,
4525                            control_handle: TopologyControlHandle { inner: this.inner.clone() },
4526                            method_type: fidl::MethodType::TwoWay,
4527                        })
4528                    }
4529                    _ => Err(fidl::Error::UnknownOrdinal {
4530                        ordinal: header.ordinal,
4531                        protocol_name:
4532                            <TopologyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
4533                    }),
4534                }))
4535            },
4536        )
4537    }
4538}
4539
4540/// This is the primary initial protocol used by Power Element Owners to
4541/// communicate with Power Broker. Power Element Owners should add the
4542/// elements they own to the Power Topology through AddElement. All further
4543/// interactions with Power Broker are done through channels opened by the
4544/// AddElement call, which are scoped to the added element.
4545#[derive(Debug)]
4546pub enum TopologyRequest {
4547    /// Called by a Power Element owner to register a new Power Element and
4548    /// open control channels for that element.
4549    AddElement { payload: ElementSchema, responder: TopologyAddElementResponder },
4550    /// Called by a client to directly open a lease on the given dependencies
4551    /// without the need for creating and managing a new element.
4552    Lease { payload: LeaseSchema, responder: TopologyLeaseResponder },
4553    /// An interaction was received which does not match any known method.
4554    #[non_exhaustive]
4555    _UnknownMethod {
4556        /// Ordinal of the method that was called.
4557        ordinal: u64,
4558        control_handle: TopologyControlHandle,
4559        method_type: fidl::MethodType,
4560    },
4561}
4562
4563impl TopologyRequest {
4564    #[allow(irrefutable_let_patterns)]
4565    pub fn into_add_element(self) -> Option<(ElementSchema, TopologyAddElementResponder)> {
4566        if let TopologyRequest::AddElement { payload, responder } = self {
4567            Some((payload, responder))
4568        } else {
4569            None
4570        }
4571    }
4572
4573    #[allow(irrefutable_let_patterns)]
4574    pub fn into_lease(self) -> Option<(LeaseSchema, TopologyLeaseResponder)> {
4575        if let TopologyRequest::Lease { payload, responder } = self {
4576            Some((payload, responder))
4577        } else {
4578            None
4579        }
4580    }
4581
4582    /// Name of the method defined in FIDL
4583    pub fn method_name(&self) -> &'static str {
4584        match *self {
4585            TopologyRequest::AddElement { .. } => "add_element",
4586            TopologyRequest::Lease { .. } => "lease",
4587            TopologyRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
4588                "unknown one-way method"
4589            }
4590            TopologyRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
4591                "unknown two-way method"
4592            }
4593        }
4594    }
4595}
4596
4597#[derive(Debug, Clone)]
4598pub struct TopologyControlHandle {
4599    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
4600}
4601
4602impl TopologyControlHandle {
4603    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
4604        self.inner.shutdown_with_epitaph(status.into())
4605    }
4606}
4607
4608impl fidl::endpoints::ControlHandle for TopologyControlHandle {
4609    fn shutdown(&self) {
4610        self.inner.shutdown()
4611    }
4612
4613    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
4614        self.inner.shutdown_with_epitaph(status)
4615    }
4616
4617    fn is_closed(&self) -> bool {
4618        self.inner.channel().is_closed()
4619    }
4620    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
4621        self.inner.channel().on_closed()
4622    }
4623
4624    #[cfg(target_os = "fuchsia")]
4625    fn signal_peer(
4626        &self,
4627        clear_mask: zx::Signals,
4628        set_mask: zx::Signals,
4629    ) -> Result<(), zx_status::Status> {
4630        use fidl::Peered;
4631        self.inner.channel().signal_peer(clear_mask, set_mask)
4632    }
4633}
4634
4635impl TopologyControlHandle {}
4636
4637#[must_use = "FIDL methods require a response to be sent"]
4638#[derive(Debug)]
4639pub struct TopologyAddElementResponder {
4640    control_handle: std::mem::ManuallyDrop<TopologyControlHandle>,
4641    tx_id: u32,
4642}
4643
4644/// Set the the channel to be shutdown (see [`TopologyControlHandle::shutdown`])
4645/// if the responder is dropped without sending a response, so that the client
4646/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4647impl std::ops::Drop for TopologyAddElementResponder {
4648    fn drop(&mut self) {
4649        self.control_handle.shutdown();
4650        // Safety: drops once, never accessed again
4651        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4652    }
4653}
4654
4655impl fidl::endpoints::Responder for TopologyAddElementResponder {
4656    type ControlHandle = TopologyControlHandle;
4657
4658    fn control_handle(&self) -> &TopologyControlHandle {
4659        &self.control_handle
4660    }
4661
4662    fn drop_without_shutdown(mut self) {
4663        // Safety: drops once, never accessed again due to mem::forget
4664        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4665        // Prevent Drop from running (which would shut down the channel)
4666        std::mem::forget(self);
4667    }
4668}
4669
4670impl TopologyAddElementResponder {
4671    /// Sends a response to the FIDL transaction.
4672    ///
4673    /// Sets the channel to shutdown if an error occurs.
4674    pub fn send(self, mut result: Result<(), AddElementError>) -> Result<(), fidl::Error> {
4675        let _result = self.send_raw(result);
4676        if _result.is_err() {
4677            self.control_handle.shutdown();
4678        }
4679        self.drop_without_shutdown();
4680        _result
4681    }
4682
4683    /// Similar to "send" but does not shutdown the channel if an error occurs.
4684    pub fn send_no_shutdown_on_err(
4685        self,
4686        mut result: Result<(), AddElementError>,
4687    ) -> Result<(), fidl::Error> {
4688        let _result = self.send_raw(result);
4689        self.drop_without_shutdown();
4690        _result
4691    }
4692
4693    fn send_raw(&self, mut result: Result<(), AddElementError>) -> Result<(), fidl::Error> {
4694        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
4695            fidl::encoding::EmptyStruct,
4696            AddElementError,
4697        >>(
4698            fidl::encoding::FlexibleResult::new(result),
4699            self.tx_id,
4700            0x269ed93c9e87fa03,
4701            fidl::encoding::DynamicFlags::FLEXIBLE,
4702        )
4703    }
4704}
4705
4706#[must_use = "FIDL methods require a response to be sent"]
4707#[derive(Debug)]
4708pub struct TopologyLeaseResponder {
4709    control_handle: std::mem::ManuallyDrop<TopologyControlHandle>,
4710    tx_id: u32,
4711}
4712
4713/// Set the the channel to be shutdown (see [`TopologyControlHandle::shutdown`])
4714/// if the responder is dropped without sending a response, so that the client
4715/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
4716impl std::ops::Drop for TopologyLeaseResponder {
4717    fn drop(&mut self) {
4718        self.control_handle.shutdown();
4719        // Safety: drops once, never accessed again
4720        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4721    }
4722}
4723
4724impl fidl::endpoints::Responder for TopologyLeaseResponder {
4725    type ControlHandle = TopologyControlHandle;
4726
4727    fn control_handle(&self) -> &TopologyControlHandle {
4728        &self.control_handle
4729    }
4730
4731    fn drop_without_shutdown(mut self) {
4732        // Safety: drops once, never accessed again due to mem::forget
4733        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
4734        // Prevent Drop from running (which would shut down the channel)
4735        std::mem::forget(self);
4736    }
4737}
4738
4739impl TopologyLeaseResponder {
4740    /// Sends a response to the FIDL transaction.
4741    ///
4742    /// Sets the channel to shutdown if an error occurs.
4743    pub fn send(self, mut result: Result<(), LeaseError>) -> Result<(), fidl::Error> {
4744        let _result = self.send_raw(result);
4745        if _result.is_err() {
4746            self.control_handle.shutdown();
4747        }
4748        self.drop_without_shutdown();
4749        _result
4750    }
4751
4752    /// Similar to "send" but does not shutdown the channel if an error occurs.
4753    pub fn send_no_shutdown_on_err(
4754        self,
4755        mut result: Result<(), LeaseError>,
4756    ) -> Result<(), fidl::Error> {
4757        let _result = self.send_raw(result);
4758        self.drop_without_shutdown();
4759        _result
4760    }
4761
4762    fn send_raw(&self, mut result: Result<(), LeaseError>) -> Result<(), fidl::Error> {
4763        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
4764            fidl::encoding::EmptyStruct,
4765            LeaseError,
4766        >>(
4767            fidl::encoding::FlexibleResult::new(result),
4768            self.tx_id,
4769            0x7f39c02fb9775330,
4770            fidl::encoding::DynamicFlags::FLEXIBLE,
4771        )
4772    }
4773}
4774
4775#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4776pub struct ElementInfoProviderServiceMarker;
4777
4778#[cfg(target_os = "fuchsia")]
4779impl fidl::endpoints::ServiceMarker for ElementInfoProviderServiceMarker {
4780    type Proxy = ElementInfoProviderServiceProxy;
4781    type Request = ElementInfoProviderServiceRequest;
4782    const SERVICE_NAME: &'static str = "fuchsia.power.broker.ElementInfoProviderService";
4783}
4784
4785/// A request for one of the member protocols of ElementInfoProviderService.
4786///
4787#[cfg(target_os = "fuchsia")]
4788pub enum ElementInfoProviderServiceRequest {
4789    StatusProvider(ElementInfoProviderRequestStream),
4790}
4791
4792#[cfg(target_os = "fuchsia")]
4793impl fidl::endpoints::ServiceRequest for ElementInfoProviderServiceRequest {
4794    type Service = ElementInfoProviderServiceMarker;
4795
4796    fn dispatch(name: &str, _channel: fidl::AsyncChannel) -> Self {
4797        match name {
4798            "status_provider" => Self::StatusProvider(
4799                <ElementInfoProviderRequestStream as fidl::endpoints::RequestStream>::from_channel(
4800                    _channel,
4801                ),
4802            ),
4803            _ => panic!("no such member protocol name for service ElementInfoProviderService"),
4804        }
4805    }
4806
4807    fn member_names() -> &'static [&'static str] {
4808        &["status_provider"]
4809    }
4810}
4811#[cfg(target_os = "fuchsia")]
4812pub struct ElementInfoProviderServiceProxy(
4813    #[allow(dead_code)] Box<dyn fidl::endpoints::MemberOpener>,
4814);
4815
4816#[cfg(target_os = "fuchsia")]
4817impl fidl::endpoints::ServiceProxy for ElementInfoProviderServiceProxy {
4818    type Service = ElementInfoProviderServiceMarker;
4819
4820    fn from_member_opener(opener: Box<dyn fidl::endpoints::MemberOpener>) -> Self {
4821        Self(opener)
4822    }
4823}
4824
4825#[cfg(target_os = "fuchsia")]
4826impl ElementInfoProviderServiceProxy {
4827    pub fn connect_to_status_provider(&self) -> Result<ElementInfoProviderProxy, fidl::Error> {
4828        let (proxy, server_end) = fidl::endpoints::create_proxy::<ElementInfoProviderMarker>();
4829        self.connect_channel_to_status_provider(server_end)?;
4830        Ok(proxy)
4831    }
4832
4833    /// Like `connect_to_status_provider`, but returns a sync proxy.
4834    /// See [`Self::connect_to_status_provider`] for more details.
4835    pub fn connect_to_status_provider_sync(
4836        &self,
4837    ) -> Result<ElementInfoProviderSynchronousProxy, fidl::Error> {
4838        let (proxy, server_end) = fidl::endpoints::create_sync_proxy::<ElementInfoProviderMarker>();
4839        self.connect_channel_to_status_provider(server_end)?;
4840        Ok(proxy)
4841    }
4842
4843    /// Like `connect_to_status_provider`, but accepts a server end.
4844    /// See [`Self::connect_to_status_provider`] for more details.
4845    pub fn connect_channel_to_status_provider(
4846        &self,
4847        server_end: fidl::endpoints::ServerEnd<ElementInfoProviderMarker>,
4848    ) -> Result<(), fidl::Error> {
4849        self.0.open_member("status_provider", server_end.into_channel())
4850    }
4851
4852    pub fn instance_name(&self) -> &str {
4853        self.0.instance_name()
4854    }
4855}
4856
4857mod internal {
4858    use super::*;
4859
4860    impl fidl::encoding::ResourceTypeMarker for ElementControlOpenStatusChannelRequest {
4861        type Borrowed<'a> = &'a mut Self;
4862        fn take_or_borrow<'a>(
4863            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4864        ) -> Self::Borrowed<'a> {
4865            value
4866        }
4867    }
4868
4869    unsafe impl fidl::encoding::TypeMarker for ElementControlOpenStatusChannelRequest {
4870        type Owned = Self;
4871
4872        #[inline(always)]
4873        fn inline_align(_context: fidl::encoding::Context) -> usize {
4874            4
4875        }
4876
4877        #[inline(always)]
4878        fn inline_size(_context: fidl::encoding::Context) -> usize {
4879            4
4880        }
4881    }
4882
4883    unsafe impl
4884        fidl::encoding::Encode<
4885            ElementControlOpenStatusChannelRequest,
4886            fidl::encoding::DefaultFuchsiaResourceDialect,
4887        > for &mut ElementControlOpenStatusChannelRequest
4888    {
4889        #[inline]
4890        unsafe fn encode(
4891            self,
4892            encoder: &mut fidl::encoding::Encoder<
4893                '_,
4894                fidl::encoding::DefaultFuchsiaResourceDialect,
4895            >,
4896            offset: usize,
4897            _depth: fidl::encoding::Depth,
4898        ) -> fidl::Result<()> {
4899            encoder.debug_check_bounds::<ElementControlOpenStatusChannelRequest>(offset);
4900            // Delegate to tuple encoding.
4901            fidl::encoding::Encode::<ElementControlOpenStatusChannelRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
4902                (
4903                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<StatusMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.status_channel),
4904                ),
4905                encoder, offset, _depth
4906            )
4907        }
4908    }
4909    unsafe impl<
4910        T0: fidl::encoding::Encode<
4911                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<StatusMarker>>,
4912                fidl::encoding::DefaultFuchsiaResourceDialect,
4913            >,
4914    >
4915        fidl::encoding::Encode<
4916            ElementControlOpenStatusChannelRequest,
4917            fidl::encoding::DefaultFuchsiaResourceDialect,
4918        > for (T0,)
4919    {
4920        #[inline]
4921        unsafe fn encode(
4922            self,
4923            encoder: &mut fidl::encoding::Encoder<
4924                '_,
4925                fidl::encoding::DefaultFuchsiaResourceDialect,
4926            >,
4927            offset: usize,
4928            depth: fidl::encoding::Depth,
4929        ) -> fidl::Result<()> {
4930            encoder.debug_check_bounds::<ElementControlOpenStatusChannelRequest>(offset);
4931            // Zero out padding regions. There's no need to apply masks
4932            // because the unmasked parts will be overwritten by fields.
4933            // Write the fields.
4934            self.0.encode(encoder, offset + 0, depth)?;
4935            Ok(())
4936        }
4937    }
4938
4939    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4940        for ElementControlOpenStatusChannelRequest
4941    {
4942        #[inline(always)]
4943        fn new_empty() -> Self {
4944            Self {
4945                status_channel: fidl::new_empty!(
4946                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<StatusMarker>>,
4947                    fidl::encoding::DefaultFuchsiaResourceDialect
4948                ),
4949            }
4950        }
4951
4952        #[inline]
4953        unsafe fn decode(
4954            &mut self,
4955            decoder: &mut fidl::encoding::Decoder<
4956                '_,
4957                fidl::encoding::DefaultFuchsiaResourceDialect,
4958            >,
4959            offset: usize,
4960            _depth: fidl::encoding::Depth,
4961        ) -> fidl::Result<()> {
4962            decoder.debug_check_bounds::<Self>(offset);
4963            // Verify that padding bytes are zero.
4964            fidl::decode!(
4965                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<StatusMarker>>,
4966                fidl::encoding::DefaultFuchsiaResourceDialect,
4967                &mut self.status_channel,
4968                decoder,
4969                offset + 0,
4970                _depth
4971            )?;
4972            Ok(())
4973        }
4974    }
4975
4976    impl fidl::encoding::ResourceTypeMarker for ElementControlRegisterDependencyTokenRequest {
4977        type Borrowed<'a> = &'a mut Self;
4978        fn take_or_borrow<'a>(
4979            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4980        ) -> Self::Borrowed<'a> {
4981            value
4982        }
4983    }
4984
4985    unsafe impl fidl::encoding::TypeMarker for ElementControlRegisterDependencyTokenRequest {
4986        type Owned = Self;
4987
4988        #[inline(always)]
4989        fn inline_align(_context: fidl::encoding::Context) -> usize {
4990            4
4991        }
4992
4993        #[inline(always)]
4994        fn inline_size(_context: fidl::encoding::Context) -> usize {
4995            4
4996        }
4997    }
4998
4999    unsafe impl
5000        fidl::encoding::Encode<
5001            ElementControlRegisterDependencyTokenRequest,
5002            fidl::encoding::DefaultFuchsiaResourceDialect,
5003        > for &mut ElementControlRegisterDependencyTokenRequest
5004    {
5005        #[inline]
5006        unsafe fn encode(
5007            self,
5008            encoder: &mut fidl::encoding::Encoder<
5009                '_,
5010                fidl::encoding::DefaultFuchsiaResourceDialect,
5011            >,
5012            offset: usize,
5013            _depth: fidl::encoding::Depth,
5014        ) -> fidl::Result<()> {
5015            encoder.debug_check_bounds::<ElementControlRegisterDependencyTokenRequest>(offset);
5016            // Delegate to tuple encoding.
5017            fidl::encoding::Encode::<
5018                ElementControlRegisterDependencyTokenRequest,
5019                fidl::encoding::DefaultFuchsiaResourceDialect,
5020            >::encode(
5021                (<fidl::encoding::HandleType<
5022                    fidl::Event,
5023                    { fidl::ObjectType::EVENT.into_raw() },
5024                    2147483648,
5025                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
5026                    &mut self.token
5027                ),),
5028                encoder,
5029                offset,
5030                _depth,
5031            )
5032        }
5033    }
5034    unsafe impl<
5035        T0: fidl::encoding::Encode<
5036                fidl::encoding::HandleType<
5037                    fidl::Event,
5038                    { fidl::ObjectType::EVENT.into_raw() },
5039                    2147483648,
5040                >,
5041                fidl::encoding::DefaultFuchsiaResourceDialect,
5042            >,
5043    >
5044        fidl::encoding::Encode<
5045            ElementControlRegisterDependencyTokenRequest,
5046            fidl::encoding::DefaultFuchsiaResourceDialect,
5047        > for (T0,)
5048    {
5049        #[inline]
5050        unsafe fn encode(
5051            self,
5052            encoder: &mut fidl::encoding::Encoder<
5053                '_,
5054                fidl::encoding::DefaultFuchsiaResourceDialect,
5055            >,
5056            offset: usize,
5057            depth: fidl::encoding::Depth,
5058        ) -> fidl::Result<()> {
5059            encoder.debug_check_bounds::<ElementControlRegisterDependencyTokenRequest>(offset);
5060            // Zero out padding regions. There's no need to apply masks
5061            // because the unmasked parts will be overwritten by fields.
5062            // Write the fields.
5063            self.0.encode(encoder, offset + 0, depth)?;
5064            Ok(())
5065        }
5066    }
5067
5068    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5069        for ElementControlRegisterDependencyTokenRequest
5070    {
5071        #[inline(always)]
5072        fn new_empty() -> Self {
5073            Self {
5074                token: fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
5075            }
5076        }
5077
5078        #[inline]
5079        unsafe fn decode(
5080            &mut self,
5081            decoder: &mut fidl::encoding::Decoder<
5082                '_,
5083                fidl::encoding::DefaultFuchsiaResourceDialect,
5084            >,
5085            offset: usize,
5086            _depth: fidl::encoding::Depth,
5087        ) -> fidl::Result<()> {
5088            decoder.debug_check_bounds::<Self>(offset);
5089            // Verify that padding bytes are zero.
5090            fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.token, decoder, offset + 0, _depth)?;
5091            Ok(())
5092        }
5093    }
5094
5095    impl fidl::encoding::ResourceTypeMarker for ElementControlUnregisterDependencyTokenRequest {
5096        type Borrowed<'a> = &'a mut Self;
5097        fn take_or_borrow<'a>(
5098            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5099        ) -> Self::Borrowed<'a> {
5100            value
5101        }
5102    }
5103
5104    unsafe impl fidl::encoding::TypeMarker for ElementControlUnregisterDependencyTokenRequest {
5105        type Owned = Self;
5106
5107        #[inline(always)]
5108        fn inline_align(_context: fidl::encoding::Context) -> usize {
5109            4
5110        }
5111
5112        #[inline(always)]
5113        fn inline_size(_context: fidl::encoding::Context) -> usize {
5114            4
5115        }
5116    }
5117
5118    unsafe impl
5119        fidl::encoding::Encode<
5120            ElementControlUnregisterDependencyTokenRequest,
5121            fidl::encoding::DefaultFuchsiaResourceDialect,
5122        > for &mut ElementControlUnregisterDependencyTokenRequest
5123    {
5124        #[inline]
5125        unsafe fn encode(
5126            self,
5127            encoder: &mut fidl::encoding::Encoder<
5128                '_,
5129                fidl::encoding::DefaultFuchsiaResourceDialect,
5130            >,
5131            offset: usize,
5132            _depth: fidl::encoding::Depth,
5133        ) -> fidl::Result<()> {
5134            encoder.debug_check_bounds::<ElementControlUnregisterDependencyTokenRequest>(offset);
5135            // Delegate to tuple encoding.
5136            fidl::encoding::Encode::<
5137                ElementControlUnregisterDependencyTokenRequest,
5138                fidl::encoding::DefaultFuchsiaResourceDialect,
5139            >::encode(
5140                (<fidl::encoding::HandleType<
5141                    fidl::Event,
5142                    { fidl::ObjectType::EVENT.into_raw() },
5143                    2147483648,
5144                > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
5145                    &mut self.token
5146                ),),
5147                encoder,
5148                offset,
5149                _depth,
5150            )
5151        }
5152    }
5153    unsafe impl<
5154        T0: fidl::encoding::Encode<
5155                fidl::encoding::HandleType<
5156                    fidl::Event,
5157                    { fidl::ObjectType::EVENT.into_raw() },
5158                    2147483648,
5159                >,
5160                fidl::encoding::DefaultFuchsiaResourceDialect,
5161            >,
5162    >
5163        fidl::encoding::Encode<
5164            ElementControlUnregisterDependencyTokenRequest,
5165            fidl::encoding::DefaultFuchsiaResourceDialect,
5166        > for (T0,)
5167    {
5168        #[inline]
5169        unsafe fn encode(
5170            self,
5171            encoder: &mut fidl::encoding::Encoder<
5172                '_,
5173                fidl::encoding::DefaultFuchsiaResourceDialect,
5174            >,
5175            offset: usize,
5176            depth: fidl::encoding::Depth,
5177        ) -> fidl::Result<()> {
5178            encoder.debug_check_bounds::<ElementControlUnregisterDependencyTokenRequest>(offset);
5179            // Zero out padding regions. There's no need to apply masks
5180            // because the unmasked parts will be overwritten by fields.
5181            // Write the fields.
5182            self.0.encode(encoder, offset + 0, depth)?;
5183            Ok(())
5184        }
5185    }
5186
5187    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5188        for ElementControlUnregisterDependencyTokenRequest
5189    {
5190        #[inline(always)]
5191        fn new_empty() -> Self {
5192            Self {
5193                token: fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
5194            }
5195        }
5196
5197        #[inline]
5198        unsafe fn decode(
5199            &mut self,
5200            decoder: &mut fidl::encoding::Decoder<
5201                '_,
5202                fidl::encoding::DefaultFuchsiaResourceDialect,
5203            >,
5204            offset: usize,
5205            _depth: fidl::encoding::Depth,
5206        ) -> fidl::Result<()> {
5207            decoder.debug_check_bounds::<Self>(offset);
5208            // Verify that padding bytes are zero.
5209            fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.token, decoder, offset + 0, _depth)?;
5210            Ok(())
5211        }
5212    }
5213
5214    impl fidl::encoding::ResourceTypeMarker for ElementInfoProviderGetElementPowerLevelNamesResponse {
5215        type Borrowed<'a> = &'a mut Self;
5216        fn take_or_borrow<'a>(
5217            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5218        ) -> Self::Borrowed<'a> {
5219            value
5220        }
5221    }
5222
5223    unsafe impl fidl::encoding::TypeMarker for ElementInfoProviderGetElementPowerLevelNamesResponse {
5224        type Owned = Self;
5225
5226        #[inline(always)]
5227        fn inline_align(_context: fidl::encoding::Context) -> usize {
5228            8
5229        }
5230
5231        #[inline(always)]
5232        fn inline_size(_context: fidl::encoding::Context) -> usize {
5233            16
5234        }
5235    }
5236
5237    unsafe impl
5238        fidl::encoding::Encode<
5239            ElementInfoProviderGetElementPowerLevelNamesResponse,
5240            fidl::encoding::DefaultFuchsiaResourceDialect,
5241        > for &mut ElementInfoProviderGetElementPowerLevelNamesResponse
5242    {
5243        #[inline]
5244        unsafe fn encode(
5245            self,
5246            encoder: &mut fidl::encoding::Encoder<
5247                '_,
5248                fidl::encoding::DefaultFuchsiaResourceDialect,
5249            >,
5250            offset: usize,
5251            _depth: fidl::encoding::Depth,
5252        ) -> fidl::Result<()> {
5253            encoder
5254                .debug_check_bounds::<ElementInfoProviderGetElementPowerLevelNamesResponse>(offset);
5255            // Delegate to tuple encoding.
5256            fidl::encoding::Encode::<ElementInfoProviderGetElementPowerLevelNamesResponse, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
5257                (
5258                    <fidl::encoding::UnboundedVector<ElementPowerLevelNames> as fidl::encoding::ValueTypeMarker>::borrow(&self.level_names),
5259                ),
5260                encoder, offset, _depth
5261            )
5262        }
5263    }
5264    unsafe impl<
5265        T0: fidl::encoding::Encode<
5266                fidl::encoding::UnboundedVector<ElementPowerLevelNames>,
5267                fidl::encoding::DefaultFuchsiaResourceDialect,
5268            >,
5269    >
5270        fidl::encoding::Encode<
5271            ElementInfoProviderGetElementPowerLevelNamesResponse,
5272            fidl::encoding::DefaultFuchsiaResourceDialect,
5273        > for (T0,)
5274    {
5275        #[inline]
5276        unsafe fn encode(
5277            self,
5278            encoder: &mut fidl::encoding::Encoder<
5279                '_,
5280                fidl::encoding::DefaultFuchsiaResourceDialect,
5281            >,
5282            offset: usize,
5283            depth: fidl::encoding::Depth,
5284        ) -> fidl::Result<()> {
5285            encoder
5286                .debug_check_bounds::<ElementInfoProviderGetElementPowerLevelNamesResponse>(offset);
5287            // Zero out padding regions. There's no need to apply masks
5288            // because the unmasked parts will be overwritten by fields.
5289            // Write the fields.
5290            self.0.encode(encoder, offset + 0, depth)?;
5291            Ok(())
5292        }
5293    }
5294
5295    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5296        for ElementInfoProviderGetElementPowerLevelNamesResponse
5297    {
5298        #[inline(always)]
5299        fn new_empty() -> Self {
5300            Self {
5301                level_names: fidl::new_empty!(
5302                    fidl::encoding::UnboundedVector<ElementPowerLevelNames>,
5303                    fidl::encoding::DefaultFuchsiaResourceDialect
5304                ),
5305            }
5306        }
5307
5308        #[inline]
5309        unsafe fn decode(
5310            &mut self,
5311            decoder: &mut fidl::encoding::Decoder<
5312                '_,
5313                fidl::encoding::DefaultFuchsiaResourceDialect,
5314            >,
5315            offset: usize,
5316            _depth: fidl::encoding::Depth,
5317        ) -> fidl::Result<()> {
5318            decoder.debug_check_bounds::<Self>(offset);
5319            // Verify that padding bytes are zero.
5320            fidl::decode!(
5321                fidl::encoding::UnboundedVector<ElementPowerLevelNames>,
5322                fidl::encoding::DefaultFuchsiaResourceDialect,
5323                &mut self.level_names,
5324                decoder,
5325                offset + 0,
5326                _depth
5327            )?;
5328            Ok(())
5329        }
5330    }
5331
5332    impl fidl::encoding::ResourceTypeMarker for ElementInfoProviderGetStatusEndpointsResponse {
5333        type Borrowed<'a> = &'a mut Self;
5334        fn take_or_borrow<'a>(
5335            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5336        ) -> Self::Borrowed<'a> {
5337            value
5338        }
5339    }
5340
5341    unsafe impl fidl::encoding::TypeMarker for ElementInfoProviderGetStatusEndpointsResponse {
5342        type Owned = Self;
5343
5344        #[inline(always)]
5345        fn inline_align(_context: fidl::encoding::Context) -> usize {
5346            8
5347        }
5348
5349        #[inline(always)]
5350        fn inline_size(_context: fidl::encoding::Context) -> usize {
5351            16
5352        }
5353    }
5354
5355    unsafe impl
5356        fidl::encoding::Encode<
5357            ElementInfoProviderGetStatusEndpointsResponse,
5358            fidl::encoding::DefaultFuchsiaResourceDialect,
5359        > for &mut ElementInfoProviderGetStatusEndpointsResponse
5360    {
5361        #[inline]
5362        unsafe fn encode(
5363            self,
5364            encoder: &mut fidl::encoding::Encoder<
5365                '_,
5366                fidl::encoding::DefaultFuchsiaResourceDialect,
5367            >,
5368            offset: usize,
5369            _depth: fidl::encoding::Depth,
5370        ) -> fidl::Result<()> {
5371            encoder.debug_check_bounds::<ElementInfoProviderGetStatusEndpointsResponse>(offset);
5372            // Delegate to tuple encoding.
5373            fidl::encoding::Encode::<ElementInfoProviderGetStatusEndpointsResponse, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
5374                (
5375                    <fidl::encoding::UnboundedVector<ElementStatusEndpoint> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.endpoints),
5376                ),
5377                encoder, offset, _depth
5378            )
5379        }
5380    }
5381    unsafe impl<
5382        T0: fidl::encoding::Encode<
5383                fidl::encoding::UnboundedVector<ElementStatusEndpoint>,
5384                fidl::encoding::DefaultFuchsiaResourceDialect,
5385            >,
5386    >
5387        fidl::encoding::Encode<
5388            ElementInfoProviderGetStatusEndpointsResponse,
5389            fidl::encoding::DefaultFuchsiaResourceDialect,
5390        > for (T0,)
5391    {
5392        #[inline]
5393        unsafe fn encode(
5394            self,
5395            encoder: &mut fidl::encoding::Encoder<
5396                '_,
5397                fidl::encoding::DefaultFuchsiaResourceDialect,
5398            >,
5399            offset: usize,
5400            depth: fidl::encoding::Depth,
5401        ) -> fidl::Result<()> {
5402            encoder.debug_check_bounds::<ElementInfoProviderGetStatusEndpointsResponse>(offset);
5403            // Zero out padding regions. There's no need to apply masks
5404            // because the unmasked parts will be overwritten by fields.
5405            // Write the fields.
5406            self.0.encode(encoder, offset + 0, depth)?;
5407            Ok(())
5408        }
5409    }
5410
5411    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5412        for ElementInfoProviderGetStatusEndpointsResponse
5413    {
5414        #[inline(always)]
5415        fn new_empty() -> Self {
5416            Self {
5417                endpoints: fidl::new_empty!(
5418                    fidl::encoding::UnboundedVector<ElementStatusEndpoint>,
5419                    fidl::encoding::DefaultFuchsiaResourceDialect
5420                ),
5421            }
5422        }
5423
5424        #[inline]
5425        unsafe fn decode(
5426            &mut self,
5427            decoder: &mut fidl::encoding::Decoder<
5428                '_,
5429                fidl::encoding::DefaultFuchsiaResourceDialect,
5430            >,
5431            offset: usize,
5432            _depth: fidl::encoding::Depth,
5433        ) -> fidl::Result<()> {
5434            decoder.debug_check_bounds::<Self>(offset);
5435            // Verify that padding bytes are zero.
5436            fidl::decode!(
5437                fidl::encoding::UnboundedVector<ElementStatusEndpoint>,
5438                fidl::encoding::DefaultFuchsiaResourceDialect,
5439                &mut self.endpoints,
5440                decoder,
5441                offset + 0,
5442                _depth
5443            )?;
5444            Ok(())
5445        }
5446    }
5447
5448    impl fidl::encoding::ResourceTypeMarker for LessorLeaseRequest {
5449        type Borrowed<'a> = &'a mut Self;
5450        fn take_or_borrow<'a>(
5451            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5452        ) -> Self::Borrowed<'a> {
5453            value
5454        }
5455    }
5456
5457    unsafe impl fidl::encoding::TypeMarker for LessorLeaseRequest {
5458        type Owned = Self;
5459
5460        #[inline(always)]
5461        fn inline_align(_context: fidl::encoding::Context) -> usize {
5462            1
5463        }
5464
5465        #[inline(always)]
5466        fn inline_size(_context: fidl::encoding::Context) -> usize {
5467            1
5468        }
5469        #[inline(always)]
5470        fn encode_is_copy() -> bool {
5471            true
5472        }
5473
5474        #[inline(always)]
5475        fn decode_is_copy() -> bool {
5476            true
5477        }
5478    }
5479
5480    unsafe impl
5481        fidl::encoding::Encode<LessorLeaseRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
5482        for &mut LessorLeaseRequest
5483    {
5484        #[inline]
5485        unsafe fn encode(
5486            self,
5487            encoder: &mut fidl::encoding::Encoder<
5488                '_,
5489                fidl::encoding::DefaultFuchsiaResourceDialect,
5490            >,
5491            offset: usize,
5492            _depth: fidl::encoding::Depth,
5493        ) -> fidl::Result<()> {
5494            encoder.debug_check_bounds::<LessorLeaseRequest>(offset);
5495            unsafe {
5496                // Copy the object into the buffer.
5497                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5498                (buf_ptr as *mut LessorLeaseRequest)
5499                    .write_unaligned((self as *const LessorLeaseRequest).read());
5500                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5501                // done second because the memcpy will write garbage to these bytes.
5502            }
5503            Ok(())
5504        }
5505    }
5506    unsafe impl<T0: fidl::encoding::Encode<u8, fidl::encoding::DefaultFuchsiaResourceDialect>>
5507        fidl::encoding::Encode<LessorLeaseRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
5508        for (T0,)
5509    {
5510        #[inline]
5511        unsafe fn encode(
5512            self,
5513            encoder: &mut fidl::encoding::Encoder<
5514                '_,
5515                fidl::encoding::DefaultFuchsiaResourceDialect,
5516            >,
5517            offset: usize,
5518            depth: fidl::encoding::Depth,
5519        ) -> fidl::Result<()> {
5520            encoder.debug_check_bounds::<LessorLeaseRequest>(offset);
5521            // Zero out padding regions. There's no need to apply masks
5522            // because the unmasked parts will be overwritten by fields.
5523            // Write the fields.
5524            self.0.encode(encoder, offset + 0, depth)?;
5525            Ok(())
5526        }
5527    }
5528
5529    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5530        for LessorLeaseRequest
5531    {
5532        #[inline(always)]
5533        fn new_empty() -> Self {
5534            Self { level: fidl::new_empty!(u8, fidl::encoding::DefaultFuchsiaResourceDialect) }
5535        }
5536
5537        #[inline]
5538        unsafe fn decode(
5539            &mut self,
5540            decoder: &mut fidl::encoding::Decoder<
5541                '_,
5542                fidl::encoding::DefaultFuchsiaResourceDialect,
5543            >,
5544            offset: usize,
5545            _depth: fidl::encoding::Depth,
5546        ) -> fidl::Result<()> {
5547            decoder.debug_check_bounds::<Self>(offset);
5548            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5549            // Verify that padding bytes are zero.
5550            // Copy from the buffer into the object.
5551            unsafe {
5552                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 1);
5553            }
5554            Ok(())
5555        }
5556    }
5557
5558    impl fidl::encoding::ResourceTypeMarker for LessorLeaseResponse {
5559        type Borrowed<'a> = &'a mut Self;
5560        fn take_or_borrow<'a>(
5561            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5562        ) -> Self::Borrowed<'a> {
5563            value
5564        }
5565    }
5566
5567    unsafe impl fidl::encoding::TypeMarker for LessorLeaseResponse {
5568        type Owned = Self;
5569
5570        #[inline(always)]
5571        fn inline_align(_context: fidl::encoding::Context) -> usize {
5572            4
5573        }
5574
5575        #[inline(always)]
5576        fn inline_size(_context: fidl::encoding::Context) -> usize {
5577            4
5578        }
5579    }
5580
5581    unsafe impl
5582        fidl::encoding::Encode<LessorLeaseResponse, fidl::encoding::DefaultFuchsiaResourceDialect>
5583        for &mut LessorLeaseResponse
5584    {
5585        #[inline]
5586        unsafe fn encode(
5587            self,
5588            encoder: &mut fidl::encoding::Encoder<
5589                '_,
5590                fidl::encoding::DefaultFuchsiaResourceDialect,
5591            >,
5592            offset: usize,
5593            _depth: fidl::encoding::Depth,
5594        ) -> fidl::Result<()> {
5595            encoder.debug_check_bounds::<LessorLeaseResponse>(offset);
5596            // Delegate to tuple encoding.
5597            fidl::encoding::Encode::<LessorLeaseResponse, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
5598                (
5599                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<LeaseControlMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.lease_control),
5600                ),
5601                encoder, offset, _depth
5602            )
5603        }
5604    }
5605    unsafe impl<
5606        T0: fidl::encoding::Encode<
5607                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<LeaseControlMarker>>,
5608                fidl::encoding::DefaultFuchsiaResourceDialect,
5609            >,
5610    > fidl::encoding::Encode<LessorLeaseResponse, fidl::encoding::DefaultFuchsiaResourceDialect>
5611        for (T0,)
5612    {
5613        #[inline]
5614        unsafe fn encode(
5615            self,
5616            encoder: &mut fidl::encoding::Encoder<
5617                '_,
5618                fidl::encoding::DefaultFuchsiaResourceDialect,
5619            >,
5620            offset: usize,
5621            depth: fidl::encoding::Depth,
5622        ) -> fidl::Result<()> {
5623            encoder.debug_check_bounds::<LessorLeaseResponse>(offset);
5624            // Zero out padding regions. There's no need to apply masks
5625            // because the unmasked parts will be overwritten by fields.
5626            // Write the fields.
5627            self.0.encode(encoder, offset + 0, depth)?;
5628            Ok(())
5629        }
5630    }
5631
5632    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5633        for LessorLeaseResponse
5634    {
5635        #[inline(always)]
5636        fn new_empty() -> Self {
5637            Self {
5638                lease_control: fidl::new_empty!(
5639                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<LeaseControlMarker>>,
5640                    fidl::encoding::DefaultFuchsiaResourceDialect
5641                ),
5642            }
5643        }
5644
5645        #[inline]
5646        unsafe fn decode(
5647            &mut self,
5648            decoder: &mut fidl::encoding::Decoder<
5649                '_,
5650                fidl::encoding::DefaultFuchsiaResourceDialect,
5651            >,
5652            offset: usize,
5653            _depth: fidl::encoding::Depth,
5654        ) -> fidl::Result<()> {
5655            decoder.debug_check_bounds::<Self>(offset);
5656            // Verify that padding bytes are zero.
5657            fidl::decode!(
5658                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<LeaseControlMarker>>,
5659                fidl::encoding::DefaultFuchsiaResourceDialect,
5660                &mut self.lease_control,
5661                decoder,
5662                offset + 0,
5663                _depth
5664            )?;
5665            Ok(())
5666        }
5667    }
5668
5669    impl fidl::encoding::ResourceTypeMarker for StatusWatchPowerLevelResponse {
5670        type Borrowed<'a> = &'a mut Self;
5671        fn take_or_borrow<'a>(
5672            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5673        ) -> Self::Borrowed<'a> {
5674            value
5675        }
5676    }
5677
5678    unsafe impl fidl::encoding::TypeMarker for StatusWatchPowerLevelResponse {
5679        type Owned = Self;
5680
5681        #[inline(always)]
5682        fn inline_align(_context: fidl::encoding::Context) -> usize {
5683            1
5684        }
5685
5686        #[inline(always)]
5687        fn inline_size(_context: fidl::encoding::Context) -> usize {
5688            1
5689        }
5690        #[inline(always)]
5691        fn encode_is_copy() -> bool {
5692            true
5693        }
5694
5695        #[inline(always)]
5696        fn decode_is_copy() -> bool {
5697            true
5698        }
5699    }
5700
5701    unsafe impl
5702        fidl::encoding::Encode<
5703            StatusWatchPowerLevelResponse,
5704            fidl::encoding::DefaultFuchsiaResourceDialect,
5705        > for &mut StatusWatchPowerLevelResponse
5706    {
5707        #[inline]
5708        unsafe fn encode(
5709            self,
5710            encoder: &mut fidl::encoding::Encoder<
5711                '_,
5712                fidl::encoding::DefaultFuchsiaResourceDialect,
5713            >,
5714            offset: usize,
5715            _depth: fidl::encoding::Depth,
5716        ) -> fidl::Result<()> {
5717            encoder.debug_check_bounds::<StatusWatchPowerLevelResponse>(offset);
5718            unsafe {
5719                // Copy the object into the buffer.
5720                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5721                (buf_ptr as *mut StatusWatchPowerLevelResponse)
5722                    .write_unaligned((self as *const StatusWatchPowerLevelResponse).read());
5723                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5724                // done second because the memcpy will write garbage to these bytes.
5725            }
5726            Ok(())
5727        }
5728    }
5729    unsafe impl<T0: fidl::encoding::Encode<u8, fidl::encoding::DefaultFuchsiaResourceDialect>>
5730        fidl::encoding::Encode<
5731            StatusWatchPowerLevelResponse,
5732            fidl::encoding::DefaultFuchsiaResourceDialect,
5733        > for (T0,)
5734    {
5735        #[inline]
5736        unsafe fn encode(
5737            self,
5738            encoder: &mut fidl::encoding::Encoder<
5739                '_,
5740                fidl::encoding::DefaultFuchsiaResourceDialect,
5741            >,
5742            offset: usize,
5743            depth: fidl::encoding::Depth,
5744        ) -> fidl::Result<()> {
5745            encoder.debug_check_bounds::<StatusWatchPowerLevelResponse>(offset);
5746            // Zero out padding regions. There's no need to apply masks
5747            // because the unmasked parts will be overwritten by fields.
5748            // Write the fields.
5749            self.0.encode(encoder, offset + 0, depth)?;
5750            Ok(())
5751        }
5752    }
5753
5754    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5755        for StatusWatchPowerLevelResponse
5756    {
5757        #[inline(always)]
5758        fn new_empty() -> Self {
5759            Self {
5760                current_level: fidl::new_empty!(u8, fidl::encoding::DefaultFuchsiaResourceDialect),
5761            }
5762        }
5763
5764        #[inline]
5765        unsafe fn decode(
5766            &mut self,
5767            decoder: &mut fidl::encoding::Decoder<
5768                '_,
5769                fidl::encoding::DefaultFuchsiaResourceDialect,
5770            >,
5771            offset: usize,
5772            _depth: fidl::encoding::Depth,
5773        ) -> fidl::Result<()> {
5774            decoder.debug_check_bounds::<Self>(offset);
5775            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5776            // Verify that padding bytes are zero.
5777            // Copy from the buffer into the object.
5778            unsafe {
5779                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 1);
5780            }
5781            Ok(())
5782        }
5783    }
5784
5785    impl ElementSchema {
5786        #[inline(always)]
5787        fn max_ordinal_present(&self) -> u64 {
5788            if let Some(_) = self.initial_lease_token {
5789                return 11;
5790            }
5791            if let Some(_) = self.element_runner {
5792                return 10;
5793            }
5794            if let Some(_) = self.element_control {
5795                return 9;
5796            }
5797            if let Some(_) = self.lessor_channel {
5798                return 8;
5799            }
5800            if let Some(_) = self.dependencies {
5801                return 4;
5802            }
5803            if let Some(_) = self.valid_levels {
5804                return 3;
5805            }
5806            if let Some(_) = self.initial_current_level {
5807                return 2;
5808            }
5809            if let Some(_) = self.element_name {
5810                return 1;
5811            }
5812            0
5813        }
5814    }
5815
5816    impl fidl::encoding::ResourceTypeMarker for ElementSchema {
5817        type Borrowed<'a> = &'a mut Self;
5818        fn take_or_borrow<'a>(
5819            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5820        ) -> Self::Borrowed<'a> {
5821            value
5822        }
5823    }
5824
5825    unsafe impl fidl::encoding::TypeMarker for ElementSchema {
5826        type Owned = Self;
5827
5828        #[inline(always)]
5829        fn inline_align(_context: fidl::encoding::Context) -> usize {
5830            8
5831        }
5832
5833        #[inline(always)]
5834        fn inline_size(_context: fidl::encoding::Context) -> usize {
5835            16
5836        }
5837    }
5838
5839    unsafe impl fidl::encoding::Encode<ElementSchema, fidl::encoding::DefaultFuchsiaResourceDialect>
5840        for &mut ElementSchema
5841    {
5842        unsafe fn encode(
5843            self,
5844            encoder: &mut fidl::encoding::Encoder<
5845                '_,
5846                fidl::encoding::DefaultFuchsiaResourceDialect,
5847            >,
5848            offset: usize,
5849            mut depth: fidl::encoding::Depth,
5850        ) -> fidl::Result<()> {
5851            encoder.debug_check_bounds::<ElementSchema>(offset);
5852            // Vector header
5853            let max_ordinal: u64 = self.max_ordinal_present();
5854            encoder.write_num(max_ordinal, offset);
5855            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5856            // Calling encoder.out_of_line_offset(0) is not allowed.
5857            if max_ordinal == 0 {
5858                return Ok(());
5859            }
5860            depth.increment()?;
5861            let envelope_size = 8;
5862            let bytes_len = max_ordinal as usize * envelope_size;
5863            #[allow(unused_variables)]
5864            let offset = encoder.out_of_line_offset(bytes_len);
5865            let mut _prev_end_offset: usize = 0;
5866            if 1 > max_ordinal {
5867                return Ok(());
5868            }
5869
5870            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5871            // are envelope_size bytes.
5872            let cur_offset: usize = (1 - 1) * envelope_size;
5873
5874            // Zero reserved fields.
5875            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5876
5877            // Safety:
5878            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5879            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5880            //   envelope_size bytes, there is always sufficient room.
5881            fidl::encoding::encode_in_envelope_optional::<
5882                fidl::encoding::BoundedString<64>,
5883                fidl::encoding::DefaultFuchsiaResourceDialect,
5884            >(
5885                self.element_name.as_ref().map(
5886                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
5887                ),
5888                encoder,
5889                offset + cur_offset,
5890                depth,
5891            )?;
5892
5893            _prev_end_offset = cur_offset + envelope_size;
5894            if 2 > max_ordinal {
5895                return Ok(());
5896            }
5897
5898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5899            // are envelope_size bytes.
5900            let cur_offset: usize = (2 - 1) * envelope_size;
5901
5902            // Zero reserved fields.
5903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5904
5905            // Safety:
5906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5908            //   envelope_size bytes, there is always sufficient room.
5909            fidl::encoding::encode_in_envelope_optional::<
5910                u8,
5911                fidl::encoding::DefaultFuchsiaResourceDialect,
5912            >(
5913                self.initial_current_level
5914                    .as_ref()
5915                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
5916                encoder,
5917                offset + cur_offset,
5918                depth,
5919            )?;
5920
5921            _prev_end_offset = cur_offset + envelope_size;
5922            if 3 > max_ordinal {
5923                return Ok(());
5924            }
5925
5926            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5927            // are envelope_size bytes.
5928            let cur_offset: usize = (3 - 1) * envelope_size;
5929
5930            // Zero reserved fields.
5931            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5932
5933            // Safety:
5934            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5935            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5936            //   envelope_size bytes, there is always sufficient room.
5937            fidl::encoding::encode_in_envelope_optional::<
5938                fidl::encoding::Vector<u8, 256>,
5939                fidl::encoding::DefaultFuchsiaResourceDialect,
5940            >(
5941                self.valid_levels.as_ref().map(
5942                    <fidl::encoding::Vector<u8, 256> as fidl::encoding::ValueTypeMarker>::borrow,
5943                ),
5944                encoder,
5945                offset + cur_offset,
5946                depth,
5947            )?;
5948
5949            _prev_end_offset = cur_offset + envelope_size;
5950            if 4 > max_ordinal {
5951                return Ok(());
5952            }
5953
5954            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5955            // are envelope_size bytes.
5956            let cur_offset: usize = (4 - 1) * envelope_size;
5957
5958            // Zero reserved fields.
5959            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5960
5961            // Safety:
5962            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5963            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5964            //   envelope_size bytes, there is always sufficient room.
5965            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LevelDependency, 128>, fidl::encoding::DefaultFuchsiaResourceDialect>(
5966            self.dependencies.as_mut().map(<fidl::encoding::Vector<LevelDependency, 128> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
5967            encoder, offset + cur_offset, depth
5968        )?;
5969
5970            _prev_end_offset = cur_offset + envelope_size;
5971            if 8 > max_ordinal {
5972                return Ok(());
5973            }
5974
5975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5976            // are envelope_size bytes.
5977            let cur_offset: usize = (8 - 1) * envelope_size;
5978
5979            // Zero reserved fields.
5980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5981
5982            // Safety:
5983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5985            //   envelope_size bytes, there is always sufficient room.
5986            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<LessorMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
5987            self.lessor_channel.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<LessorMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
5988            encoder, offset + cur_offset, depth
5989        )?;
5990
5991            _prev_end_offset = cur_offset + envelope_size;
5992            if 9 > max_ordinal {
5993                return Ok(());
5994            }
5995
5996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5997            // are envelope_size bytes.
5998            let cur_offset: usize = (9 - 1) * envelope_size;
5999
6000            // Zero reserved fields.
6001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6002
6003            // Safety:
6004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6006            //   envelope_size bytes, there is always sufficient room.
6007            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ElementControlMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
6008            self.element_control.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ElementControlMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
6009            encoder, offset + cur_offset, depth
6010        )?;
6011
6012            _prev_end_offset = cur_offset + envelope_size;
6013            if 10 > max_ordinal {
6014                return Ok(());
6015            }
6016
6017            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6018            // are envelope_size bytes.
6019            let cur_offset: usize = (10 - 1) * envelope_size;
6020
6021            // Zero reserved fields.
6022            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6023
6024            // Safety:
6025            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6026            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6027            //   envelope_size bytes, there is always sufficient room.
6028            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ElementRunnerMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
6029            self.element_runner.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ElementRunnerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
6030            encoder, offset + cur_offset, depth
6031        )?;
6032
6033            _prev_end_offset = cur_offset + envelope_size;
6034            if 11 > max_ordinal {
6035                return Ok(());
6036            }
6037
6038            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6039            // are envelope_size bytes.
6040            let cur_offset: usize = (11 - 1) * envelope_size;
6041
6042            // Zero reserved fields.
6043            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6044
6045            // Safety:
6046            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6047            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6048            //   envelope_size bytes, there is always sufficient room.
6049            fidl::encoding::encode_in_envelope_optional::<
6050                fidl::encoding::HandleType<
6051                    fidl::EventPair,
6052                    { fidl::ObjectType::EVENTPAIR.into_raw() },
6053                    24579,
6054                >,
6055                fidl::encoding::DefaultFuchsiaResourceDialect,
6056            >(
6057                self.initial_lease_token.as_mut().map(
6058                    <fidl::encoding::HandleType<
6059                        fidl::EventPair,
6060                        { fidl::ObjectType::EVENTPAIR.into_raw() },
6061                        24579,
6062                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
6063                ),
6064                encoder,
6065                offset + cur_offset,
6066                depth,
6067            )?;
6068
6069            _prev_end_offset = cur_offset + envelope_size;
6070
6071            Ok(())
6072        }
6073    }
6074
6075    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for ElementSchema {
6076        #[inline(always)]
6077        fn new_empty() -> Self {
6078            Self::default()
6079        }
6080
6081        unsafe fn decode(
6082            &mut self,
6083            decoder: &mut fidl::encoding::Decoder<
6084                '_,
6085                fidl::encoding::DefaultFuchsiaResourceDialect,
6086            >,
6087            offset: usize,
6088            mut depth: fidl::encoding::Depth,
6089        ) -> fidl::Result<()> {
6090            decoder.debug_check_bounds::<Self>(offset);
6091            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6092                None => return Err(fidl::Error::NotNullable),
6093                Some(len) => len,
6094            };
6095            // Calling decoder.out_of_line_offset(0) is not allowed.
6096            if len == 0 {
6097                return Ok(());
6098            };
6099            depth.increment()?;
6100            let envelope_size = 8;
6101            let bytes_len = len * envelope_size;
6102            let offset = decoder.out_of_line_offset(bytes_len)?;
6103            // Decode the envelope for each type.
6104            let mut _next_ordinal_to_read = 0;
6105            let mut next_offset = offset;
6106            let end_offset = offset + bytes_len;
6107            _next_ordinal_to_read += 1;
6108            if next_offset >= end_offset {
6109                return Ok(());
6110            }
6111
6112            // Decode unknown envelopes for gaps in ordinals.
6113            while _next_ordinal_to_read < 1 {
6114                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6115                _next_ordinal_to_read += 1;
6116                next_offset += envelope_size;
6117            }
6118
6119            let next_out_of_line = decoder.next_out_of_line();
6120            let handles_before = decoder.remaining_handles();
6121            if let Some((inlined, num_bytes, num_handles)) =
6122                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6123            {
6124                let member_inline_size =
6125                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
6126                        decoder.context,
6127                    );
6128                if inlined != (member_inline_size <= 4) {
6129                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6130                }
6131                let inner_offset;
6132                let mut inner_depth = depth.clone();
6133                if inlined {
6134                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6135                    inner_offset = next_offset;
6136                } else {
6137                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6138                    inner_depth.increment()?;
6139                }
6140                let val_ref = self.element_name.get_or_insert_with(|| {
6141                    fidl::new_empty!(
6142                        fidl::encoding::BoundedString<64>,
6143                        fidl::encoding::DefaultFuchsiaResourceDialect
6144                    )
6145                });
6146                fidl::decode!(
6147                    fidl::encoding::BoundedString<64>,
6148                    fidl::encoding::DefaultFuchsiaResourceDialect,
6149                    val_ref,
6150                    decoder,
6151                    inner_offset,
6152                    inner_depth
6153                )?;
6154                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6155                {
6156                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6157                }
6158                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6159                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6160                }
6161            }
6162
6163            next_offset += envelope_size;
6164            _next_ordinal_to_read += 1;
6165            if next_offset >= end_offset {
6166                return Ok(());
6167            }
6168
6169            // Decode unknown envelopes for gaps in ordinals.
6170            while _next_ordinal_to_read < 2 {
6171                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6172                _next_ordinal_to_read += 1;
6173                next_offset += envelope_size;
6174            }
6175
6176            let next_out_of_line = decoder.next_out_of_line();
6177            let handles_before = decoder.remaining_handles();
6178            if let Some((inlined, num_bytes, num_handles)) =
6179                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6180            {
6181                let member_inline_size =
6182                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6183                if inlined != (member_inline_size <= 4) {
6184                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6185                }
6186                let inner_offset;
6187                let mut inner_depth = depth.clone();
6188                if inlined {
6189                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6190                    inner_offset = next_offset;
6191                } else {
6192                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6193                    inner_depth.increment()?;
6194                }
6195                let val_ref = self.initial_current_level.get_or_insert_with(|| {
6196                    fidl::new_empty!(u8, fidl::encoding::DefaultFuchsiaResourceDialect)
6197                });
6198                fidl::decode!(
6199                    u8,
6200                    fidl::encoding::DefaultFuchsiaResourceDialect,
6201                    val_ref,
6202                    decoder,
6203                    inner_offset,
6204                    inner_depth
6205                )?;
6206                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6207                {
6208                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6209                }
6210                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6211                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6212                }
6213            }
6214
6215            next_offset += envelope_size;
6216            _next_ordinal_to_read += 1;
6217            if next_offset >= end_offset {
6218                return Ok(());
6219            }
6220
6221            // Decode unknown envelopes for gaps in ordinals.
6222            while _next_ordinal_to_read < 3 {
6223                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6224                _next_ordinal_to_read += 1;
6225                next_offset += envelope_size;
6226            }
6227
6228            let next_out_of_line = decoder.next_out_of_line();
6229            let handles_before = decoder.remaining_handles();
6230            if let Some((inlined, num_bytes, num_handles)) =
6231                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6232            {
6233                let member_inline_size =
6234                    <fidl::encoding::Vector<u8, 256> as fidl::encoding::TypeMarker>::inline_size(
6235                        decoder.context,
6236                    );
6237                if inlined != (member_inline_size <= 4) {
6238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6239                }
6240                let inner_offset;
6241                let mut inner_depth = depth.clone();
6242                if inlined {
6243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6244                    inner_offset = next_offset;
6245                } else {
6246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6247                    inner_depth.increment()?;
6248                }
6249                let val_ref =
6250                self.valid_levels.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 256>, fidl::encoding::DefaultFuchsiaResourceDialect));
6251                fidl::decode!(fidl::encoding::Vector<u8, 256>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
6252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6253                {
6254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6255                }
6256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6258                }
6259            }
6260
6261            next_offset += envelope_size;
6262            _next_ordinal_to_read += 1;
6263            if next_offset >= end_offset {
6264                return Ok(());
6265            }
6266
6267            // Decode unknown envelopes for gaps in ordinals.
6268            while _next_ordinal_to_read < 4 {
6269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6270                _next_ordinal_to_read += 1;
6271                next_offset += envelope_size;
6272            }
6273
6274            let next_out_of_line = decoder.next_out_of_line();
6275            let handles_before = decoder.remaining_handles();
6276            if let Some((inlined, num_bytes, num_handles)) =
6277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6278            {
6279                let member_inline_size = <fidl::encoding::Vector<LevelDependency, 128> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6280                if inlined != (member_inline_size <= 4) {
6281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6282                }
6283                let inner_offset;
6284                let mut inner_depth = depth.clone();
6285                if inlined {
6286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6287                    inner_offset = next_offset;
6288                } else {
6289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6290                    inner_depth.increment()?;
6291                }
6292                let val_ref =
6293                self.dependencies.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<LevelDependency, 128>, fidl::encoding::DefaultFuchsiaResourceDialect));
6294                fidl::decode!(fidl::encoding::Vector<LevelDependency, 128>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
6295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6296                {
6297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6298                }
6299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6301                }
6302            }
6303
6304            next_offset += envelope_size;
6305            _next_ordinal_to_read += 1;
6306            if next_offset >= end_offset {
6307                return Ok(());
6308            }
6309
6310            // Decode unknown envelopes for gaps in ordinals.
6311            while _next_ordinal_to_read < 8 {
6312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6313                _next_ordinal_to_read += 1;
6314                next_offset += envelope_size;
6315            }
6316
6317            let next_out_of_line = decoder.next_out_of_line();
6318            let handles_before = decoder.remaining_handles();
6319            if let Some((inlined, num_bytes, num_handles)) =
6320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6321            {
6322                let member_inline_size = <fidl::encoding::Endpoint<
6323                    fidl::endpoints::ServerEnd<LessorMarker>,
6324                > as fidl::encoding::TypeMarker>::inline_size(
6325                    decoder.context
6326                );
6327                if inlined != (member_inline_size <= 4) {
6328                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6329                }
6330                let inner_offset;
6331                let mut inner_depth = depth.clone();
6332                if inlined {
6333                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6334                    inner_offset = next_offset;
6335                } else {
6336                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6337                    inner_depth.increment()?;
6338                }
6339                let val_ref = self.lessor_channel.get_or_insert_with(|| {
6340                    fidl::new_empty!(
6341                        fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<LessorMarker>>,
6342                        fidl::encoding::DefaultFuchsiaResourceDialect
6343                    )
6344                });
6345                fidl::decode!(
6346                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<LessorMarker>>,
6347                    fidl::encoding::DefaultFuchsiaResourceDialect,
6348                    val_ref,
6349                    decoder,
6350                    inner_offset,
6351                    inner_depth
6352                )?;
6353                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6354                {
6355                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6356                }
6357                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6358                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6359                }
6360            }
6361
6362            next_offset += envelope_size;
6363            _next_ordinal_to_read += 1;
6364            if next_offset >= end_offset {
6365                return Ok(());
6366            }
6367
6368            // Decode unknown envelopes for gaps in ordinals.
6369            while _next_ordinal_to_read < 9 {
6370                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6371                _next_ordinal_to_read += 1;
6372                next_offset += envelope_size;
6373            }
6374
6375            let next_out_of_line = decoder.next_out_of_line();
6376            let handles_before = decoder.remaining_handles();
6377            if let Some((inlined, num_bytes, num_handles)) =
6378                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6379            {
6380                let member_inline_size = <fidl::encoding::Endpoint<
6381                    fidl::endpoints::ServerEnd<ElementControlMarker>,
6382                > as fidl::encoding::TypeMarker>::inline_size(
6383                    decoder.context
6384                );
6385                if inlined != (member_inline_size <= 4) {
6386                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6387                }
6388                let inner_offset;
6389                let mut inner_depth = depth.clone();
6390                if inlined {
6391                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6392                    inner_offset = next_offset;
6393                } else {
6394                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6395                    inner_depth.increment()?;
6396                }
6397                let val_ref = self.element_control.get_or_insert_with(|| {
6398                    fidl::new_empty!(
6399                        fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ElementControlMarker>>,
6400                        fidl::encoding::DefaultFuchsiaResourceDialect
6401                    )
6402                });
6403                fidl::decode!(
6404                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<ElementControlMarker>>,
6405                    fidl::encoding::DefaultFuchsiaResourceDialect,
6406                    val_ref,
6407                    decoder,
6408                    inner_offset,
6409                    inner_depth
6410                )?;
6411                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6412                {
6413                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6414                }
6415                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6416                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6417                }
6418            }
6419
6420            next_offset += envelope_size;
6421            _next_ordinal_to_read += 1;
6422            if next_offset >= end_offset {
6423                return Ok(());
6424            }
6425
6426            // Decode unknown envelopes for gaps in ordinals.
6427            while _next_ordinal_to_read < 10 {
6428                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6429                _next_ordinal_to_read += 1;
6430                next_offset += envelope_size;
6431            }
6432
6433            let next_out_of_line = decoder.next_out_of_line();
6434            let handles_before = decoder.remaining_handles();
6435            if let Some((inlined, num_bytes, num_handles)) =
6436                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6437            {
6438                let member_inline_size = <fidl::encoding::Endpoint<
6439                    fidl::endpoints::ClientEnd<ElementRunnerMarker>,
6440                > as fidl::encoding::TypeMarker>::inline_size(
6441                    decoder.context
6442                );
6443                if inlined != (member_inline_size <= 4) {
6444                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6445                }
6446                let inner_offset;
6447                let mut inner_depth = depth.clone();
6448                if inlined {
6449                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6450                    inner_offset = next_offset;
6451                } else {
6452                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6453                    inner_depth.increment()?;
6454                }
6455                let val_ref = self.element_runner.get_or_insert_with(|| {
6456                    fidl::new_empty!(
6457                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ElementRunnerMarker>>,
6458                        fidl::encoding::DefaultFuchsiaResourceDialect
6459                    )
6460                });
6461                fidl::decode!(
6462                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<ElementRunnerMarker>>,
6463                    fidl::encoding::DefaultFuchsiaResourceDialect,
6464                    val_ref,
6465                    decoder,
6466                    inner_offset,
6467                    inner_depth
6468                )?;
6469                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6470                {
6471                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6472                }
6473                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6474                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6475                }
6476            }
6477
6478            next_offset += envelope_size;
6479            _next_ordinal_to_read += 1;
6480            if next_offset >= end_offset {
6481                return Ok(());
6482            }
6483
6484            // Decode unknown envelopes for gaps in ordinals.
6485            while _next_ordinal_to_read < 11 {
6486                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6487                _next_ordinal_to_read += 1;
6488                next_offset += envelope_size;
6489            }
6490
6491            let next_out_of_line = decoder.next_out_of_line();
6492            let handles_before = decoder.remaining_handles();
6493            if let Some((inlined, num_bytes, num_handles)) =
6494                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6495            {
6496                let member_inline_size = <fidl::encoding::HandleType<
6497                    fidl::EventPair,
6498                    { fidl::ObjectType::EVENTPAIR.into_raw() },
6499                    24579,
6500                > as fidl::encoding::TypeMarker>::inline_size(
6501                    decoder.context
6502                );
6503                if inlined != (member_inline_size <= 4) {
6504                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6505                }
6506                let inner_offset;
6507                let mut inner_depth = depth.clone();
6508                if inlined {
6509                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6510                    inner_offset = next_offset;
6511                } else {
6512                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6513                    inner_depth.increment()?;
6514                }
6515                let val_ref =
6516                self.initial_lease_token.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 24579>, fidl::encoding::DefaultFuchsiaResourceDialect));
6517                fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 24579>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
6518                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6519                {
6520                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6521                }
6522                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6523                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6524                }
6525            }
6526
6527            next_offset += envelope_size;
6528
6529            // Decode the remaining unknown envelopes.
6530            while next_offset < end_offset {
6531                _next_ordinal_to_read += 1;
6532                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6533                next_offset += envelope_size;
6534            }
6535
6536            Ok(())
6537        }
6538    }
6539
6540    impl ElementStatusEndpoint {
6541        #[inline(always)]
6542        fn max_ordinal_present(&self) -> u64 {
6543            if let Some(_) = self.status {
6544                return 2;
6545            }
6546            if let Some(_) = self.identifier {
6547                return 1;
6548            }
6549            0
6550        }
6551    }
6552
6553    impl fidl::encoding::ResourceTypeMarker for ElementStatusEndpoint {
6554        type Borrowed<'a> = &'a mut Self;
6555        fn take_or_borrow<'a>(
6556            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6557        ) -> Self::Borrowed<'a> {
6558            value
6559        }
6560    }
6561
6562    unsafe impl fidl::encoding::TypeMarker for ElementStatusEndpoint {
6563        type Owned = Self;
6564
6565        #[inline(always)]
6566        fn inline_align(_context: fidl::encoding::Context) -> usize {
6567            8
6568        }
6569
6570        #[inline(always)]
6571        fn inline_size(_context: fidl::encoding::Context) -> usize {
6572            16
6573        }
6574    }
6575
6576    unsafe impl
6577        fidl::encoding::Encode<ElementStatusEndpoint, fidl::encoding::DefaultFuchsiaResourceDialect>
6578        for &mut ElementStatusEndpoint
6579    {
6580        unsafe fn encode(
6581            self,
6582            encoder: &mut fidl::encoding::Encoder<
6583                '_,
6584                fidl::encoding::DefaultFuchsiaResourceDialect,
6585            >,
6586            offset: usize,
6587            mut depth: fidl::encoding::Depth,
6588        ) -> fidl::Result<()> {
6589            encoder.debug_check_bounds::<ElementStatusEndpoint>(offset);
6590            // Vector header
6591            let max_ordinal: u64 = self.max_ordinal_present();
6592            encoder.write_num(max_ordinal, offset);
6593            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6594            // Calling encoder.out_of_line_offset(0) is not allowed.
6595            if max_ordinal == 0 {
6596                return Ok(());
6597            }
6598            depth.increment()?;
6599            let envelope_size = 8;
6600            let bytes_len = max_ordinal as usize * envelope_size;
6601            #[allow(unused_variables)]
6602            let offset = encoder.out_of_line_offset(bytes_len);
6603            let mut _prev_end_offset: usize = 0;
6604            if 1 > max_ordinal {
6605                return Ok(());
6606            }
6607
6608            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6609            // are envelope_size bytes.
6610            let cur_offset: usize = (1 - 1) * envelope_size;
6611
6612            // Zero reserved fields.
6613            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6614
6615            // Safety:
6616            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6617            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6618            //   envelope_size bytes, there is always sufficient room.
6619            fidl::encoding::encode_in_envelope_optional::<
6620                fidl::encoding::BoundedString<64>,
6621                fidl::encoding::DefaultFuchsiaResourceDialect,
6622            >(
6623                self.identifier.as_ref().map(
6624                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6625                ),
6626                encoder,
6627                offset + cur_offset,
6628                depth,
6629            )?;
6630
6631            _prev_end_offset = cur_offset + envelope_size;
6632            if 2 > max_ordinal {
6633                return Ok(());
6634            }
6635
6636            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6637            // are envelope_size bytes.
6638            let cur_offset: usize = (2 - 1) * envelope_size;
6639
6640            // Zero reserved fields.
6641            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6642
6643            // Safety:
6644            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6645            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6646            //   envelope_size bytes, there is always sufficient room.
6647            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<StatusMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
6648            self.status.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<StatusMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
6649            encoder, offset + cur_offset, depth
6650        )?;
6651
6652            _prev_end_offset = cur_offset + envelope_size;
6653
6654            Ok(())
6655        }
6656    }
6657
6658    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6659        for ElementStatusEndpoint
6660    {
6661        #[inline(always)]
6662        fn new_empty() -> Self {
6663            Self::default()
6664        }
6665
6666        unsafe fn decode(
6667            &mut self,
6668            decoder: &mut fidl::encoding::Decoder<
6669                '_,
6670                fidl::encoding::DefaultFuchsiaResourceDialect,
6671            >,
6672            offset: usize,
6673            mut depth: fidl::encoding::Depth,
6674        ) -> fidl::Result<()> {
6675            decoder.debug_check_bounds::<Self>(offset);
6676            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6677                None => return Err(fidl::Error::NotNullable),
6678                Some(len) => len,
6679            };
6680            // Calling decoder.out_of_line_offset(0) is not allowed.
6681            if len == 0 {
6682                return Ok(());
6683            };
6684            depth.increment()?;
6685            let envelope_size = 8;
6686            let bytes_len = len * envelope_size;
6687            let offset = decoder.out_of_line_offset(bytes_len)?;
6688            // Decode the envelope for each type.
6689            let mut _next_ordinal_to_read = 0;
6690            let mut next_offset = offset;
6691            let end_offset = offset + bytes_len;
6692            _next_ordinal_to_read += 1;
6693            if next_offset >= end_offset {
6694                return Ok(());
6695            }
6696
6697            // Decode unknown envelopes for gaps in ordinals.
6698            while _next_ordinal_to_read < 1 {
6699                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6700                _next_ordinal_to_read += 1;
6701                next_offset += envelope_size;
6702            }
6703
6704            let next_out_of_line = decoder.next_out_of_line();
6705            let handles_before = decoder.remaining_handles();
6706            if let Some((inlined, num_bytes, num_handles)) =
6707                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6708            {
6709                let member_inline_size =
6710                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
6711                        decoder.context,
6712                    );
6713                if inlined != (member_inline_size <= 4) {
6714                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6715                }
6716                let inner_offset;
6717                let mut inner_depth = depth.clone();
6718                if inlined {
6719                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6720                    inner_offset = next_offset;
6721                } else {
6722                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6723                    inner_depth.increment()?;
6724                }
6725                let val_ref = self.identifier.get_or_insert_with(|| {
6726                    fidl::new_empty!(
6727                        fidl::encoding::BoundedString<64>,
6728                        fidl::encoding::DefaultFuchsiaResourceDialect
6729                    )
6730                });
6731                fidl::decode!(
6732                    fidl::encoding::BoundedString<64>,
6733                    fidl::encoding::DefaultFuchsiaResourceDialect,
6734                    val_ref,
6735                    decoder,
6736                    inner_offset,
6737                    inner_depth
6738                )?;
6739                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6740                {
6741                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6742                }
6743                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6744                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6745                }
6746            }
6747
6748            next_offset += envelope_size;
6749            _next_ordinal_to_read += 1;
6750            if next_offset >= end_offset {
6751                return Ok(());
6752            }
6753
6754            // Decode unknown envelopes for gaps in ordinals.
6755            while _next_ordinal_to_read < 2 {
6756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6757                _next_ordinal_to_read += 1;
6758                next_offset += envelope_size;
6759            }
6760
6761            let next_out_of_line = decoder.next_out_of_line();
6762            let handles_before = decoder.remaining_handles();
6763            if let Some((inlined, num_bytes, num_handles)) =
6764                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6765            {
6766                let member_inline_size = <fidl::encoding::Endpoint<
6767                    fidl::endpoints::ClientEnd<StatusMarker>,
6768                > as fidl::encoding::TypeMarker>::inline_size(
6769                    decoder.context
6770                );
6771                if inlined != (member_inline_size <= 4) {
6772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6773                }
6774                let inner_offset;
6775                let mut inner_depth = depth.clone();
6776                if inlined {
6777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6778                    inner_offset = next_offset;
6779                } else {
6780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6781                    inner_depth.increment()?;
6782                }
6783                let val_ref = self.status.get_or_insert_with(|| {
6784                    fidl::new_empty!(
6785                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<StatusMarker>>,
6786                        fidl::encoding::DefaultFuchsiaResourceDialect
6787                    )
6788                });
6789                fidl::decode!(
6790                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<StatusMarker>>,
6791                    fidl::encoding::DefaultFuchsiaResourceDialect,
6792                    val_ref,
6793                    decoder,
6794                    inner_offset,
6795                    inner_depth
6796                )?;
6797                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6798                {
6799                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6800                }
6801                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6802                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6803                }
6804            }
6805
6806            next_offset += envelope_size;
6807
6808            // Decode the remaining unknown envelopes.
6809            while next_offset < end_offset {
6810                _next_ordinal_to_read += 1;
6811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6812                next_offset += envelope_size;
6813            }
6814
6815            Ok(())
6816        }
6817    }
6818
6819    impl LeaseDependency {
6820        #[inline(always)]
6821        fn max_ordinal_present(&self) -> u64 {
6822            if let Some(_) = self.requires_level_by_preference {
6823                return 3;
6824            }
6825            if let Some(_) = self.requires_level {
6826                return 2;
6827            }
6828            if let Some(_) = self.requires_token {
6829                return 1;
6830            }
6831            0
6832        }
6833    }
6834
6835    impl fidl::encoding::ResourceTypeMarker for LeaseDependency {
6836        type Borrowed<'a> = &'a mut Self;
6837        fn take_or_borrow<'a>(
6838            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
6839        ) -> Self::Borrowed<'a> {
6840            value
6841        }
6842    }
6843
6844    unsafe impl fidl::encoding::TypeMarker for LeaseDependency {
6845        type Owned = Self;
6846
6847        #[inline(always)]
6848        fn inline_align(_context: fidl::encoding::Context) -> usize {
6849            8
6850        }
6851
6852        #[inline(always)]
6853        fn inline_size(_context: fidl::encoding::Context) -> usize {
6854            16
6855        }
6856    }
6857
6858    unsafe impl
6859        fidl::encoding::Encode<LeaseDependency, fidl::encoding::DefaultFuchsiaResourceDialect>
6860        for &mut LeaseDependency
6861    {
6862        unsafe fn encode(
6863            self,
6864            encoder: &mut fidl::encoding::Encoder<
6865                '_,
6866                fidl::encoding::DefaultFuchsiaResourceDialect,
6867            >,
6868            offset: usize,
6869            mut depth: fidl::encoding::Depth,
6870        ) -> fidl::Result<()> {
6871            encoder.debug_check_bounds::<LeaseDependency>(offset);
6872            // Vector header
6873            let max_ordinal: u64 = self.max_ordinal_present();
6874            encoder.write_num(max_ordinal, offset);
6875            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6876            // Calling encoder.out_of_line_offset(0) is not allowed.
6877            if max_ordinal == 0 {
6878                return Ok(());
6879            }
6880            depth.increment()?;
6881            let envelope_size = 8;
6882            let bytes_len = max_ordinal as usize * envelope_size;
6883            #[allow(unused_variables)]
6884            let offset = encoder.out_of_line_offset(bytes_len);
6885            let mut _prev_end_offset: usize = 0;
6886            if 1 > max_ordinal {
6887                return Ok(());
6888            }
6889
6890            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6891            // are envelope_size bytes.
6892            let cur_offset: usize = (1 - 1) * envelope_size;
6893
6894            // Zero reserved fields.
6895            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6896
6897            // Safety:
6898            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6899            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6900            //   envelope_size bytes, there is always sufficient room.
6901            fidl::encoding::encode_in_envelope_optional::<
6902                fidl::encoding::HandleType<
6903                    fidl::Event,
6904                    { fidl::ObjectType::EVENT.into_raw() },
6905                    2147483648,
6906                >,
6907                fidl::encoding::DefaultFuchsiaResourceDialect,
6908            >(
6909                self.requires_token.as_mut().map(
6910                    <fidl::encoding::HandleType<
6911                        fidl::Event,
6912                        { fidl::ObjectType::EVENT.into_raw() },
6913                        2147483648,
6914                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
6915                ),
6916                encoder,
6917                offset + cur_offset,
6918                depth,
6919            )?;
6920
6921            _prev_end_offset = cur_offset + envelope_size;
6922            if 2 > max_ordinal {
6923                return Ok(());
6924            }
6925
6926            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6927            // are envelope_size bytes.
6928            let cur_offset: usize = (2 - 1) * envelope_size;
6929
6930            // Zero reserved fields.
6931            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6932
6933            // Safety:
6934            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6935            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6936            //   envelope_size bytes, there is always sufficient room.
6937            fidl::encoding::encode_in_envelope_optional::<
6938                u8,
6939                fidl::encoding::DefaultFuchsiaResourceDialect,
6940            >(
6941                self.requires_level.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
6942                encoder,
6943                offset + cur_offset,
6944                depth,
6945            )?;
6946
6947            _prev_end_offset = cur_offset + envelope_size;
6948            if 3 > max_ordinal {
6949                return Ok(());
6950            }
6951
6952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6953            // are envelope_size bytes.
6954            let cur_offset: usize = (3 - 1) * envelope_size;
6955
6956            // Zero reserved fields.
6957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6958
6959            // Safety:
6960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6962            //   envelope_size bytes, there is always sufficient room.
6963            fidl::encoding::encode_in_envelope_optional::<
6964                fidl::encoding::Vector<u8, 256>,
6965                fidl::encoding::DefaultFuchsiaResourceDialect,
6966            >(
6967                self.requires_level_by_preference.as_ref().map(
6968                    <fidl::encoding::Vector<u8, 256> as fidl::encoding::ValueTypeMarker>::borrow,
6969                ),
6970                encoder,
6971                offset + cur_offset,
6972                depth,
6973            )?;
6974
6975            _prev_end_offset = cur_offset + envelope_size;
6976
6977            Ok(())
6978        }
6979    }
6980
6981    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
6982        for LeaseDependency
6983    {
6984        #[inline(always)]
6985        fn new_empty() -> Self {
6986            Self::default()
6987        }
6988
6989        unsafe fn decode(
6990            &mut self,
6991            decoder: &mut fidl::encoding::Decoder<
6992                '_,
6993                fidl::encoding::DefaultFuchsiaResourceDialect,
6994            >,
6995            offset: usize,
6996            mut depth: fidl::encoding::Depth,
6997        ) -> fidl::Result<()> {
6998            decoder.debug_check_bounds::<Self>(offset);
6999            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7000                None => return Err(fidl::Error::NotNullable),
7001                Some(len) => len,
7002            };
7003            // Calling decoder.out_of_line_offset(0) is not allowed.
7004            if len == 0 {
7005                return Ok(());
7006            };
7007            depth.increment()?;
7008            let envelope_size = 8;
7009            let bytes_len = len * envelope_size;
7010            let offset = decoder.out_of_line_offset(bytes_len)?;
7011            // Decode the envelope for each type.
7012            let mut _next_ordinal_to_read = 0;
7013            let mut next_offset = offset;
7014            let end_offset = offset + bytes_len;
7015            _next_ordinal_to_read += 1;
7016            if next_offset >= end_offset {
7017                return Ok(());
7018            }
7019
7020            // Decode unknown envelopes for gaps in ordinals.
7021            while _next_ordinal_to_read < 1 {
7022                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7023                _next_ordinal_to_read += 1;
7024                next_offset += envelope_size;
7025            }
7026
7027            let next_out_of_line = decoder.next_out_of_line();
7028            let handles_before = decoder.remaining_handles();
7029            if let Some((inlined, num_bytes, num_handles)) =
7030                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7031            {
7032                let member_inline_size = <fidl::encoding::HandleType<
7033                    fidl::Event,
7034                    { fidl::ObjectType::EVENT.into_raw() },
7035                    2147483648,
7036                > as fidl::encoding::TypeMarker>::inline_size(
7037                    decoder.context
7038                );
7039                if inlined != (member_inline_size <= 4) {
7040                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7041                }
7042                let inner_offset;
7043                let mut inner_depth = depth.clone();
7044                if inlined {
7045                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7046                    inner_offset = next_offset;
7047                } else {
7048                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7049                    inner_depth.increment()?;
7050                }
7051                let val_ref =
7052                self.requires_token.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
7053                fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7054                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7055                {
7056                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7057                }
7058                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7059                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7060                }
7061            }
7062
7063            next_offset += envelope_size;
7064            _next_ordinal_to_read += 1;
7065            if next_offset >= end_offset {
7066                return Ok(());
7067            }
7068
7069            // Decode unknown envelopes for gaps in ordinals.
7070            while _next_ordinal_to_read < 2 {
7071                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7072                _next_ordinal_to_read += 1;
7073                next_offset += envelope_size;
7074            }
7075
7076            let next_out_of_line = decoder.next_out_of_line();
7077            let handles_before = decoder.remaining_handles();
7078            if let Some((inlined, num_bytes, num_handles)) =
7079                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7080            {
7081                let member_inline_size =
7082                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7083                if inlined != (member_inline_size <= 4) {
7084                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7085                }
7086                let inner_offset;
7087                let mut inner_depth = depth.clone();
7088                if inlined {
7089                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7090                    inner_offset = next_offset;
7091                } else {
7092                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7093                    inner_depth.increment()?;
7094                }
7095                let val_ref = self.requires_level.get_or_insert_with(|| {
7096                    fidl::new_empty!(u8, fidl::encoding::DefaultFuchsiaResourceDialect)
7097                });
7098                fidl::decode!(
7099                    u8,
7100                    fidl::encoding::DefaultFuchsiaResourceDialect,
7101                    val_ref,
7102                    decoder,
7103                    inner_offset,
7104                    inner_depth
7105                )?;
7106                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7107                {
7108                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7109                }
7110                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7111                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7112                }
7113            }
7114
7115            next_offset += envelope_size;
7116            _next_ordinal_to_read += 1;
7117            if next_offset >= end_offset {
7118                return Ok(());
7119            }
7120
7121            // Decode unknown envelopes for gaps in ordinals.
7122            while _next_ordinal_to_read < 3 {
7123                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7124                _next_ordinal_to_read += 1;
7125                next_offset += envelope_size;
7126            }
7127
7128            let next_out_of_line = decoder.next_out_of_line();
7129            let handles_before = decoder.remaining_handles();
7130            if let Some((inlined, num_bytes, num_handles)) =
7131                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7132            {
7133                let member_inline_size =
7134                    <fidl::encoding::Vector<u8, 256> as fidl::encoding::TypeMarker>::inline_size(
7135                        decoder.context,
7136                    );
7137                if inlined != (member_inline_size <= 4) {
7138                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7139                }
7140                let inner_offset;
7141                let mut inner_depth = depth.clone();
7142                if inlined {
7143                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7144                    inner_offset = next_offset;
7145                } else {
7146                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7147                    inner_depth.increment()?;
7148                }
7149                let val_ref =
7150                self.requires_level_by_preference.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 256>, fidl::encoding::DefaultFuchsiaResourceDialect));
7151                fidl::decode!(fidl::encoding::Vector<u8, 256>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7153                {
7154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7155                }
7156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7158                }
7159            }
7160
7161            next_offset += envelope_size;
7162
7163            // Decode the remaining unknown envelopes.
7164            while next_offset < end_offset {
7165                _next_ordinal_to_read += 1;
7166                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7167                next_offset += envelope_size;
7168            }
7169
7170            Ok(())
7171        }
7172    }
7173
7174    impl LeaseSchema {
7175        #[inline(always)]
7176        fn max_ordinal_present(&self) -> u64 {
7177            if let Some(_) = self.should_return_pending_lease {
7178                return 4;
7179            }
7180            if let Some(_) = self.dependencies {
7181                return 3;
7182            }
7183            if let Some(_) = self.lease_name {
7184                return 2;
7185            }
7186            if let Some(_) = self.lease_token {
7187                return 1;
7188            }
7189            0
7190        }
7191    }
7192
7193    impl fidl::encoding::ResourceTypeMarker for LeaseSchema {
7194        type Borrowed<'a> = &'a mut Self;
7195        fn take_or_borrow<'a>(
7196            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7197        ) -> Self::Borrowed<'a> {
7198            value
7199        }
7200    }
7201
7202    unsafe impl fidl::encoding::TypeMarker for LeaseSchema {
7203        type Owned = Self;
7204
7205        #[inline(always)]
7206        fn inline_align(_context: fidl::encoding::Context) -> usize {
7207            8
7208        }
7209
7210        #[inline(always)]
7211        fn inline_size(_context: fidl::encoding::Context) -> usize {
7212            16
7213        }
7214    }
7215
7216    unsafe impl fidl::encoding::Encode<LeaseSchema, fidl::encoding::DefaultFuchsiaResourceDialect>
7217        for &mut LeaseSchema
7218    {
7219        unsafe fn encode(
7220            self,
7221            encoder: &mut fidl::encoding::Encoder<
7222                '_,
7223                fidl::encoding::DefaultFuchsiaResourceDialect,
7224            >,
7225            offset: usize,
7226            mut depth: fidl::encoding::Depth,
7227        ) -> fidl::Result<()> {
7228            encoder.debug_check_bounds::<LeaseSchema>(offset);
7229            // Vector header
7230            let max_ordinal: u64 = self.max_ordinal_present();
7231            encoder.write_num(max_ordinal, offset);
7232            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7233            // Calling encoder.out_of_line_offset(0) is not allowed.
7234            if max_ordinal == 0 {
7235                return Ok(());
7236            }
7237            depth.increment()?;
7238            let envelope_size = 8;
7239            let bytes_len = max_ordinal as usize * envelope_size;
7240            #[allow(unused_variables)]
7241            let offset = encoder.out_of_line_offset(bytes_len);
7242            let mut _prev_end_offset: usize = 0;
7243            if 1 > max_ordinal {
7244                return Ok(());
7245            }
7246
7247            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7248            // are envelope_size bytes.
7249            let cur_offset: usize = (1 - 1) * envelope_size;
7250
7251            // Zero reserved fields.
7252            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7253
7254            // Safety:
7255            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7256            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7257            //   envelope_size bytes, there is always sufficient room.
7258            fidl::encoding::encode_in_envelope_optional::<
7259                fidl::encoding::HandleType<
7260                    fidl::EventPair,
7261                    { fidl::ObjectType::EVENTPAIR.into_raw() },
7262                    24579,
7263                >,
7264                fidl::encoding::DefaultFuchsiaResourceDialect,
7265            >(
7266                self.lease_token.as_mut().map(
7267                    <fidl::encoding::HandleType<
7268                        fidl::EventPair,
7269                        { fidl::ObjectType::EVENTPAIR.into_raw() },
7270                        24579,
7271                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
7272                ),
7273                encoder,
7274                offset + cur_offset,
7275                depth,
7276            )?;
7277
7278            _prev_end_offset = cur_offset + envelope_size;
7279            if 2 > max_ordinal {
7280                return Ok(());
7281            }
7282
7283            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7284            // are envelope_size bytes.
7285            let cur_offset: usize = (2 - 1) * envelope_size;
7286
7287            // Zero reserved fields.
7288            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7289
7290            // Safety:
7291            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7292            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7293            //   envelope_size bytes, there is always sufficient room.
7294            fidl::encoding::encode_in_envelope_optional::<
7295                fidl::encoding::BoundedString<64>,
7296                fidl::encoding::DefaultFuchsiaResourceDialect,
7297            >(
7298                self.lease_name.as_ref().map(
7299                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
7300                ),
7301                encoder,
7302                offset + cur_offset,
7303                depth,
7304            )?;
7305
7306            _prev_end_offset = cur_offset + envelope_size;
7307            if 3 > max_ordinal {
7308                return Ok(());
7309            }
7310
7311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7312            // are envelope_size bytes.
7313            let cur_offset: usize = (3 - 1) * envelope_size;
7314
7315            // Zero reserved fields.
7316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7317
7318            // Safety:
7319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7321            //   envelope_size bytes, there is always sufficient room.
7322            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LeaseDependency, 128>, fidl::encoding::DefaultFuchsiaResourceDialect>(
7323            self.dependencies.as_mut().map(<fidl::encoding::Vector<LeaseDependency, 128> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
7324            encoder, offset + cur_offset, depth
7325        )?;
7326
7327            _prev_end_offset = cur_offset + envelope_size;
7328            if 4 > max_ordinal {
7329                return Ok(());
7330            }
7331
7332            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7333            // are envelope_size bytes.
7334            let cur_offset: usize = (4 - 1) * envelope_size;
7335
7336            // Zero reserved fields.
7337            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7338
7339            // Safety:
7340            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7341            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7342            //   envelope_size bytes, there is always sufficient room.
7343            fidl::encoding::encode_in_envelope_optional::<
7344                bool,
7345                fidl::encoding::DefaultFuchsiaResourceDialect,
7346            >(
7347                self.should_return_pending_lease
7348                    .as_ref()
7349                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7350                encoder,
7351                offset + cur_offset,
7352                depth,
7353            )?;
7354
7355            _prev_end_offset = cur_offset + envelope_size;
7356
7357            Ok(())
7358        }
7359    }
7360
7361    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for LeaseSchema {
7362        #[inline(always)]
7363        fn new_empty() -> Self {
7364            Self::default()
7365        }
7366
7367        unsafe fn decode(
7368            &mut self,
7369            decoder: &mut fidl::encoding::Decoder<
7370                '_,
7371                fidl::encoding::DefaultFuchsiaResourceDialect,
7372            >,
7373            offset: usize,
7374            mut depth: fidl::encoding::Depth,
7375        ) -> fidl::Result<()> {
7376            decoder.debug_check_bounds::<Self>(offset);
7377            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7378                None => return Err(fidl::Error::NotNullable),
7379                Some(len) => len,
7380            };
7381            // Calling decoder.out_of_line_offset(0) is not allowed.
7382            if len == 0 {
7383                return Ok(());
7384            };
7385            depth.increment()?;
7386            let envelope_size = 8;
7387            let bytes_len = len * envelope_size;
7388            let offset = decoder.out_of_line_offset(bytes_len)?;
7389            // Decode the envelope for each type.
7390            let mut _next_ordinal_to_read = 0;
7391            let mut next_offset = offset;
7392            let end_offset = offset + bytes_len;
7393            _next_ordinal_to_read += 1;
7394            if next_offset >= end_offset {
7395                return Ok(());
7396            }
7397
7398            // Decode unknown envelopes for gaps in ordinals.
7399            while _next_ordinal_to_read < 1 {
7400                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7401                _next_ordinal_to_read += 1;
7402                next_offset += envelope_size;
7403            }
7404
7405            let next_out_of_line = decoder.next_out_of_line();
7406            let handles_before = decoder.remaining_handles();
7407            if let Some((inlined, num_bytes, num_handles)) =
7408                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7409            {
7410                let member_inline_size = <fidl::encoding::HandleType<
7411                    fidl::EventPair,
7412                    { fidl::ObjectType::EVENTPAIR.into_raw() },
7413                    24579,
7414                > as fidl::encoding::TypeMarker>::inline_size(
7415                    decoder.context
7416                );
7417                if inlined != (member_inline_size <= 4) {
7418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7419                }
7420                let inner_offset;
7421                let mut inner_depth = depth.clone();
7422                if inlined {
7423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7424                    inner_offset = next_offset;
7425                } else {
7426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7427                    inner_depth.increment()?;
7428                }
7429                let val_ref =
7430                self.lease_token.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 24579>, fidl::encoding::DefaultFuchsiaResourceDialect));
7431                fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 24579>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7432                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7433                {
7434                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7435                }
7436                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7437                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7438                }
7439            }
7440
7441            next_offset += envelope_size;
7442            _next_ordinal_to_read += 1;
7443            if next_offset >= end_offset {
7444                return Ok(());
7445            }
7446
7447            // Decode unknown envelopes for gaps in ordinals.
7448            while _next_ordinal_to_read < 2 {
7449                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7450                _next_ordinal_to_read += 1;
7451                next_offset += envelope_size;
7452            }
7453
7454            let next_out_of_line = decoder.next_out_of_line();
7455            let handles_before = decoder.remaining_handles();
7456            if let Some((inlined, num_bytes, num_handles)) =
7457                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7458            {
7459                let member_inline_size =
7460                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7461                        decoder.context,
7462                    );
7463                if inlined != (member_inline_size <= 4) {
7464                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7465                }
7466                let inner_offset;
7467                let mut inner_depth = depth.clone();
7468                if inlined {
7469                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7470                    inner_offset = next_offset;
7471                } else {
7472                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7473                    inner_depth.increment()?;
7474                }
7475                let val_ref = self.lease_name.get_or_insert_with(|| {
7476                    fidl::new_empty!(
7477                        fidl::encoding::BoundedString<64>,
7478                        fidl::encoding::DefaultFuchsiaResourceDialect
7479                    )
7480                });
7481                fidl::decode!(
7482                    fidl::encoding::BoundedString<64>,
7483                    fidl::encoding::DefaultFuchsiaResourceDialect,
7484                    val_ref,
7485                    decoder,
7486                    inner_offset,
7487                    inner_depth
7488                )?;
7489                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7490                {
7491                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7492                }
7493                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7494                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7495                }
7496            }
7497
7498            next_offset += envelope_size;
7499            _next_ordinal_to_read += 1;
7500            if next_offset >= end_offset {
7501                return Ok(());
7502            }
7503
7504            // Decode unknown envelopes for gaps in ordinals.
7505            while _next_ordinal_to_read < 3 {
7506                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7507                _next_ordinal_to_read += 1;
7508                next_offset += envelope_size;
7509            }
7510
7511            let next_out_of_line = decoder.next_out_of_line();
7512            let handles_before = decoder.remaining_handles();
7513            if let Some((inlined, num_bytes, num_handles)) =
7514                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7515            {
7516                let member_inline_size = <fidl::encoding::Vector<LeaseDependency, 128> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7517                if inlined != (member_inline_size <= 4) {
7518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7519                }
7520                let inner_offset;
7521                let mut inner_depth = depth.clone();
7522                if inlined {
7523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7524                    inner_offset = next_offset;
7525                } else {
7526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7527                    inner_depth.increment()?;
7528                }
7529                let val_ref =
7530                self.dependencies.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<LeaseDependency, 128>, fidl::encoding::DefaultFuchsiaResourceDialect));
7531                fidl::decode!(fidl::encoding::Vector<LeaseDependency, 128>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7533                {
7534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7535                }
7536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7538                }
7539            }
7540
7541            next_offset += envelope_size;
7542            _next_ordinal_to_read += 1;
7543            if next_offset >= end_offset {
7544                return Ok(());
7545            }
7546
7547            // Decode unknown envelopes for gaps in ordinals.
7548            while _next_ordinal_to_read < 4 {
7549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7550                _next_ordinal_to_read += 1;
7551                next_offset += envelope_size;
7552            }
7553
7554            let next_out_of_line = decoder.next_out_of_line();
7555            let handles_before = decoder.remaining_handles();
7556            if let Some((inlined, num_bytes, num_handles)) =
7557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7558            {
7559                let member_inline_size =
7560                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7561                if inlined != (member_inline_size <= 4) {
7562                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7563                }
7564                let inner_offset;
7565                let mut inner_depth = depth.clone();
7566                if inlined {
7567                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7568                    inner_offset = next_offset;
7569                } else {
7570                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7571                    inner_depth.increment()?;
7572                }
7573                let val_ref = self.should_return_pending_lease.get_or_insert_with(|| {
7574                    fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
7575                });
7576                fidl::decode!(
7577                    bool,
7578                    fidl::encoding::DefaultFuchsiaResourceDialect,
7579                    val_ref,
7580                    decoder,
7581                    inner_offset,
7582                    inner_depth
7583                )?;
7584                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7585                {
7586                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7587                }
7588                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7589                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7590                }
7591            }
7592
7593            next_offset += envelope_size;
7594
7595            // Decode the remaining unknown envelopes.
7596            while next_offset < end_offset {
7597                _next_ordinal_to_read += 1;
7598                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7599                next_offset += envelope_size;
7600            }
7601
7602            Ok(())
7603        }
7604    }
7605
7606    impl LevelDependency {
7607        #[inline(always)]
7608        fn max_ordinal_present(&self) -> u64 {
7609            if let Some(_) = self.remove_with_required_element {
7610                return 4;
7611            }
7612            if let Some(_) = self.requires_level_by_preference {
7613                return 3;
7614            }
7615            if let Some(_) = self.requires_token {
7616                return 2;
7617            }
7618            if let Some(_) = self.dependent_level {
7619                return 1;
7620            }
7621            0
7622        }
7623    }
7624
7625    impl fidl::encoding::ResourceTypeMarker for LevelDependency {
7626        type Borrowed<'a> = &'a mut Self;
7627        fn take_or_borrow<'a>(
7628            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7629        ) -> Self::Borrowed<'a> {
7630            value
7631        }
7632    }
7633
7634    unsafe impl fidl::encoding::TypeMarker for LevelDependency {
7635        type Owned = Self;
7636
7637        #[inline(always)]
7638        fn inline_align(_context: fidl::encoding::Context) -> usize {
7639            8
7640        }
7641
7642        #[inline(always)]
7643        fn inline_size(_context: fidl::encoding::Context) -> usize {
7644            16
7645        }
7646    }
7647
7648    unsafe impl
7649        fidl::encoding::Encode<LevelDependency, fidl::encoding::DefaultFuchsiaResourceDialect>
7650        for &mut LevelDependency
7651    {
7652        unsafe fn encode(
7653            self,
7654            encoder: &mut fidl::encoding::Encoder<
7655                '_,
7656                fidl::encoding::DefaultFuchsiaResourceDialect,
7657            >,
7658            offset: usize,
7659            mut depth: fidl::encoding::Depth,
7660        ) -> fidl::Result<()> {
7661            encoder.debug_check_bounds::<LevelDependency>(offset);
7662            // Vector header
7663            let max_ordinal: u64 = self.max_ordinal_present();
7664            encoder.write_num(max_ordinal, offset);
7665            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7666            // Calling encoder.out_of_line_offset(0) is not allowed.
7667            if max_ordinal == 0 {
7668                return Ok(());
7669            }
7670            depth.increment()?;
7671            let envelope_size = 8;
7672            let bytes_len = max_ordinal as usize * envelope_size;
7673            #[allow(unused_variables)]
7674            let offset = encoder.out_of_line_offset(bytes_len);
7675            let mut _prev_end_offset: usize = 0;
7676            if 1 > max_ordinal {
7677                return Ok(());
7678            }
7679
7680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7681            // are envelope_size bytes.
7682            let cur_offset: usize = (1 - 1) * envelope_size;
7683
7684            // Zero reserved fields.
7685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7686
7687            // Safety:
7688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7690            //   envelope_size bytes, there is always sufficient room.
7691            fidl::encoding::encode_in_envelope_optional::<
7692                u8,
7693                fidl::encoding::DefaultFuchsiaResourceDialect,
7694            >(
7695                self.dependent_level.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7696                encoder,
7697                offset + cur_offset,
7698                depth,
7699            )?;
7700
7701            _prev_end_offset = cur_offset + envelope_size;
7702            if 2 > max_ordinal {
7703                return Ok(());
7704            }
7705
7706            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7707            // are envelope_size bytes.
7708            let cur_offset: usize = (2 - 1) * envelope_size;
7709
7710            // Zero reserved fields.
7711            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7712
7713            // Safety:
7714            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7715            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7716            //   envelope_size bytes, there is always sufficient room.
7717            fidl::encoding::encode_in_envelope_optional::<
7718                fidl::encoding::HandleType<
7719                    fidl::Event,
7720                    { fidl::ObjectType::EVENT.into_raw() },
7721                    2147483648,
7722                >,
7723                fidl::encoding::DefaultFuchsiaResourceDialect,
7724            >(
7725                self.requires_token.as_mut().map(
7726                    <fidl::encoding::HandleType<
7727                        fidl::Event,
7728                        { fidl::ObjectType::EVENT.into_raw() },
7729                        2147483648,
7730                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
7731                ),
7732                encoder,
7733                offset + cur_offset,
7734                depth,
7735            )?;
7736
7737            _prev_end_offset = cur_offset + envelope_size;
7738            if 3 > max_ordinal {
7739                return Ok(());
7740            }
7741
7742            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7743            // are envelope_size bytes.
7744            let cur_offset: usize = (3 - 1) * envelope_size;
7745
7746            // Zero reserved fields.
7747            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7748
7749            // Safety:
7750            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7751            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7752            //   envelope_size bytes, there is always sufficient room.
7753            fidl::encoding::encode_in_envelope_optional::<
7754                fidl::encoding::Vector<u8, 256>,
7755                fidl::encoding::DefaultFuchsiaResourceDialect,
7756            >(
7757                self.requires_level_by_preference.as_ref().map(
7758                    <fidl::encoding::Vector<u8, 256> as fidl::encoding::ValueTypeMarker>::borrow,
7759                ),
7760                encoder,
7761                offset + cur_offset,
7762                depth,
7763            )?;
7764
7765            _prev_end_offset = cur_offset + envelope_size;
7766            if 4 > max_ordinal {
7767                return Ok(());
7768            }
7769
7770            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7771            // are envelope_size bytes.
7772            let cur_offset: usize = (4 - 1) * envelope_size;
7773
7774            // Zero reserved fields.
7775            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7776
7777            // Safety:
7778            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7779            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7780            //   envelope_size bytes, there is always sufficient room.
7781            fidl::encoding::encode_in_envelope_optional::<
7782                bool,
7783                fidl::encoding::DefaultFuchsiaResourceDialect,
7784            >(
7785                self.remove_with_required_element
7786                    .as_ref()
7787                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7788                encoder,
7789                offset + cur_offset,
7790                depth,
7791            )?;
7792
7793            _prev_end_offset = cur_offset + envelope_size;
7794
7795            Ok(())
7796        }
7797    }
7798
7799    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7800        for LevelDependency
7801    {
7802        #[inline(always)]
7803        fn new_empty() -> Self {
7804            Self::default()
7805        }
7806
7807        unsafe fn decode(
7808            &mut self,
7809            decoder: &mut fidl::encoding::Decoder<
7810                '_,
7811                fidl::encoding::DefaultFuchsiaResourceDialect,
7812            >,
7813            offset: usize,
7814            mut depth: fidl::encoding::Depth,
7815        ) -> fidl::Result<()> {
7816            decoder.debug_check_bounds::<Self>(offset);
7817            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7818                None => return Err(fidl::Error::NotNullable),
7819                Some(len) => len,
7820            };
7821            // Calling decoder.out_of_line_offset(0) is not allowed.
7822            if len == 0 {
7823                return Ok(());
7824            };
7825            depth.increment()?;
7826            let envelope_size = 8;
7827            let bytes_len = len * envelope_size;
7828            let offset = decoder.out_of_line_offset(bytes_len)?;
7829            // Decode the envelope for each type.
7830            let mut _next_ordinal_to_read = 0;
7831            let mut next_offset = offset;
7832            let end_offset = offset + bytes_len;
7833            _next_ordinal_to_read += 1;
7834            if next_offset >= end_offset {
7835                return Ok(());
7836            }
7837
7838            // Decode unknown envelopes for gaps in ordinals.
7839            while _next_ordinal_to_read < 1 {
7840                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7841                _next_ordinal_to_read += 1;
7842                next_offset += envelope_size;
7843            }
7844
7845            let next_out_of_line = decoder.next_out_of_line();
7846            let handles_before = decoder.remaining_handles();
7847            if let Some((inlined, num_bytes, num_handles)) =
7848                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7849            {
7850                let member_inline_size =
7851                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7852                if inlined != (member_inline_size <= 4) {
7853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7854                }
7855                let inner_offset;
7856                let mut inner_depth = depth.clone();
7857                if inlined {
7858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7859                    inner_offset = next_offset;
7860                } else {
7861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7862                    inner_depth.increment()?;
7863                }
7864                let val_ref = self.dependent_level.get_or_insert_with(|| {
7865                    fidl::new_empty!(u8, fidl::encoding::DefaultFuchsiaResourceDialect)
7866                });
7867                fidl::decode!(
7868                    u8,
7869                    fidl::encoding::DefaultFuchsiaResourceDialect,
7870                    val_ref,
7871                    decoder,
7872                    inner_offset,
7873                    inner_depth
7874                )?;
7875                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7876                {
7877                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7878                }
7879                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7880                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7881                }
7882            }
7883
7884            next_offset += envelope_size;
7885            _next_ordinal_to_read += 1;
7886            if next_offset >= end_offset {
7887                return Ok(());
7888            }
7889
7890            // Decode unknown envelopes for gaps in ordinals.
7891            while _next_ordinal_to_read < 2 {
7892                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7893                _next_ordinal_to_read += 1;
7894                next_offset += envelope_size;
7895            }
7896
7897            let next_out_of_line = decoder.next_out_of_line();
7898            let handles_before = decoder.remaining_handles();
7899            if let Some((inlined, num_bytes, num_handles)) =
7900                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7901            {
7902                let member_inline_size = <fidl::encoding::HandleType<
7903                    fidl::Event,
7904                    { fidl::ObjectType::EVENT.into_raw() },
7905                    2147483648,
7906                > as fidl::encoding::TypeMarker>::inline_size(
7907                    decoder.context
7908                );
7909                if inlined != (member_inline_size <= 4) {
7910                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7911                }
7912                let inner_offset;
7913                let mut inner_depth = depth.clone();
7914                if inlined {
7915                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7916                    inner_offset = next_offset;
7917                } else {
7918                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7919                    inner_depth.increment()?;
7920                }
7921                let val_ref =
7922                self.requires_token.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
7923                fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7924                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7925                {
7926                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7927                }
7928                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7929                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7930                }
7931            }
7932
7933            next_offset += envelope_size;
7934            _next_ordinal_to_read += 1;
7935            if next_offset >= end_offset {
7936                return Ok(());
7937            }
7938
7939            // Decode unknown envelopes for gaps in ordinals.
7940            while _next_ordinal_to_read < 3 {
7941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7942                _next_ordinal_to_read += 1;
7943                next_offset += envelope_size;
7944            }
7945
7946            let next_out_of_line = decoder.next_out_of_line();
7947            let handles_before = decoder.remaining_handles();
7948            if let Some((inlined, num_bytes, num_handles)) =
7949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7950            {
7951                let member_inline_size =
7952                    <fidl::encoding::Vector<u8, 256> as fidl::encoding::TypeMarker>::inline_size(
7953                        decoder.context,
7954                    );
7955                if inlined != (member_inline_size <= 4) {
7956                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7957                }
7958                let inner_offset;
7959                let mut inner_depth = depth.clone();
7960                if inlined {
7961                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7962                    inner_offset = next_offset;
7963                } else {
7964                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7965                    inner_depth.increment()?;
7966                }
7967                let val_ref =
7968                self.requires_level_by_preference.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 256>, fidl::encoding::DefaultFuchsiaResourceDialect));
7969                fidl::decode!(fidl::encoding::Vector<u8, 256>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7971                {
7972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7973                }
7974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7976                }
7977            }
7978
7979            next_offset += envelope_size;
7980            _next_ordinal_to_read += 1;
7981            if next_offset >= end_offset {
7982                return Ok(());
7983            }
7984
7985            // Decode unknown envelopes for gaps in ordinals.
7986            while _next_ordinal_to_read < 4 {
7987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7988                _next_ordinal_to_read += 1;
7989                next_offset += envelope_size;
7990            }
7991
7992            let next_out_of_line = decoder.next_out_of_line();
7993            let handles_before = decoder.remaining_handles();
7994            if let Some((inlined, num_bytes, num_handles)) =
7995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7996            {
7997                let member_inline_size =
7998                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7999                if inlined != (member_inline_size <= 4) {
8000                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8001                }
8002                let inner_offset;
8003                let mut inner_depth = depth.clone();
8004                if inlined {
8005                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8006                    inner_offset = next_offset;
8007                } else {
8008                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8009                    inner_depth.increment()?;
8010                }
8011                let val_ref = self.remove_with_required_element.get_or_insert_with(|| {
8012                    fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
8013                });
8014                fidl::decode!(
8015                    bool,
8016                    fidl::encoding::DefaultFuchsiaResourceDialect,
8017                    val_ref,
8018                    decoder,
8019                    inner_offset,
8020                    inner_depth
8021                )?;
8022                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8023                {
8024                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8025                }
8026                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8027                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8028                }
8029            }
8030
8031            next_offset += envelope_size;
8032
8033            // Decode the remaining unknown envelopes.
8034            while next_offset < end_offset {
8035                _next_ordinal_to_read += 1;
8036                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8037                next_offset += envelope_size;
8038            }
8039
8040            Ok(())
8041        }
8042    }
8043}