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