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_bluetooth_snoop_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Default, PartialEq)]
15pub struct SnoopStartRequest {
16 pub follow: Option<bool>,
17 pub host_device: Option<String>,
18 pub client: Option<fidl::endpoints::ClientEnd<PacketObserverMarker>>,
19 #[doc(hidden)]
20 pub __source_breaking: fidl::marker::SourceBreaking,
21}
22
23impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for SnoopStartRequest {}
24
25#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
26pub struct PacketObserverMarker;
27
28impl fidl::endpoints::ProtocolMarker for PacketObserverMarker {
29 type Proxy = PacketObserverProxy;
30 type RequestStream = PacketObserverRequestStream;
31 #[cfg(target_os = "fuchsia")]
32 type SynchronousProxy = PacketObserverSynchronousProxy;
33
34 const DEBUG_NAME: &'static str = "(anonymous) PacketObserver";
35}
36
37pub trait PacketObserverProxyInterface: Send + Sync {
38 type ObserveResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
39 fn r#observe(&self, payload: &DevicePackets) -> Self::ObserveResponseFut;
40 fn r#error(&self, payload: &CaptureError) -> Result<(), fidl::Error>;
41}
42#[derive(Debug)]
43#[cfg(target_os = "fuchsia")]
44pub struct PacketObserverSynchronousProxy {
45 client: fidl::client::sync::Client,
46}
47
48#[cfg(target_os = "fuchsia")]
49impl fidl::endpoints::SynchronousProxy for PacketObserverSynchronousProxy {
50 type Proxy = PacketObserverProxy;
51 type Protocol = PacketObserverMarker;
52
53 fn from_channel(inner: fidl::Channel) -> Self {
54 Self::new(inner)
55 }
56
57 fn into_channel(self) -> fidl::Channel {
58 self.client.into_channel()
59 }
60
61 fn as_channel(&self) -> &fidl::Channel {
62 self.client.as_channel()
63 }
64}
65
66#[cfg(target_os = "fuchsia")]
67impl PacketObserverSynchronousProxy {
68 pub fn new(channel: fidl::Channel) -> Self {
69 Self { client: fidl::client::sync::Client::new(channel) }
70 }
71
72 pub fn into_channel(self) -> fidl::Channel {
73 self.client.into_channel()
74 }
75
76 pub fn wait_for_event(
79 &self,
80 deadline: zx::MonotonicInstant,
81 ) -> Result<PacketObserverEvent, fidl::Error> {
82 PacketObserverEvent::decode(self.client.wait_for_event::<PacketObserverMarker>(deadline)?)
83 }
84
85 pub fn r#observe(
88 &self,
89 mut payload: &DevicePackets,
90 ___deadline: zx::MonotonicInstant,
91 ) -> Result<(), fidl::Error> {
92 let _response = self.client.send_query::<
93 DevicePackets,
94 fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
95 PacketObserverMarker,
96 >(
97 payload,
98 0x2a82a5a9a18b79c9,
99 fidl::encoding::DynamicFlags::FLEXIBLE,
100 ___deadline,
101 )?
102 .into_result::<PacketObserverMarker>("observe")?;
103 Ok(_response)
104 }
105
106 pub fn r#error(&self, mut payload: &CaptureError) -> Result<(), fidl::Error> {
109 self.client.send::<CaptureError>(
110 payload,
111 0x6596e43f4f0761e4,
112 fidl::encoding::DynamicFlags::FLEXIBLE,
113 )
114 }
115}
116
117#[cfg(target_os = "fuchsia")]
118impl From<PacketObserverSynchronousProxy> for zx::NullableHandle {
119 fn from(value: PacketObserverSynchronousProxy) -> Self {
120 value.into_channel().into()
121 }
122}
123
124#[cfg(target_os = "fuchsia")]
125impl From<fidl::Channel> for PacketObserverSynchronousProxy {
126 fn from(value: fidl::Channel) -> Self {
127 Self::new(value)
128 }
129}
130
131#[cfg(target_os = "fuchsia")]
132impl fidl::endpoints::FromClient for PacketObserverSynchronousProxy {
133 type Protocol = PacketObserverMarker;
134
135 fn from_client(value: fidl::endpoints::ClientEnd<PacketObserverMarker>) -> Self {
136 Self::new(value.into_channel())
137 }
138}
139
140#[derive(Debug, Clone)]
141pub struct PacketObserverProxy {
142 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
143}
144
145impl fidl::endpoints::Proxy for PacketObserverProxy {
146 type Protocol = PacketObserverMarker;
147
148 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
149 Self::new(inner)
150 }
151
152 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
153 self.client.into_channel().map_err(|client| Self { client })
154 }
155
156 fn as_channel(&self) -> &::fidl::AsyncChannel {
157 self.client.as_channel()
158 }
159}
160
161impl PacketObserverProxy {
162 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
164 let protocol_name = <PacketObserverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
165 Self { client: fidl::client::Client::new(channel, protocol_name) }
166 }
167
168 pub fn take_event_stream(&self) -> PacketObserverEventStream {
174 PacketObserverEventStream { event_receiver: self.client.take_event_receiver() }
175 }
176
177 pub fn r#observe(
180 &self,
181 mut payload: &DevicePackets,
182 ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
183 PacketObserverProxyInterface::r#observe(self, payload)
184 }
185
186 pub fn r#error(&self, mut payload: &CaptureError) -> Result<(), fidl::Error> {
189 PacketObserverProxyInterface::r#error(self, payload)
190 }
191}
192
193impl PacketObserverProxyInterface for PacketObserverProxy {
194 type ObserveResponseFut =
195 fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
196 fn r#observe(&self, mut payload: &DevicePackets) -> Self::ObserveResponseFut {
197 fn _decode(
198 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
199 ) -> Result<(), fidl::Error> {
200 let _response = fidl::client::decode_transaction_body::<
201 fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
202 fidl::encoding::DefaultFuchsiaResourceDialect,
203 0x2a82a5a9a18b79c9,
204 >(_buf?)?
205 .into_result::<PacketObserverMarker>("observe")?;
206 Ok(_response)
207 }
208 self.client.send_query_and_decode::<DevicePackets, ()>(
209 payload,
210 0x2a82a5a9a18b79c9,
211 fidl::encoding::DynamicFlags::FLEXIBLE,
212 _decode,
213 )
214 }
215
216 fn r#error(&self, mut payload: &CaptureError) -> Result<(), fidl::Error> {
217 self.client.send::<CaptureError>(
218 payload,
219 0x6596e43f4f0761e4,
220 fidl::encoding::DynamicFlags::FLEXIBLE,
221 )
222 }
223}
224
225pub struct PacketObserverEventStream {
226 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
227}
228
229impl std::marker::Unpin for PacketObserverEventStream {}
230
231impl futures::stream::FusedStream for PacketObserverEventStream {
232 fn is_terminated(&self) -> bool {
233 self.event_receiver.is_terminated()
234 }
235}
236
237impl futures::Stream for PacketObserverEventStream {
238 type Item = Result<PacketObserverEvent, fidl::Error>;
239
240 fn poll_next(
241 mut self: std::pin::Pin<&mut Self>,
242 cx: &mut std::task::Context<'_>,
243 ) -> std::task::Poll<Option<Self::Item>> {
244 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
245 &mut self.event_receiver,
246 cx
247 )?) {
248 Some(buf) => std::task::Poll::Ready(Some(PacketObserverEvent::decode(buf))),
249 None => std::task::Poll::Ready(None),
250 }
251 }
252}
253
254#[derive(Debug)]
255pub enum PacketObserverEvent {
256 #[non_exhaustive]
257 _UnknownEvent {
258 ordinal: u64,
260 },
261}
262
263impl PacketObserverEvent {
264 fn decode(
266 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
267 ) -> Result<PacketObserverEvent, fidl::Error> {
268 let (bytes, _handles) = buf.split_mut();
269 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
270 debug_assert_eq!(tx_header.tx_id, 0);
271 match tx_header.ordinal {
272 _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
273 Ok(PacketObserverEvent::_UnknownEvent { ordinal: tx_header.ordinal })
274 }
275 _ => Err(fidl::Error::UnknownOrdinal {
276 ordinal: tx_header.ordinal,
277 protocol_name:
278 <PacketObserverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
279 }),
280 }
281 }
282}
283
284pub struct PacketObserverRequestStream {
286 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
287 is_terminated: bool,
288}
289
290impl std::marker::Unpin for PacketObserverRequestStream {}
291
292impl futures::stream::FusedStream for PacketObserverRequestStream {
293 fn is_terminated(&self) -> bool {
294 self.is_terminated
295 }
296}
297
298impl fidl::endpoints::RequestStream for PacketObserverRequestStream {
299 type Protocol = PacketObserverMarker;
300 type ControlHandle = PacketObserverControlHandle;
301
302 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
303 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
304 }
305
306 fn control_handle(&self) -> Self::ControlHandle {
307 PacketObserverControlHandle { inner: self.inner.clone() }
308 }
309
310 fn into_inner(
311 self,
312 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
313 {
314 (self.inner, self.is_terminated)
315 }
316
317 fn from_inner(
318 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
319 is_terminated: bool,
320 ) -> Self {
321 Self { inner, is_terminated }
322 }
323}
324
325impl futures::Stream for PacketObserverRequestStream {
326 type Item = Result<PacketObserverRequest, fidl::Error>;
327
328 fn poll_next(
329 mut self: std::pin::Pin<&mut Self>,
330 cx: &mut std::task::Context<'_>,
331 ) -> std::task::Poll<Option<Self::Item>> {
332 let this = &mut *self;
333 if this.inner.check_shutdown(cx) {
334 this.is_terminated = true;
335 return std::task::Poll::Ready(None);
336 }
337 if this.is_terminated {
338 panic!("polled PacketObserverRequestStream after completion");
339 }
340 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
341 |bytes, handles| {
342 match this.inner.channel().read_etc(cx, bytes, handles) {
343 std::task::Poll::Ready(Ok(())) => {}
344 std::task::Poll::Pending => return std::task::Poll::Pending,
345 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
346 this.is_terminated = true;
347 return std::task::Poll::Ready(None);
348 }
349 std::task::Poll::Ready(Err(e)) => {
350 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
351 e.into(),
352 ))));
353 }
354 }
355
356 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
358
359 std::task::Poll::Ready(Some(match header.ordinal {
360 0x2a82a5a9a18b79c9 => {
361 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
362 let mut req = fidl::new_empty!(
363 DevicePackets,
364 fidl::encoding::DefaultFuchsiaResourceDialect
365 );
366 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DevicePackets>(&header, _body_bytes, handles, &mut req)?;
367 let control_handle =
368 PacketObserverControlHandle { inner: this.inner.clone() };
369 Ok(PacketObserverRequest::Observe {
370 payload: req,
371 responder: PacketObserverObserveResponder {
372 control_handle: std::mem::ManuallyDrop::new(control_handle),
373 tx_id: header.tx_id,
374 },
375 })
376 }
377 0x6596e43f4f0761e4 => {
378 header.validate_request_tx_id(fidl::MethodType::OneWay)?;
379 let mut req = fidl::new_empty!(
380 CaptureError,
381 fidl::encoding::DefaultFuchsiaResourceDialect
382 );
383 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<CaptureError>(&header, _body_bytes, handles, &mut req)?;
384 let control_handle =
385 PacketObserverControlHandle { inner: this.inner.clone() };
386 Ok(PacketObserverRequest::Error { payload: req, control_handle })
387 }
388 _ if header.tx_id == 0
389 && header
390 .dynamic_flags()
391 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
392 {
393 Ok(PacketObserverRequest::_UnknownMethod {
394 ordinal: header.ordinal,
395 control_handle: PacketObserverControlHandle {
396 inner: this.inner.clone(),
397 },
398 method_type: fidl::MethodType::OneWay,
399 })
400 }
401 _ if header
402 .dynamic_flags()
403 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
404 {
405 this.inner.send_framework_err(
406 fidl::encoding::FrameworkErr::UnknownMethod,
407 header.tx_id,
408 header.ordinal,
409 header.dynamic_flags(),
410 (bytes, handles),
411 )?;
412 Ok(PacketObserverRequest::_UnknownMethod {
413 ordinal: header.ordinal,
414 control_handle: PacketObserverControlHandle {
415 inner: this.inner.clone(),
416 },
417 method_type: fidl::MethodType::TwoWay,
418 })
419 }
420 _ => Err(fidl::Error::UnknownOrdinal {
421 ordinal: header.ordinal,
422 protocol_name:
423 <PacketObserverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
424 }),
425 }))
426 },
427 )
428 }
429}
430
431#[derive(Debug)]
432pub enum PacketObserverRequest {
433 Observe { payload: DevicePackets, responder: PacketObserverObserveResponder },
436 Error { payload: CaptureError, control_handle: PacketObserverControlHandle },
439 #[non_exhaustive]
441 _UnknownMethod {
442 ordinal: u64,
444 control_handle: PacketObserverControlHandle,
445 method_type: fidl::MethodType,
446 },
447}
448
449impl PacketObserverRequest {
450 #[allow(irrefutable_let_patterns)]
451 pub fn into_observe(self) -> Option<(DevicePackets, PacketObserverObserveResponder)> {
452 if let PacketObserverRequest::Observe { payload, responder } = self {
453 Some((payload, responder))
454 } else {
455 None
456 }
457 }
458
459 #[allow(irrefutable_let_patterns)]
460 pub fn into_error(self) -> Option<(CaptureError, PacketObserverControlHandle)> {
461 if let PacketObserverRequest::Error { payload, control_handle } = self {
462 Some((payload, control_handle))
463 } else {
464 None
465 }
466 }
467
468 pub fn method_name(&self) -> &'static str {
470 match *self {
471 PacketObserverRequest::Observe { .. } => "observe",
472 PacketObserverRequest::Error { .. } => "error",
473 PacketObserverRequest::_UnknownMethod {
474 method_type: fidl::MethodType::OneWay, ..
475 } => "unknown one-way method",
476 PacketObserverRequest::_UnknownMethod {
477 method_type: fidl::MethodType::TwoWay, ..
478 } => "unknown two-way method",
479 }
480 }
481}
482
483#[derive(Debug, Clone)]
484pub struct PacketObserverControlHandle {
485 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
486}
487
488impl PacketObserverControlHandle {
489 pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
490 self.inner.shutdown_with_epitaph(status.into())
491 }
492}
493
494impl fidl::endpoints::ControlHandle for PacketObserverControlHandle {
495 fn shutdown(&self) {
496 self.inner.shutdown()
497 }
498
499 fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
500 self.inner.shutdown_with_epitaph(status)
501 }
502
503 fn is_closed(&self) -> bool {
504 self.inner.channel().is_closed()
505 }
506 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
507 self.inner.channel().on_closed()
508 }
509
510 #[cfg(target_os = "fuchsia")]
511 fn signal_peer(
512 &self,
513 clear_mask: zx::Signals,
514 set_mask: zx::Signals,
515 ) -> Result<(), zx_status::Status> {
516 use fidl::Peered;
517 self.inner.channel().signal_peer(clear_mask, set_mask)
518 }
519}
520
521impl PacketObserverControlHandle {}
522
523#[must_use = "FIDL methods require a response to be sent"]
524#[derive(Debug)]
525pub struct PacketObserverObserveResponder {
526 control_handle: std::mem::ManuallyDrop<PacketObserverControlHandle>,
527 tx_id: u32,
528}
529
530impl std::ops::Drop for PacketObserverObserveResponder {
534 fn drop(&mut self) {
535 self.control_handle.shutdown();
536 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
538 }
539}
540
541impl fidl::endpoints::Responder for PacketObserverObserveResponder {
542 type ControlHandle = PacketObserverControlHandle;
543
544 fn control_handle(&self) -> &PacketObserverControlHandle {
545 &self.control_handle
546 }
547
548 fn drop_without_shutdown(mut self) {
549 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
551 std::mem::forget(self);
553 }
554}
555
556impl PacketObserverObserveResponder {
557 pub fn send(self) -> Result<(), fidl::Error> {
561 let _result = self.send_raw();
562 if _result.is_err() {
563 self.control_handle.shutdown();
564 }
565 self.drop_without_shutdown();
566 _result
567 }
568
569 pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
571 let _result = self.send_raw();
572 self.drop_without_shutdown();
573 _result
574 }
575
576 fn send_raw(&self) -> Result<(), fidl::Error> {
577 self.control_handle.inner.send::<fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>>(
578 fidl::encoding::Flexible::new(()),
579 self.tx_id,
580 0x2a82a5a9a18b79c9,
581 fidl::encoding::DynamicFlags::FLEXIBLE,
582 )
583 }
584}
585
586#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
587pub struct SnoopMarker;
588
589impl fidl::endpoints::ProtocolMarker for SnoopMarker {
590 type Proxy = SnoopProxy;
591 type RequestStream = SnoopRequestStream;
592 #[cfg(target_os = "fuchsia")]
593 type SynchronousProxy = SnoopSynchronousProxy;
594
595 const DEBUG_NAME: &'static str = "fuchsia.bluetooth.snoop.Snoop";
596}
597impl fidl::endpoints::DiscoverableProtocolMarker for SnoopMarker {}
598
599pub trait SnoopProxyInterface: Send + Sync {
600 fn r#start(&self, payload: SnoopStartRequest) -> Result<(), fidl::Error>;
601}
602#[derive(Debug)]
603#[cfg(target_os = "fuchsia")]
604pub struct SnoopSynchronousProxy {
605 client: fidl::client::sync::Client,
606}
607
608#[cfg(target_os = "fuchsia")]
609impl fidl::endpoints::SynchronousProxy for SnoopSynchronousProxy {
610 type Proxy = SnoopProxy;
611 type Protocol = SnoopMarker;
612
613 fn from_channel(inner: fidl::Channel) -> Self {
614 Self::new(inner)
615 }
616
617 fn into_channel(self) -> fidl::Channel {
618 self.client.into_channel()
619 }
620
621 fn as_channel(&self) -> &fidl::Channel {
622 self.client.as_channel()
623 }
624}
625
626#[cfg(target_os = "fuchsia")]
627impl SnoopSynchronousProxy {
628 pub fn new(channel: fidl::Channel) -> Self {
629 Self { client: fidl::client::sync::Client::new(channel) }
630 }
631
632 pub fn into_channel(self) -> fidl::Channel {
633 self.client.into_channel()
634 }
635
636 pub fn wait_for_event(
639 &self,
640 deadline: zx::MonotonicInstant,
641 ) -> Result<SnoopEvent, fidl::Error> {
642 SnoopEvent::decode(self.client.wait_for_event::<SnoopMarker>(deadline)?)
643 }
644
645 pub fn r#start(&self, mut payload: SnoopStartRequest) -> Result<(), fidl::Error> {
657 self.client.send::<SnoopStartRequest>(
658 &mut payload,
659 0xa520491a4a82f24,
660 fidl::encoding::DynamicFlags::FLEXIBLE,
661 )
662 }
663}
664
665#[cfg(target_os = "fuchsia")]
666impl From<SnoopSynchronousProxy> for zx::NullableHandle {
667 fn from(value: SnoopSynchronousProxy) -> Self {
668 value.into_channel().into()
669 }
670}
671
672#[cfg(target_os = "fuchsia")]
673impl From<fidl::Channel> for SnoopSynchronousProxy {
674 fn from(value: fidl::Channel) -> Self {
675 Self::new(value)
676 }
677}
678
679#[cfg(target_os = "fuchsia")]
680impl fidl::endpoints::FromClient for SnoopSynchronousProxy {
681 type Protocol = SnoopMarker;
682
683 fn from_client(value: fidl::endpoints::ClientEnd<SnoopMarker>) -> Self {
684 Self::new(value.into_channel())
685 }
686}
687
688#[derive(Debug, Clone)]
689pub struct SnoopProxy {
690 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
691}
692
693impl fidl::endpoints::Proxy for SnoopProxy {
694 type Protocol = SnoopMarker;
695
696 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
697 Self::new(inner)
698 }
699
700 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
701 self.client.into_channel().map_err(|client| Self { client })
702 }
703
704 fn as_channel(&self) -> &::fidl::AsyncChannel {
705 self.client.as_channel()
706 }
707}
708
709impl SnoopProxy {
710 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
712 let protocol_name = <SnoopMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
713 Self { client: fidl::client::Client::new(channel, protocol_name) }
714 }
715
716 pub fn take_event_stream(&self) -> SnoopEventStream {
722 SnoopEventStream { event_receiver: self.client.take_event_receiver() }
723 }
724
725 pub fn r#start(&self, mut payload: SnoopStartRequest) -> Result<(), fidl::Error> {
737 SnoopProxyInterface::r#start(self, payload)
738 }
739}
740
741impl SnoopProxyInterface for SnoopProxy {
742 fn r#start(&self, mut payload: SnoopStartRequest) -> Result<(), fidl::Error> {
743 self.client.send::<SnoopStartRequest>(
744 &mut payload,
745 0xa520491a4a82f24,
746 fidl::encoding::DynamicFlags::FLEXIBLE,
747 )
748 }
749}
750
751pub struct SnoopEventStream {
752 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
753}
754
755impl std::marker::Unpin for SnoopEventStream {}
756
757impl futures::stream::FusedStream for SnoopEventStream {
758 fn is_terminated(&self) -> bool {
759 self.event_receiver.is_terminated()
760 }
761}
762
763impl futures::Stream for SnoopEventStream {
764 type Item = Result<SnoopEvent, fidl::Error>;
765
766 fn poll_next(
767 mut self: std::pin::Pin<&mut Self>,
768 cx: &mut std::task::Context<'_>,
769 ) -> std::task::Poll<Option<Self::Item>> {
770 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
771 &mut self.event_receiver,
772 cx
773 )?) {
774 Some(buf) => std::task::Poll::Ready(Some(SnoopEvent::decode(buf))),
775 None => std::task::Poll::Ready(None),
776 }
777 }
778}
779
780#[derive(Debug)]
781pub enum SnoopEvent {
782 #[non_exhaustive]
783 _UnknownEvent {
784 ordinal: u64,
786 },
787}
788
789impl SnoopEvent {
790 fn decode(
792 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
793 ) -> Result<SnoopEvent, fidl::Error> {
794 let (bytes, _handles) = buf.split_mut();
795 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
796 debug_assert_eq!(tx_header.tx_id, 0);
797 match tx_header.ordinal {
798 _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
799 Ok(SnoopEvent::_UnknownEvent { ordinal: tx_header.ordinal })
800 }
801 _ => Err(fidl::Error::UnknownOrdinal {
802 ordinal: tx_header.ordinal,
803 protocol_name: <SnoopMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
804 }),
805 }
806 }
807}
808
809pub struct SnoopRequestStream {
811 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
812 is_terminated: bool,
813}
814
815impl std::marker::Unpin for SnoopRequestStream {}
816
817impl futures::stream::FusedStream for SnoopRequestStream {
818 fn is_terminated(&self) -> bool {
819 self.is_terminated
820 }
821}
822
823impl fidl::endpoints::RequestStream for SnoopRequestStream {
824 type Protocol = SnoopMarker;
825 type ControlHandle = SnoopControlHandle;
826
827 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
828 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
829 }
830
831 fn control_handle(&self) -> Self::ControlHandle {
832 SnoopControlHandle { inner: self.inner.clone() }
833 }
834
835 fn into_inner(
836 self,
837 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
838 {
839 (self.inner, self.is_terminated)
840 }
841
842 fn from_inner(
843 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
844 is_terminated: bool,
845 ) -> Self {
846 Self { inner, is_terminated }
847 }
848}
849
850impl futures::Stream for SnoopRequestStream {
851 type Item = Result<SnoopRequest, fidl::Error>;
852
853 fn poll_next(
854 mut self: std::pin::Pin<&mut Self>,
855 cx: &mut std::task::Context<'_>,
856 ) -> std::task::Poll<Option<Self::Item>> {
857 let this = &mut *self;
858 if this.inner.check_shutdown(cx) {
859 this.is_terminated = true;
860 return std::task::Poll::Ready(None);
861 }
862 if this.is_terminated {
863 panic!("polled SnoopRequestStream after completion");
864 }
865 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
866 |bytes, handles| {
867 match this.inner.channel().read_etc(cx, bytes, handles) {
868 std::task::Poll::Ready(Ok(())) => {}
869 std::task::Poll::Pending => return std::task::Poll::Pending,
870 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
871 this.is_terminated = true;
872 return std::task::Poll::Ready(None);
873 }
874 std::task::Poll::Ready(Err(e)) => {
875 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
876 e.into(),
877 ))));
878 }
879 }
880
881 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
883
884 std::task::Poll::Ready(Some(match header.ordinal {
885 0xa520491a4a82f24 => {
886 header.validate_request_tx_id(fidl::MethodType::OneWay)?;
887 let mut req = fidl::new_empty!(
888 SnoopStartRequest,
889 fidl::encoding::DefaultFuchsiaResourceDialect
890 );
891 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<SnoopStartRequest>(&header, _body_bytes, handles, &mut req)?;
892 let control_handle = SnoopControlHandle { inner: this.inner.clone() };
893 Ok(SnoopRequest::Start { payload: req, control_handle })
894 }
895 _ if header.tx_id == 0
896 && header
897 .dynamic_flags()
898 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
899 {
900 Ok(SnoopRequest::_UnknownMethod {
901 ordinal: header.ordinal,
902 control_handle: SnoopControlHandle { inner: this.inner.clone() },
903 method_type: fidl::MethodType::OneWay,
904 })
905 }
906 _ if header
907 .dynamic_flags()
908 .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
909 {
910 this.inner.send_framework_err(
911 fidl::encoding::FrameworkErr::UnknownMethod,
912 header.tx_id,
913 header.ordinal,
914 header.dynamic_flags(),
915 (bytes, handles),
916 )?;
917 Ok(SnoopRequest::_UnknownMethod {
918 ordinal: header.ordinal,
919 control_handle: SnoopControlHandle { inner: this.inner.clone() },
920 method_type: fidl::MethodType::TwoWay,
921 })
922 }
923 _ => Err(fidl::Error::UnknownOrdinal {
924 ordinal: header.ordinal,
925 protocol_name: <SnoopMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
926 }),
927 }))
928 },
929 )
930 }
931}
932
933#[derive(Debug)]
935pub enum SnoopRequest {
936 Start { payload: SnoopStartRequest, control_handle: SnoopControlHandle },
948 #[non_exhaustive]
950 _UnknownMethod {
951 ordinal: u64,
953 control_handle: SnoopControlHandle,
954 method_type: fidl::MethodType,
955 },
956}
957
958impl SnoopRequest {
959 #[allow(irrefutable_let_patterns)]
960 pub fn into_start(self) -> Option<(SnoopStartRequest, SnoopControlHandle)> {
961 if let SnoopRequest::Start { payload, control_handle } = self {
962 Some((payload, control_handle))
963 } else {
964 None
965 }
966 }
967
968 pub fn method_name(&self) -> &'static str {
970 match *self {
971 SnoopRequest::Start { .. } => "start",
972 SnoopRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
973 "unknown one-way method"
974 }
975 SnoopRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
976 "unknown two-way method"
977 }
978 }
979 }
980}
981
982#[derive(Debug, Clone)]
983pub struct SnoopControlHandle {
984 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
985}
986
987impl SnoopControlHandle {
988 pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
989 self.inner.shutdown_with_epitaph(status.into())
990 }
991}
992
993impl fidl::endpoints::ControlHandle for SnoopControlHandle {
994 fn shutdown(&self) {
995 self.inner.shutdown()
996 }
997
998 fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
999 self.inner.shutdown_with_epitaph(status)
1000 }
1001
1002 fn is_closed(&self) -> bool {
1003 self.inner.channel().is_closed()
1004 }
1005 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1006 self.inner.channel().on_closed()
1007 }
1008
1009 #[cfg(target_os = "fuchsia")]
1010 fn signal_peer(
1011 &self,
1012 clear_mask: zx::Signals,
1013 set_mask: zx::Signals,
1014 ) -> Result<(), zx_status::Status> {
1015 use fidl::Peered;
1016 self.inner.channel().signal_peer(clear_mask, set_mask)
1017 }
1018}
1019
1020impl SnoopControlHandle {}
1021
1022mod internal {
1023 use super::*;
1024
1025 impl SnoopStartRequest {
1026 #[inline(always)]
1027 fn max_ordinal_present(&self) -> u64 {
1028 if let Some(_) = self.client {
1029 return 3;
1030 }
1031 if let Some(_) = self.host_device {
1032 return 2;
1033 }
1034 if let Some(_) = self.follow {
1035 return 1;
1036 }
1037 0
1038 }
1039 }
1040
1041 impl fidl::encoding::ResourceTypeMarker for SnoopStartRequest {
1042 type Borrowed<'a> = &'a mut Self;
1043 fn take_or_borrow<'a>(
1044 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1045 ) -> Self::Borrowed<'a> {
1046 value
1047 }
1048 }
1049
1050 unsafe impl fidl::encoding::TypeMarker for SnoopStartRequest {
1051 type Owned = Self;
1052
1053 #[inline(always)]
1054 fn inline_align(_context: fidl::encoding::Context) -> usize {
1055 8
1056 }
1057
1058 #[inline(always)]
1059 fn inline_size(_context: fidl::encoding::Context) -> usize {
1060 16
1061 }
1062 }
1063
1064 unsafe impl
1065 fidl::encoding::Encode<SnoopStartRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
1066 for &mut SnoopStartRequest
1067 {
1068 unsafe fn encode(
1069 self,
1070 encoder: &mut fidl::encoding::Encoder<
1071 '_,
1072 fidl::encoding::DefaultFuchsiaResourceDialect,
1073 >,
1074 offset: usize,
1075 mut depth: fidl::encoding::Depth,
1076 ) -> fidl::Result<()> {
1077 encoder.debug_check_bounds::<SnoopStartRequest>(offset);
1078 let max_ordinal: u64 = self.max_ordinal_present();
1080 encoder.write_num(max_ordinal, offset);
1081 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1082 if max_ordinal == 0 {
1084 return Ok(());
1085 }
1086 depth.increment()?;
1087 let envelope_size = 8;
1088 let bytes_len = max_ordinal as usize * envelope_size;
1089 #[allow(unused_variables)]
1090 let offset = encoder.out_of_line_offset(bytes_len);
1091 let mut _prev_end_offset: usize = 0;
1092 if 1 > max_ordinal {
1093 return Ok(());
1094 }
1095
1096 let cur_offset: usize = (1 - 1) * envelope_size;
1099
1100 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1102
1103 fidl::encoding::encode_in_envelope_optional::<
1108 bool,
1109 fidl::encoding::DefaultFuchsiaResourceDialect,
1110 >(
1111 self.follow.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1112 encoder,
1113 offset + cur_offset,
1114 depth,
1115 )?;
1116
1117 _prev_end_offset = cur_offset + envelope_size;
1118 if 2 > max_ordinal {
1119 return Ok(());
1120 }
1121
1122 let cur_offset: usize = (2 - 1) * envelope_size;
1125
1126 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1128
1129 fidl::encoding::encode_in_envelope_optional::<
1134 fidl::encoding::BoundedString<255>,
1135 fidl::encoding::DefaultFuchsiaResourceDialect,
1136 >(
1137 self.host_device.as_ref().map(
1138 <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1139 ),
1140 encoder,
1141 offset + cur_offset,
1142 depth,
1143 )?;
1144
1145 _prev_end_offset = cur_offset + envelope_size;
1146 if 3 > max_ordinal {
1147 return Ok(());
1148 }
1149
1150 let cur_offset: usize = (3 - 1) * envelope_size;
1153
1154 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1156
1157 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<PacketObserverMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1162 self.client.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<PacketObserverMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1163 encoder, offset + cur_offset, depth
1164 )?;
1165
1166 _prev_end_offset = cur_offset + envelope_size;
1167
1168 Ok(())
1169 }
1170 }
1171
1172 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1173 for SnoopStartRequest
1174 {
1175 #[inline(always)]
1176 fn new_empty() -> Self {
1177 Self::default()
1178 }
1179
1180 unsafe fn decode(
1181 &mut self,
1182 decoder: &mut fidl::encoding::Decoder<
1183 '_,
1184 fidl::encoding::DefaultFuchsiaResourceDialect,
1185 >,
1186 offset: usize,
1187 mut depth: fidl::encoding::Depth,
1188 ) -> fidl::Result<()> {
1189 decoder.debug_check_bounds::<Self>(offset);
1190 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1191 None => return Err(fidl::Error::NotNullable),
1192 Some(len) => len,
1193 };
1194 if len == 0 {
1196 return Ok(());
1197 };
1198 depth.increment()?;
1199 let envelope_size = 8;
1200 let bytes_len = len * envelope_size;
1201 let offset = decoder.out_of_line_offset(bytes_len)?;
1202 let mut _next_ordinal_to_read = 0;
1204 let mut next_offset = offset;
1205 let end_offset = offset + bytes_len;
1206 _next_ordinal_to_read += 1;
1207 if next_offset >= end_offset {
1208 return Ok(());
1209 }
1210
1211 while _next_ordinal_to_read < 1 {
1213 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1214 _next_ordinal_to_read += 1;
1215 next_offset += envelope_size;
1216 }
1217
1218 let next_out_of_line = decoder.next_out_of_line();
1219 let handles_before = decoder.remaining_handles();
1220 if let Some((inlined, num_bytes, num_handles)) =
1221 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1222 {
1223 let member_inline_size =
1224 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1225 if inlined != (member_inline_size <= 4) {
1226 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1227 }
1228 let inner_offset;
1229 let mut inner_depth = depth.clone();
1230 if inlined {
1231 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1232 inner_offset = next_offset;
1233 } else {
1234 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1235 inner_depth.increment()?;
1236 }
1237 let val_ref = self.follow.get_or_insert_with(|| {
1238 fidl::new_empty!(bool, fidl::encoding::DefaultFuchsiaResourceDialect)
1239 });
1240 fidl::decode!(
1241 bool,
1242 fidl::encoding::DefaultFuchsiaResourceDialect,
1243 val_ref,
1244 decoder,
1245 inner_offset,
1246 inner_depth
1247 )?;
1248 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1249 {
1250 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1251 }
1252 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1253 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1254 }
1255 }
1256
1257 next_offset += envelope_size;
1258 _next_ordinal_to_read += 1;
1259 if next_offset >= end_offset {
1260 return Ok(());
1261 }
1262
1263 while _next_ordinal_to_read < 2 {
1265 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1266 _next_ordinal_to_read += 1;
1267 next_offset += envelope_size;
1268 }
1269
1270 let next_out_of_line = decoder.next_out_of_line();
1271 let handles_before = decoder.remaining_handles();
1272 if let Some((inlined, num_bytes, num_handles)) =
1273 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1274 {
1275 let member_inline_size =
1276 <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
1277 decoder.context,
1278 );
1279 if inlined != (member_inline_size <= 4) {
1280 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1281 }
1282 let inner_offset;
1283 let mut inner_depth = depth.clone();
1284 if inlined {
1285 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1286 inner_offset = next_offset;
1287 } else {
1288 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1289 inner_depth.increment()?;
1290 }
1291 let val_ref = self.host_device.get_or_insert_with(|| {
1292 fidl::new_empty!(
1293 fidl::encoding::BoundedString<255>,
1294 fidl::encoding::DefaultFuchsiaResourceDialect
1295 )
1296 });
1297 fidl::decode!(
1298 fidl::encoding::BoundedString<255>,
1299 fidl::encoding::DefaultFuchsiaResourceDialect,
1300 val_ref,
1301 decoder,
1302 inner_offset,
1303 inner_depth
1304 )?;
1305 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1306 {
1307 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1308 }
1309 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1310 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1311 }
1312 }
1313
1314 next_offset += envelope_size;
1315 _next_ordinal_to_read += 1;
1316 if next_offset >= end_offset {
1317 return Ok(());
1318 }
1319
1320 while _next_ordinal_to_read < 3 {
1322 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1323 _next_ordinal_to_read += 1;
1324 next_offset += envelope_size;
1325 }
1326
1327 let next_out_of_line = decoder.next_out_of_line();
1328 let handles_before = decoder.remaining_handles();
1329 if let Some((inlined, num_bytes, num_handles)) =
1330 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1331 {
1332 let member_inline_size = <fidl::encoding::Endpoint<
1333 fidl::endpoints::ClientEnd<PacketObserverMarker>,
1334 > as fidl::encoding::TypeMarker>::inline_size(
1335 decoder.context
1336 );
1337 if inlined != (member_inline_size <= 4) {
1338 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1339 }
1340 let inner_offset;
1341 let mut inner_depth = depth.clone();
1342 if inlined {
1343 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1344 inner_offset = next_offset;
1345 } else {
1346 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1347 inner_depth.increment()?;
1348 }
1349 let val_ref = self.client.get_or_insert_with(|| {
1350 fidl::new_empty!(
1351 fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<PacketObserverMarker>>,
1352 fidl::encoding::DefaultFuchsiaResourceDialect
1353 )
1354 });
1355 fidl::decode!(
1356 fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<PacketObserverMarker>>,
1357 fidl::encoding::DefaultFuchsiaResourceDialect,
1358 val_ref,
1359 decoder,
1360 inner_offset,
1361 inner_depth
1362 )?;
1363 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1364 {
1365 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1366 }
1367 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1368 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1369 }
1370 }
1371
1372 next_offset += envelope_size;
1373
1374 while next_offset < end_offset {
1376 _next_ordinal_to_read += 1;
1377 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1378 next_offset += envelope_size;
1379 }
1380
1381 Ok(())
1382 }
1383 }
1384}