1#![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_test_powerelementrunner_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
15pub struct ControlStartRequest {
16 pub element_name: String,
17 pub initial_current_level: u8,
18 pub required_level_client:
19 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
20 pub current_level_client:
21 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
22}
23
24impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ControlStartRequest {}
25
26#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
27pub struct ControlMarker;
28
29impl fidl::endpoints::ProtocolMarker for ControlMarker {
30 type Proxy = ControlProxy;
31 type RequestStream = ControlRequestStream;
32 #[cfg(target_os = "fuchsia")]
33 type SynchronousProxy = ControlSynchronousProxy;
34
35 const DEBUG_NAME: &'static str = "test.powerelementrunner.Control";
36}
37impl fidl::endpoints::DiscoverableProtocolMarker for ControlMarker {}
38pub type ControlStartResult = Result<(), StartPowerElementError>;
39
40pub trait ControlProxyInterface: Send + Sync {
41 type StartResponseFut: std::future::Future<Output = Result<ControlStartResult, fidl::Error>>
42 + Send;
43 fn r#start(
44 &self,
45 element_name: &str,
46 initial_current_level: u8,
47 required_level_client: fidl::endpoints::ClientEnd<
48 fidl_fuchsia_power_broker::RequiredLevelMarker,
49 >,
50 current_level_client: fidl::endpoints::ClientEnd<
51 fidl_fuchsia_power_broker::CurrentLevelMarker,
52 >,
53 ) -> Self::StartResponseFut;
54}
55#[derive(Debug)]
56#[cfg(target_os = "fuchsia")]
57pub struct ControlSynchronousProxy {
58 client: fidl::client::sync::Client,
59}
60
61#[cfg(target_os = "fuchsia")]
62impl fidl::endpoints::SynchronousProxy for ControlSynchronousProxy {
63 type Proxy = ControlProxy;
64 type Protocol = ControlMarker;
65
66 fn from_channel(inner: fidl::Channel) -> Self {
67 Self::new(inner)
68 }
69
70 fn into_channel(self) -> fidl::Channel {
71 self.client.into_channel()
72 }
73
74 fn as_channel(&self) -> &fidl::Channel {
75 self.client.as_channel()
76 }
77}
78
79#[cfg(target_os = "fuchsia")]
80impl ControlSynchronousProxy {
81 pub fn new(channel: fidl::Channel) -> Self {
82 let protocol_name = <ControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
83 Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
84 }
85
86 pub fn into_channel(self) -> fidl::Channel {
87 self.client.into_channel()
88 }
89
90 pub fn wait_for_event(
93 &self,
94 deadline: zx::MonotonicInstant,
95 ) -> Result<ControlEvent, fidl::Error> {
96 ControlEvent::decode(self.client.wait_for_event(deadline)?)
97 }
98
99 pub fn r#start(
100 &self,
101 mut element_name: &str,
102 mut initial_current_level: u8,
103 mut required_level_client: fidl::endpoints::ClientEnd<
104 fidl_fuchsia_power_broker::RequiredLevelMarker,
105 >,
106 mut current_level_client: fidl::endpoints::ClientEnd<
107 fidl_fuchsia_power_broker::CurrentLevelMarker,
108 >,
109 ___deadline: zx::MonotonicInstant,
110 ) -> Result<ControlStartResult, fidl::Error> {
111 let _response =
112 self.client
113 .send_query::<ControlStartRequest, fidl::encoding::FlexibleResultType<
114 fidl::encoding::EmptyStruct,
115 StartPowerElementError,
116 >>(
117 (
118 element_name,
119 initial_current_level,
120 required_level_client,
121 current_level_client,
122 ),
123 0x3e14e93b8fd19ea6,
124 fidl::encoding::DynamicFlags::FLEXIBLE,
125 ___deadline,
126 )?
127 .into_result::<ControlMarker>("start")?;
128 Ok(_response.map(|x| x))
129 }
130}
131
132#[derive(Debug, Clone)]
133pub struct ControlProxy {
134 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
135}
136
137impl fidl::endpoints::Proxy for ControlProxy {
138 type Protocol = ControlMarker;
139
140 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
141 Self::new(inner)
142 }
143
144 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
145 self.client.into_channel().map_err(|client| Self { client })
146 }
147
148 fn as_channel(&self) -> &::fidl::AsyncChannel {
149 self.client.as_channel()
150 }
151}
152
153impl ControlProxy {
154 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
156 let protocol_name = <ControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
157 Self { client: fidl::client::Client::new(channel, protocol_name) }
158 }
159
160 pub fn take_event_stream(&self) -> ControlEventStream {
166 ControlEventStream { event_receiver: self.client.take_event_receiver() }
167 }
168
169 pub fn r#start(
170 &self,
171 mut element_name: &str,
172 mut initial_current_level: u8,
173 mut required_level_client: fidl::endpoints::ClientEnd<
174 fidl_fuchsia_power_broker::RequiredLevelMarker,
175 >,
176 mut current_level_client: fidl::endpoints::ClientEnd<
177 fidl_fuchsia_power_broker::CurrentLevelMarker,
178 >,
179 ) -> fidl::client::QueryResponseFut<
180 ControlStartResult,
181 fidl::encoding::DefaultFuchsiaResourceDialect,
182 > {
183 ControlProxyInterface::r#start(
184 self,
185 element_name,
186 initial_current_level,
187 required_level_client,
188 current_level_client,
189 )
190 }
191}
192
193impl ControlProxyInterface for ControlProxy {
194 type StartResponseFut = fidl::client::QueryResponseFut<
195 ControlStartResult,
196 fidl::encoding::DefaultFuchsiaResourceDialect,
197 >;
198 fn r#start(
199 &self,
200 mut element_name: &str,
201 mut initial_current_level: u8,
202 mut required_level_client: fidl::endpoints::ClientEnd<
203 fidl_fuchsia_power_broker::RequiredLevelMarker,
204 >,
205 mut current_level_client: fidl::endpoints::ClientEnd<
206 fidl_fuchsia_power_broker::CurrentLevelMarker,
207 >,
208 ) -> Self::StartResponseFut {
209 fn _decode(
210 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
211 ) -> Result<ControlStartResult, fidl::Error> {
212 let _response = fidl::client::decode_transaction_body::<
213 fidl::encoding::FlexibleResultType<
214 fidl::encoding::EmptyStruct,
215 StartPowerElementError,
216 >,
217 fidl::encoding::DefaultFuchsiaResourceDialect,
218 0x3e14e93b8fd19ea6,
219 >(_buf?)?
220 .into_result::<ControlMarker>("start")?;
221 Ok(_response.map(|x| x))
222 }
223 self.client.send_query_and_decode::<ControlStartRequest, ControlStartResult>(
224 (element_name, initial_current_level, required_level_client, current_level_client),
225 0x3e14e93b8fd19ea6,
226 fidl::encoding::DynamicFlags::FLEXIBLE,
227 _decode,
228 )
229 }
230}
231
232pub struct ControlEventStream {
233 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
234}
235
236impl std::marker::Unpin for ControlEventStream {}
237
238impl futures::stream::FusedStream for ControlEventStream {
239 fn is_terminated(&self) -> bool {
240 self.event_receiver.is_terminated()
241 }
242}
243
244impl futures::Stream for ControlEventStream {
245 type Item = Result<ControlEvent, fidl::Error>;
246
247 fn poll_next(
248 mut self: std::pin::Pin<&mut Self>,
249 cx: &mut std::task::Context<'_>,
250 ) -> std::task::Poll<Option<Self::Item>> {
251 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
252 &mut self.event_receiver,
253 cx
254 )?) {
255 Some(buf) => std::task::Poll::Ready(Some(ControlEvent::decode(buf))),
256 None => std::task::Poll::Ready(None),
257 }
258 }
259}
260
261#[derive(Debug)]
262pub enum ControlEvent {
263 #[non_exhaustive]
264 _UnknownEvent {
265 ordinal: u64,
267 },
268}
269
270impl ControlEvent {
271 fn decode(
273 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
274 ) -> Result<ControlEvent, fidl::Error> {
275 let (bytes, _handles) = buf.split_mut();
276 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
277 debug_assert_eq!(tx_header.tx_id, 0);
278 match tx_header.ordinal {
279 _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
280 Ok(ControlEvent::_UnknownEvent { ordinal: tx_header.ordinal })
281 }
282 _ => Err(fidl::Error::UnknownOrdinal {
283 ordinal: tx_header.ordinal,
284 protocol_name: <ControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
285 }),
286 }
287 }
288}
289
290pub struct ControlRequestStream {
292 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
293 is_terminated: bool,
294}
295
296impl std::marker::Unpin for ControlRequestStream {}
297
298impl futures::stream::FusedStream for ControlRequestStream {
299 fn is_terminated(&self) -> bool {
300 self.is_terminated
301 }
302}
303
304impl fidl::endpoints::RequestStream for ControlRequestStream {
305 type Protocol = ControlMarker;
306 type ControlHandle = ControlControlHandle;
307
308 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
309 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
310 }
311
312 fn control_handle(&self) -> Self::ControlHandle {
313 ControlControlHandle { inner: self.inner.clone() }
314 }
315
316 fn into_inner(
317 self,
318 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
319 {
320 (self.inner, self.is_terminated)
321 }
322
323 fn from_inner(
324 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
325 is_terminated: bool,
326 ) -> Self {
327 Self { inner, is_terminated }
328 }
329}
330
331impl futures::Stream for ControlRequestStream {
332 type Item = Result<ControlRequest, fidl::Error>;
333
334 fn poll_next(
335 mut self: std::pin::Pin<&mut Self>,
336 cx: &mut std::task::Context<'_>,
337 ) -> std::task::Poll<Option<Self::Item>> {
338 let this = &mut *self;
339 if this.inner.check_shutdown(cx) {
340 this.is_terminated = true;
341 return std::task::Poll::Ready(None);
342 }
343 if this.is_terminated {
344 panic!("polled ControlRequestStream after completion");
345 }
346 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
347 |bytes, handles| {
348 match this.inner.channel().read_etc(cx, bytes, handles) {
349 std::task::Poll::Ready(Ok(())) => {}
350 std::task::Poll::Pending => return std::task::Poll::Pending,
351 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
352 this.is_terminated = true;
353 return std::task::Poll::Ready(None);
354 }
355 std::task::Poll::Ready(Err(e)) => {
356 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
357 e.into(),
358 ))))
359 }
360 }
361
362 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
364
365 std::task::Poll::Ready(Some(match header.ordinal {
366 0x3e14e93b8fd19ea6 => {
367 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
368 let mut req = fidl::new_empty!(
369 ControlStartRequest,
370 fidl::encoding::DefaultFuchsiaResourceDialect
371 );
372 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ControlStartRequest>(&header, _body_bytes, handles, &mut req)?;
373 let control_handle = ControlControlHandle { inner: this.inner.clone() };
374 Ok(ControlRequest::Start {
375 element_name: req.element_name,
376 initial_current_level: req.initial_current_level,
377 required_level_client: req.required_level_client,
378 current_level_client: req.current_level_client,
379
380 responder: ControlStartResponder {
381 control_handle: std::mem::ManuallyDrop::new(control_handle),
382 tx_id: header.tx_id,
383 },
384 })
385 }
386 _ if header.tx_id == 0
387 && header
388 .dynamic_flags()
389 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
390 {
391 Ok(ControlRequest::_UnknownMethod {
392 ordinal: header.ordinal,
393 control_handle: ControlControlHandle { inner: this.inner.clone() },
394 method_type: fidl::MethodType::OneWay,
395 })
396 }
397 _ if header
398 .dynamic_flags()
399 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
400 {
401 this.inner.send_framework_err(
402 fidl::encoding::FrameworkErr::UnknownMethod,
403 header.tx_id,
404 header.ordinal,
405 header.dynamic_flags(),
406 (bytes, handles),
407 )?;
408 Ok(ControlRequest::_UnknownMethod {
409 ordinal: header.ordinal,
410 control_handle: ControlControlHandle { inner: this.inner.clone() },
411 method_type: fidl::MethodType::TwoWay,
412 })
413 }
414 _ => Err(fidl::Error::UnknownOrdinal {
415 ordinal: header.ordinal,
416 protocol_name:
417 <ControlMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
418 }),
419 }))
420 },
421 )
422 }
423}
424
425#[derive(Debug)]
426pub enum ControlRequest {
427 Start {
428 element_name: String,
429 initial_current_level: u8,
430 required_level_client:
431 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
432 current_level_client:
433 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
434 responder: ControlStartResponder,
435 },
436 #[non_exhaustive]
438 _UnknownMethod {
439 ordinal: u64,
441 control_handle: ControlControlHandle,
442 method_type: fidl::MethodType,
443 },
444}
445
446impl ControlRequest {
447 #[allow(irrefutable_let_patterns)]
448 pub fn into_start(
449 self,
450 ) -> Option<(
451 String,
452 u8,
453 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
454 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
455 ControlStartResponder,
456 )> {
457 if let ControlRequest::Start {
458 element_name,
459 initial_current_level,
460 required_level_client,
461 current_level_client,
462 responder,
463 } = self
464 {
465 Some((
466 element_name,
467 initial_current_level,
468 required_level_client,
469 current_level_client,
470 responder,
471 ))
472 } else {
473 None
474 }
475 }
476
477 pub fn method_name(&self) -> &'static str {
479 match *self {
480 ControlRequest::Start { .. } => "start",
481 ControlRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
482 "unknown one-way method"
483 }
484 ControlRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
485 "unknown two-way method"
486 }
487 }
488 }
489}
490
491#[derive(Debug, Clone)]
492pub struct ControlControlHandle {
493 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
494}
495
496impl fidl::endpoints::ControlHandle for ControlControlHandle {
497 fn shutdown(&self) {
498 self.inner.shutdown()
499 }
500 fn shutdown_with_epitaph(&self, status: zx_status::Status) {
501 self.inner.shutdown_with_epitaph(status)
502 }
503
504 fn is_closed(&self) -> bool {
505 self.inner.channel().is_closed()
506 }
507 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
508 self.inner.channel().on_closed()
509 }
510
511 #[cfg(target_os = "fuchsia")]
512 fn signal_peer(
513 &self,
514 clear_mask: zx::Signals,
515 set_mask: zx::Signals,
516 ) -> Result<(), zx_status::Status> {
517 use fidl::Peered;
518 self.inner.channel().signal_peer(clear_mask, set_mask)
519 }
520}
521
522impl ControlControlHandle {}
523
524#[must_use = "FIDL methods require a response to be sent"]
525#[derive(Debug)]
526pub struct ControlStartResponder {
527 control_handle: std::mem::ManuallyDrop<ControlControlHandle>,
528 tx_id: u32,
529}
530
531impl std::ops::Drop for ControlStartResponder {
535 fn drop(&mut self) {
536 self.control_handle.shutdown();
537 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
539 }
540}
541
542impl fidl::endpoints::Responder for ControlStartResponder {
543 type ControlHandle = ControlControlHandle;
544
545 fn control_handle(&self) -> &ControlControlHandle {
546 &self.control_handle
547 }
548
549 fn drop_without_shutdown(mut self) {
550 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
552 std::mem::forget(self);
554 }
555}
556
557impl ControlStartResponder {
558 pub fn send(self, mut result: Result<(), StartPowerElementError>) -> Result<(), fidl::Error> {
562 let _result = self.send_raw(result);
563 if _result.is_err() {
564 self.control_handle.shutdown();
565 }
566 self.drop_without_shutdown();
567 _result
568 }
569
570 pub fn send_no_shutdown_on_err(
572 self,
573 mut result: Result<(), StartPowerElementError>,
574 ) -> Result<(), fidl::Error> {
575 let _result = self.send_raw(result);
576 self.drop_without_shutdown();
577 _result
578 }
579
580 fn send_raw(&self, mut result: Result<(), StartPowerElementError>) -> Result<(), fidl::Error> {
581 self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
582 fidl::encoding::EmptyStruct,
583 StartPowerElementError,
584 >>(
585 fidl::encoding::FlexibleResult::new(result),
586 self.tx_id,
587 0x3e14e93b8fd19ea6,
588 fidl::encoding::DynamicFlags::FLEXIBLE,
589 )
590 }
591}
592
593mod internal {
594 use super::*;
595
596 impl fidl::encoding::ResourceTypeMarker for ControlStartRequest {
597 type Borrowed<'a> = &'a mut Self;
598 fn take_or_borrow<'a>(
599 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
600 ) -> Self::Borrowed<'a> {
601 value
602 }
603 }
604
605 unsafe impl fidl::encoding::TypeMarker for ControlStartRequest {
606 type Owned = Self;
607
608 #[inline(always)]
609 fn inline_align(_context: fidl::encoding::Context) -> usize {
610 8
611 }
612
613 #[inline(always)]
614 fn inline_size(_context: fidl::encoding::Context) -> usize {
615 32
616 }
617 }
618
619 unsafe impl
620 fidl::encoding::Encode<ControlStartRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
621 for &mut ControlStartRequest
622 {
623 #[inline]
624 unsafe fn encode(
625 self,
626 encoder: &mut fidl::encoding::Encoder<
627 '_,
628 fidl::encoding::DefaultFuchsiaResourceDialect,
629 >,
630 offset: usize,
631 _depth: fidl::encoding::Depth,
632 ) -> fidl::Result<()> {
633 encoder.debug_check_bounds::<ControlStartRequest>(offset);
634 fidl::encoding::Encode::<
636 ControlStartRequest,
637 fidl::encoding::DefaultFuchsiaResourceDialect,
638 >::encode(
639 (
640 <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow(
641 &self.element_name,
642 ),
643 <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.initial_current_level),
644 <fidl::encoding::Endpoint<
645 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
646 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
647 &mut self.required_level_client,
648 ),
649 <fidl::encoding::Endpoint<
650 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
651 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
652 &mut self.current_level_client,
653 ),
654 ),
655 encoder,
656 offset,
657 _depth,
658 )
659 }
660 }
661 unsafe impl<
662 T0: fidl::encoding::Encode<
663 fidl::encoding::BoundedString<64>,
664 fidl::encoding::DefaultFuchsiaResourceDialect,
665 >,
666 T1: fidl::encoding::Encode<u8, fidl::encoding::DefaultFuchsiaResourceDialect>,
667 T2: fidl::encoding::Encode<
668 fidl::encoding::Endpoint<
669 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
670 >,
671 fidl::encoding::DefaultFuchsiaResourceDialect,
672 >,
673 T3: fidl::encoding::Encode<
674 fidl::encoding::Endpoint<
675 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
676 >,
677 fidl::encoding::DefaultFuchsiaResourceDialect,
678 >,
679 >
680 fidl::encoding::Encode<ControlStartRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
681 for (T0, T1, T2, T3)
682 {
683 #[inline]
684 unsafe fn encode(
685 self,
686 encoder: &mut fidl::encoding::Encoder<
687 '_,
688 fidl::encoding::DefaultFuchsiaResourceDialect,
689 >,
690 offset: usize,
691 depth: fidl::encoding::Depth,
692 ) -> fidl::Result<()> {
693 encoder.debug_check_bounds::<ControlStartRequest>(offset);
694 unsafe {
697 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
698 (ptr as *mut u64).write_unaligned(0);
699 }
700 unsafe {
701 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(24);
702 (ptr as *mut u64).write_unaligned(0);
703 }
704 self.0.encode(encoder, offset + 0, depth)?;
706 self.1.encode(encoder, offset + 16, depth)?;
707 self.2.encode(encoder, offset + 20, depth)?;
708 self.3.encode(encoder, offset + 24, depth)?;
709 Ok(())
710 }
711 }
712
713 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
714 for ControlStartRequest
715 {
716 #[inline(always)]
717 fn new_empty() -> Self {
718 Self {
719 element_name: fidl::new_empty!(
720 fidl::encoding::BoundedString<64>,
721 fidl::encoding::DefaultFuchsiaResourceDialect
722 ),
723 initial_current_level: fidl::new_empty!(
724 u8,
725 fidl::encoding::DefaultFuchsiaResourceDialect
726 ),
727 required_level_client: fidl::new_empty!(
728 fidl::encoding::Endpoint<
729 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
730 >,
731 fidl::encoding::DefaultFuchsiaResourceDialect
732 ),
733 current_level_client: fidl::new_empty!(
734 fidl::encoding::Endpoint<
735 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
736 >,
737 fidl::encoding::DefaultFuchsiaResourceDialect
738 ),
739 }
740 }
741
742 #[inline]
743 unsafe fn decode(
744 &mut self,
745 decoder: &mut fidl::encoding::Decoder<
746 '_,
747 fidl::encoding::DefaultFuchsiaResourceDialect,
748 >,
749 offset: usize,
750 _depth: fidl::encoding::Depth,
751 ) -> fidl::Result<()> {
752 decoder.debug_check_bounds::<Self>(offset);
753 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
755 let padval = unsafe { (ptr as *const u64).read_unaligned() };
756 let mask = 0xffffff00u64;
757 let maskedval = padval & mask;
758 if maskedval != 0 {
759 return Err(fidl::Error::NonZeroPadding {
760 padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
761 });
762 }
763 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(24) };
764 let padval = unsafe { (ptr as *const u64).read_unaligned() };
765 let mask = 0xffffffff00000000u64;
766 let maskedval = padval & mask;
767 if maskedval != 0 {
768 return Err(fidl::Error::NonZeroPadding {
769 padding_start: offset + 24 + ((mask as u64).trailing_zeros() / 8) as usize,
770 });
771 }
772 fidl::decode!(
773 fidl::encoding::BoundedString<64>,
774 fidl::encoding::DefaultFuchsiaResourceDialect,
775 &mut self.element_name,
776 decoder,
777 offset + 0,
778 _depth
779 )?;
780 fidl::decode!(
781 u8,
782 fidl::encoding::DefaultFuchsiaResourceDialect,
783 &mut self.initial_current_level,
784 decoder,
785 offset + 16,
786 _depth
787 )?;
788 fidl::decode!(
789 fidl::encoding::Endpoint<
790 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::RequiredLevelMarker>,
791 >,
792 fidl::encoding::DefaultFuchsiaResourceDialect,
793 &mut self.required_level_client,
794 decoder,
795 offset + 20,
796 _depth
797 )?;
798 fidl::decode!(
799 fidl::encoding::Endpoint<
800 fidl::endpoints::ClientEnd<fidl_fuchsia_power_broker::CurrentLevelMarker>,
801 >,
802 fidl::encoding::DefaultFuchsiaResourceDialect,
803 &mut self.current_level_client,
804 decoder,
805 offset + 24,
806 _depth
807 )?;
808 Ok(())
809 }
810 }
811}