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_fuchsia_net_power_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct CreateWakeGroupRequest {
16 pub options: WakeGroupOptions,
17 pub wake_watcher: fidl::EventPair,
28}
29
30impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for CreateWakeGroupRequest {}
31
32#[derive(Debug, Default, PartialEq)]
33pub struct CreateWakeGroupResponse {
34 pub token: Option<fidl_fuchsia_net_resources::WakeGroupToken>,
45 #[doc(hidden)]
46 pub __source_breaking: fidl::marker::SourceBreaking,
47}
48
49impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for CreateWakeGroupResponse {}
50
51#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
52pub struct WakeGroupProviderMarker;
53
54impl fidl::endpoints::ProtocolMarker for WakeGroupProviderMarker {
55 type Proxy = WakeGroupProviderProxy;
56 type RequestStream = WakeGroupProviderRequestStream;
57 #[cfg(target_os = "fuchsia")]
58 type SynchronousProxy = WakeGroupProviderSynchronousProxy;
59
60 const DEBUG_NAME: &'static str = "fuchsia.net.power.WakeGroupProvider";
61}
62impl fidl::endpoints::DiscoverableProtocolMarker for WakeGroupProviderMarker {}
63
64pub trait WakeGroupProviderProxyInterface: Send + Sync {
65 type CreateWakeGroupResponseFut: std::future::Future<Output = Result<CreateWakeGroupResponse, fidl::Error>>
66 + Send;
67 fn r#create_wake_group(
68 &self,
69 options: &WakeGroupOptions,
70 wake_watcher: fidl::EventPair,
71 ) -> Self::CreateWakeGroupResponseFut;
72}
73#[derive(Debug)]
74#[cfg(target_os = "fuchsia")]
75pub struct WakeGroupProviderSynchronousProxy {
76 client: fidl::client::sync::Client,
77}
78
79#[cfg(target_os = "fuchsia")]
80impl fidl::endpoints::SynchronousProxy for WakeGroupProviderSynchronousProxy {
81 type Proxy = WakeGroupProviderProxy;
82 type Protocol = WakeGroupProviderMarker;
83
84 fn from_channel(inner: fidl::Channel) -> Self {
85 Self::new(inner)
86 }
87
88 fn into_channel(self) -> fidl::Channel {
89 self.client.into_channel()
90 }
91
92 fn as_channel(&self) -> &fidl::Channel {
93 self.client.as_channel()
94 }
95}
96
97#[cfg(target_os = "fuchsia")]
98impl WakeGroupProviderSynchronousProxy {
99 pub fn new(channel: fidl::Channel) -> Self {
100 Self { client: fidl::client::sync::Client::new(channel) }
101 }
102
103 pub fn into_channel(self) -> fidl::Channel {
104 self.client.into_channel()
105 }
106
107 pub fn wait_for_event(
110 &self,
111 deadline: zx::MonotonicInstant,
112 ) -> Result<WakeGroupProviderEvent, fidl::Error> {
113 WakeGroupProviderEvent::decode(
114 self.client.wait_for_event::<WakeGroupProviderMarker>(deadline)?,
115 )
116 }
117
118 pub fn r#create_wake_group(
120 &self,
121 mut options: &WakeGroupOptions,
122 mut wake_watcher: fidl::EventPair,
123 ___deadline: zx::MonotonicInstant,
124 ) -> Result<CreateWakeGroupResponse, fidl::Error> {
125 let _response = self
126 .client
127 .send_query::<CreateWakeGroupRequest, CreateWakeGroupResponse, WakeGroupProviderMarker>(
128 (options, wake_watcher),
129 0x3c6a15f6c6b1447f,
130 fidl::encoding::DynamicFlags::empty(),
131 ___deadline,
132 )?;
133 Ok(_response)
134 }
135}
136
137#[cfg(target_os = "fuchsia")]
138impl From<WakeGroupProviderSynchronousProxy> for zx::NullableHandle {
139 fn from(value: WakeGroupProviderSynchronousProxy) -> Self {
140 value.into_channel().into()
141 }
142}
143
144#[cfg(target_os = "fuchsia")]
145impl From<fidl::Channel> for WakeGroupProviderSynchronousProxy {
146 fn from(value: fidl::Channel) -> Self {
147 Self::new(value)
148 }
149}
150
151#[cfg(target_os = "fuchsia")]
152impl fidl::endpoints::FromClient for WakeGroupProviderSynchronousProxy {
153 type Protocol = WakeGroupProviderMarker;
154
155 fn from_client(value: fidl::endpoints::ClientEnd<WakeGroupProviderMarker>) -> Self {
156 Self::new(value.into_channel())
157 }
158}
159
160#[derive(Debug, Clone)]
161pub struct WakeGroupProviderProxy {
162 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
163}
164
165impl fidl::endpoints::Proxy for WakeGroupProviderProxy {
166 type Protocol = WakeGroupProviderMarker;
167
168 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
169 Self::new(inner)
170 }
171
172 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
173 self.client.into_channel().map_err(|client| Self { client })
174 }
175
176 fn as_channel(&self) -> &::fidl::AsyncChannel {
177 self.client.as_channel()
178 }
179}
180
181impl WakeGroupProviderProxy {
182 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
184 let protocol_name =
185 <WakeGroupProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
186 Self { client: fidl::client::Client::new(channel, protocol_name) }
187 }
188
189 pub fn take_event_stream(&self) -> WakeGroupProviderEventStream {
195 WakeGroupProviderEventStream { event_receiver: self.client.take_event_receiver() }
196 }
197
198 pub fn r#create_wake_group(
200 &self,
201 mut options: &WakeGroupOptions,
202 mut wake_watcher: fidl::EventPair,
203 ) -> fidl::client::QueryResponseFut<
204 CreateWakeGroupResponse,
205 fidl::encoding::DefaultFuchsiaResourceDialect,
206 > {
207 WakeGroupProviderProxyInterface::r#create_wake_group(self, options, wake_watcher)
208 }
209}
210
211impl WakeGroupProviderProxyInterface for WakeGroupProviderProxy {
212 type CreateWakeGroupResponseFut = fidl::client::QueryResponseFut<
213 CreateWakeGroupResponse,
214 fidl::encoding::DefaultFuchsiaResourceDialect,
215 >;
216 fn r#create_wake_group(
217 &self,
218 mut options: &WakeGroupOptions,
219 mut wake_watcher: fidl::EventPair,
220 ) -> Self::CreateWakeGroupResponseFut {
221 fn _decode(
222 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
223 ) -> Result<CreateWakeGroupResponse, fidl::Error> {
224 let _response = fidl::client::decode_transaction_body::<
225 CreateWakeGroupResponse,
226 fidl::encoding::DefaultFuchsiaResourceDialect,
227 0x3c6a15f6c6b1447f,
228 >(_buf?)?;
229 Ok(_response)
230 }
231 self.client.send_query_and_decode::<CreateWakeGroupRequest, CreateWakeGroupResponse>(
232 (options, wake_watcher),
233 0x3c6a15f6c6b1447f,
234 fidl::encoding::DynamicFlags::empty(),
235 _decode,
236 )
237 }
238}
239
240pub struct WakeGroupProviderEventStream {
241 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
242}
243
244impl std::marker::Unpin for WakeGroupProviderEventStream {}
245
246impl futures::stream::FusedStream for WakeGroupProviderEventStream {
247 fn is_terminated(&self) -> bool {
248 self.event_receiver.is_terminated()
249 }
250}
251
252impl futures::Stream for WakeGroupProviderEventStream {
253 type Item = Result<WakeGroupProviderEvent, fidl::Error>;
254
255 fn poll_next(
256 mut self: std::pin::Pin<&mut Self>,
257 cx: &mut std::task::Context<'_>,
258 ) -> std::task::Poll<Option<Self::Item>> {
259 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
260 &mut self.event_receiver,
261 cx
262 )?) {
263 Some(buf) => std::task::Poll::Ready(Some(WakeGroupProviderEvent::decode(buf))),
264 None => std::task::Poll::Ready(None),
265 }
266 }
267}
268
269#[derive(Debug)]
270pub enum WakeGroupProviderEvent {}
271
272impl WakeGroupProviderEvent {
273 fn decode(
275 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
276 ) -> Result<WakeGroupProviderEvent, fidl::Error> {
277 let (bytes, _handles) = buf.split_mut();
278 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
279 debug_assert_eq!(tx_header.tx_id, 0);
280 match tx_header.ordinal {
281 _ => Err(fidl::Error::UnknownOrdinal {
282 ordinal: tx_header.ordinal,
283 protocol_name:
284 <WakeGroupProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
285 }),
286 }
287 }
288}
289
290pub struct WakeGroupProviderRequestStream {
292 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
293 is_terminated: bool,
294}
295
296impl std::marker::Unpin for WakeGroupProviderRequestStream {}
297
298impl futures::stream::FusedStream for WakeGroupProviderRequestStream {
299 fn is_terminated(&self) -> bool {
300 self.is_terminated
301 }
302}
303
304impl fidl::endpoints::RequestStream for WakeGroupProviderRequestStream {
305 type Protocol = WakeGroupProviderMarker;
306 type ControlHandle = WakeGroupProviderControlHandle;
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 WakeGroupProviderControlHandle { 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 WakeGroupProviderRequestStream {
332 type Item = Result<WakeGroupProviderRequest, 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 WakeGroupProviderRequestStream 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 0x3c6a15f6c6b1447f => {
367 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
368 let mut req = fidl::new_empty!(
369 CreateWakeGroupRequest,
370 fidl::encoding::DefaultFuchsiaResourceDialect
371 );
372 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<CreateWakeGroupRequest>(&header, _body_bytes, handles, &mut req)?;
373 let control_handle =
374 WakeGroupProviderControlHandle { inner: this.inner.clone() };
375 Ok(WakeGroupProviderRequest::CreateWakeGroup {
376 options: req.options,
377 wake_watcher: req.wake_watcher,
378
379 responder: WakeGroupProviderCreateWakeGroupResponder {
380 control_handle: std::mem::ManuallyDrop::new(control_handle),
381 tx_id: header.tx_id,
382 },
383 })
384 }
385 _ => Err(fidl::Error::UnknownOrdinal {
386 ordinal: header.ordinal,
387 protocol_name:
388 <WakeGroupProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
389 }),
390 }))
391 },
392 )
393 }
394}
395
396#[derive(Debug)]
405pub enum WakeGroupProviderRequest {
406 CreateWakeGroup {
408 options: WakeGroupOptions,
409 wake_watcher: fidl::EventPair,
410 responder: WakeGroupProviderCreateWakeGroupResponder,
411 },
412}
413
414impl WakeGroupProviderRequest {
415 #[allow(irrefutable_let_patterns)]
416 pub fn into_create_wake_group(
417 self,
418 ) -> Option<(WakeGroupOptions, fidl::EventPair, WakeGroupProviderCreateWakeGroupResponder)>
419 {
420 if let WakeGroupProviderRequest::CreateWakeGroup { options, wake_watcher, responder } = self
421 {
422 Some((options, wake_watcher, responder))
423 } else {
424 None
425 }
426 }
427
428 pub fn method_name(&self) -> &'static str {
430 match *self {
431 WakeGroupProviderRequest::CreateWakeGroup { .. } => "create_wake_group",
432 }
433 }
434}
435
436#[derive(Debug, Clone)]
437pub struct WakeGroupProviderControlHandle {
438 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
439}
440
441impl WakeGroupProviderControlHandle {
442 pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
443 self.inner.shutdown_with_epitaph(status.into())
444 }
445}
446
447impl fidl::endpoints::ControlHandle for WakeGroupProviderControlHandle {
448 fn shutdown(&self) {
449 self.inner.shutdown()
450 }
451
452 fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
453 self.inner.shutdown_with_epitaph(status)
454 }
455
456 fn is_closed(&self) -> bool {
457 self.inner.channel().is_closed()
458 }
459 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
460 self.inner.channel().on_closed()
461 }
462
463 #[cfg(target_os = "fuchsia")]
464 fn signal_peer(
465 &self,
466 clear_mask: zx::Signals,
467 set_mask: zx::Signals,
468 ) -> Result<(), zx_status::Status> {
469 use fidl::Peered;
470 self.inner.channel().signal_peer(clear_mask, set_mask)
471 }
472}
473
474impl WakeGroupProviderControlHandle {}
475
476#[must_use = "FIDL methods require a response to be sent"]
477#[derive(Debug)]
478pub struct WakeGroupProviderCreateWakeGroupResponder {
479 control_handle: std::mem::ManuallyDrop<WakeGroupProviderControlHandle>,
480 tx_id: u32,
481}
482
483impl std::ops::Drop for WakeGroupProviderCreateWakeGroupResponder {
487 fn drop(&mut self) {
488 self.control_handle.shutdown();
489 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
491 }
492}
493
494impl fidl::endpoints::Responder for WakeGroupProviderCreateWakeGroupResponder {
495 type ControlHandle = WakeGroupProviderControlHandle;
496
497 fn control_handle(&self) -> &WakeGroupProviderControlHandle {
498 &self.control_handle
499 }
500
501 fn drop_without_shutdown(mut self) {
502 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
504 std::mem::forget(self);
506 }
507}
508
509impl WakeGroupProviderCreateWakeGroupResponder {
510 pub fn send(self, mut payload: CreateWakeGroupResponse) -> Result<(), fidl::Error> {
514 let _result = self.send_raw(payload);
515 if _result.is_err() {
516 self.control_handle.shutdown();
517 }
518 self.drop_without_shutdown();
519 _result
520 }
521
522 pub fn send_no_shutdown_on_err(
524 self,
525 mut payload: CreateWakeGroupResponse,
526 ) -> Result<(), fidl::Error> {
527 let _result = self.send_raw(payload);
528 self.drop_without_shutdown();
529 _result
530 }
531
532 fn send_raw(&self, mut payload: CreateWakeGroupResponse) -> Result<(), fidl::Error> {
533 self.control_handle.inner.send::<CreateWakeGroupResponse>(
534 &mut payload,
535 self.tx_id,
536 0x3c6a15f6c6b1447f,
537 fidl::encoding::DynamicFlags::empty(),
538 )
539 }
540}
541
542mod internal {
543 use super::*;
544
545 impl fidl::encoding::ResourceTypeMarker for CreateWakeGroupRequest {
546 type Borrowed<'a> = &'a mut Self;
547 fn take_or_borrow<'a>(
548 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
549 ) -> Self::Borrowed<'a> {
550 value
551 }
552 }
553
554 unsafe impl fidl::encoding::TypeMarker for CreateWakeGroupRequest {
555 type Owned = Self;
556
557 #[inline(always)]
558 fn inline_align(_context: fidl::encoding::Context) -> usize {
559 8
560 }
561
562 #[inline(always)]
563 fn inline_size(_context: fidl::encoding::Context) -> usize {
564 24
565 }
566 }
567
568 unsafe impl
569 fidl::encoding::Encode<
570 CreateWakeGroupRequest,
571 fidl::encoding::DefaultFuchsiaResourceDialect,
572 > for &mut CreateWakeGroupRequest
573 {
574 #[inline]
575 unsafe fn encode(
576 self,
577 encoder: &mut fidl::encoding::Encoder<
578 '_,
579 fidl::encoding::DefaultFuchsiaResourceDialect,
580 >,
581 offset: usize,
582 _depth: fidl::encoding::Depth,
583 ) -> fidl::Result<()> {
584 encoder.debug_check_bounds::<CreateWakeGroupRequest>(offset);
585 fidl::encoding::Encode::<
587 CreateWakeGroupRequest,
588 fidl::encoding::DefaultFuchsiaResourceDialect,
589 >::encode(
590 (
591 <WakeGroupOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),
592 <fidl::encoding::HandleType<
593 fidl::EventPair,
594 { fidl::ObjectType::EVENTPAIR.into_raw() },
595 16386,
596 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
597 &mut self.wake_watcher,
598 ),
599 ),
600 encoder,
601 offset,
602 _depth,
603 )
604 }
605 }
606 unsafe impl<
607 T0: fidl::encoding::Encode<WakeGroupOptions, fidl::encoding::DefaultFuchsiaResourceDialect>,
608 T1: fidl::encoding::Encode<
609 fidl::encoding::HandleType<
610 fidl::EventPair,
611 { fidl::ObjectType::EVENTPAIR.into_raw() },
612 16386,
613 >,
614 fidl::encoding::DefaultFuchsiaResourceDialect,
615 >,
616 >
617 fidl::encoding::Encode<
618 CreateWakeGroupRequest,
619 fidl::encoding::DefaultFuchsiaResourceDialect,
620 > for (T0, T1)
621 {
622 #[inline]
623 unsafe fn encode(
624 self,
625 encoder: &mut fidl::encoding::Encoder<
626 '_,
627 fidl::encoding::DefaultFuchsiaResourceDialect,
628 >,
629 offset: usize,
630 depth: fidl::encoding::Depth,
631 ) -> fidl::Result<()> {
632 encoder.debug_check_bounds::<CreateWakeGroupRequest>(offset);
633 unsafe {
636 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
637 (ptr as *mut u64).write_unaligned(0);
638 }
639 self.0.encode(encoder, offset + 0, depth)?;
641 self.1.encode(encoder, offset + 16, depth)?;
642 Ok(())
643 }
644 }
645
646 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
647 for CreateWakeGroupRequest
648 {
649 #[inline(always)]
650 fn new_empty() -> Self {
651 Self {
652 options: fidl::new_empty!(
653 WakeGroupOptions,
654 fidl::encoding::DefaultFuchsiaResourceDialect
655 ),
656 wake_watcher: fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 16386>, fidl::encoding::DefaultFuchsiaResourceDialect),
657 }
658 }
659
660 #[inline]
661 unsafe fn decode(
662 &mut self,
663 decoder: &mut fidl::encoding::Decoder<
664 '_,
665 fidl::encoding::DefaultFuchsiaResourceDialect,
666 >,
667 offset: usize,
668 _depth: fidl::encoding::Depth,
669 ) -> fidl::Result<()> {
670 decoder.debug_check_bounds::<Self>(offset);
671 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
673 let padval = unsafe { (ptr as *const u64).read_unaligned() };
674 let mask = 0xffffffff00000000u64;
675 let maskedval = padval & mask;
676 if maskedval != 0 {
677 return Err(fidl::Error::NonZeroPadding {
678 padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
679 });
680 }
681 fidl::decode!(
682 WakeGroupOptions,
683 fidl::encoding::DefaultFuchsiaResourceDialect,
684 &mut self.options,
685 decoder,
686 offset + 0,
687 _depth
688 )?;
689 fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 16386>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.wake_watcher, decoder, offset + 16, _depth)?;
690 Ok(())
691 }
692 }
693
694 impl CreateWakeGroupResponse {
695 #[inline(always)]
696 fn max_ordinal_present(&self) -> u64 {
697 if let Some(_) = self.token {
698 return 1;
699 }
700 0
701 }
702 }
703
704 impl fidl::encoding::ResourceTypeMarker for CreateWakeGroupResponse {
705 type Borrowed<'a> = &'a mut Self;
706 fn take_or_borrow<'a>(
707 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
708 ) -> Self::Borrowed<'a> {
709 value
710 }
711 }
712
713 unsafe impl fidl::encoding::TypeMarker for CreateWakeGroupResponse {
714 type Owned = Self;
715
716 #[inline(always)]
717 fn inline_align(_context: fidl::encoding::Context) -> usize {
718 8
719 }
720
721 #[inline(always)]
722 fn inline_size(_context: fidl::encoding::Context) -> usize {
723 16
724 }
725 }
726
727 unsafe impl
728 fidl::encoding::Encode<
729 CreateWakeGroupResponse,
730 fidl::encoding::DefaultFuchsiaResourceDialect,
731 > for &mut CreateWakeGroupResponse
732 {
733 unsafe fn encode(
734 self,
735 encoder: &mut fidl::encoding::Encoder<
736 '_,
737 fidl::encoding::DefaultFuchsiaResourceDialect,
738 >,
739 offset: usize,
740 mut depth: fidl::encoding::Depth,
741 ) -> fidl::Result<()> {
742 encoder.debug_check_bounds::<CreateWakeGroupResponse>(offset);
743 let max_ordinal: u64 = self.max_ordinal_present();
745 encoder.write_num(max_ordinal, offset);
746 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
747 if max_ordinal == 0 {
749 return Ok(());
750 }
751 depth.increment()?;
752 let envelope_size = 8;
753 let bytes_len = max_ordinal as usize * envelope_size;
754 #[allow(unused_variables)]
755 let offset = encoder.out_of_line_offset(bytes_len);
756 let mut _prev_end_offset: usize = 0;
757 if 1 > max_ordinal {
758 return Ok(());
759 }
760
761 let cur_offset: usize = (1 - 1) * envelope_size;
764
765 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
767
768 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_resources::WakeGroupToken, fidl::encoding::DefaultFuchsiaResourceDialect>(
773 self.token.as_mut().map(<fidl_fuchsia_net_resources::WakeGroupToken as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
774 encoder, offset + cur_offset, depth
775 )?;
776
777 _prev_end_offset = cur_offset + envelope_size;
778
779 Ok(())
780 }
781 }
782
783 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
784 for CreateWakeGroupResponse
785 {
786 #[inline(always)]
787 fn new_empty() -> Self {
788 Self::default()
789 }
790
791 unsafe fn decode(
792 &mut self,
793 decoder: &mut fidl::encoding::Decoder<
794 '_,
795 fidl::encoding::DefaultFuchsiaResourceDialect,
796 >,
797 offset: usize,
798 mut depth: fidl::encoding::Depth,
799 ) -> fidl::Result<()> {
800 decoder.debug_check_bounds::<Self>(offset);
801 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
802 None => return Err(fidl::Error::NotNullable),
803 Some(len) => len,
804 };
805 if len == 0 {
807 return Ok(());
808 };
809 depth.increment()?;
810 let envelope_size = 8;
811 let bytes_len = len * envelope_size;
812 let offset = decoder.out_of_line_offset(bytes_len)?;
813 let mut _next_ordinal_to_read = 0;
815 let mut next_offset = offset;
816 let end_offset = offset + bytes_len;
817 _next_ordinal_to_read += 1;
818 if next_offset >= end_offset {
819 return Ok(());
820 }
821
822 while _next_ordinal_to_read < 1 {
824 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
825 _next_ordinal_to_read += 1;
826 next_offset += envelope_size;
827 }
828
829 let next_out_of_line = decoder.next_out_of_line();
830 let handles_before = decoder.remaining_handles();
831 if let Some((inlined, num_bytes, num_handles)) =
832 fidl::encoding::decode_envelope_header(decoder, next_offset)?
833 {
834 let member_inline_size = <fidl_fuchsia_net_resources::WakeGroupToken as fidl::encoding::TypeMarker>::inline_size(decoder.context);
835 if inlined != (member_inline_size <= 4) {
836 return Err(fidl::Error::InvalidInlineBitInEnvelope);
837 }
838 let inner_offset;
839 let mut inner_depth = depth.clone();
840 if inlined {
841 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
842 inner_offset = next_offset;
843 } else {
844 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
845 inner_depth.increment()?;
846 }
847 let val_ref = self.token.get_or_insert_with(|| {
848 fidl::new_empty!(
849 fidl_fuchsia_net_resources::WakeGroupToken,
850 fidl::encoding::DefaultFuchsiaResourceDialect
851 )
852 });
853 fidl::decode!(
854 fidl_fuchsia_net_resources::WakeGroupToken,
855 fidl::encoding::DefaultFuchsiaResourceDialect,
856 val_ref,
857 decoder,
858 inner_offset,
859 inner_depth
860 )?;
861 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
862 {
863 return Err(fidl::Error::InvalidNumBytesInEnvelope);
864 }
865 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
866 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
867 }
868 }
869
870 next_offset += envelope_size;
871
872 while next_offset < end_offset {
874 _next_ordinal_to_read += 1;
875 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
876 next_offset += envelope_size;
877 }
878
879 Ok(())
880 }
881 }
882}