Skip to main content

fidl_fuchsia_power_broker/
fidl_fuchsia_power_broker.rs

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