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