Skip to main content

fidl_fuchsia_developer_ffx_speedtest/
fidl_fuchsia_developer_ffx_speedtest.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_developer_ffx_speedtest_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct SpeedtestSocketDownRequest {
16    pub socket: fidl::Socket,
17    pub params: TransferParams,
18}
19
20impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
21    for SpeedtestSocketDownRequest
22{
23}
24
25#[derive(Debug, PartialEq)]
26pub struct SpeedtestSocketUpRequest {
27    pub socket: fidl::Socket,
28    pub params: TransferParams,
29}
30
31impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for SpeedtestSocketUpRequest {}
32
33#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
34pub struct SpeedtestMarker;
35
36impl fidl::endpoints::ProtocolMarker for SpeedtestMarker {
37    type Proxy = SpeedtestProxy;
38    type RequestStream = SpeedtestRequestStream;
39    #[cfg(target_os = "fuchsia")]
40    type SynchronousProxy = SpeedtestSynchronousProxy;
41
42    const DEBUG_NAME: &'static str = "fuchsia.developer.ffx.speedtest.Speedtest";
43}
44impl fidl::endpoints::DiscoverableProtocolMarker for SpeedtestMarker {}
45
46pub trait SpeedtestProxyInterface: Send + Sync {
47    type PingResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
48    fn r#ping(&self) -> Self::PingResponseFut;
49    type SocketUpResponseFut: std::future::Future<Output = Result<TransferReport, fidl::Error>>
50        + Send;
51    fn r#socket_up(
52        &self,
53        socket: fidl::Socket,
54        params: &TransferParams,
55    ) -> Self::SocketUpResponseFut;
56    type SocketDownResponseFut: std::future::Future<Output = Result<TransferReport, fidl::Error>>
57        + Send;
58    fn r#socket_down(
59        &self,
60        socket: fidl::Socket,
61        params: &TransferParams,
62    ) -> Self::SocketDownResponseFut;
63}
64#[derive(Debug)]
65#[cfg(target_os = "fuchsia")]
66pub struct SpeedtestSynchronousProxy {
67    client: fidl::client::sync::Client,
68}
69
70#[cfg(target_os = "fuchsia")]
71impl fidl::endpoints::SynchronousProxy for SpeedtestSynchronousProxy {
72    type Proxy = SpeedtestProxy;
73    type Protocol = SpeedtestMarker;
74
75    fn from_channel(inner: fidl::Channel) -> Self {
76        Self::new(inner)
77    }
78
79    fn into_channel(self) -> fidl::Channel {
80        self.client.into_channel()
81    }
82
83    fn as_channel(&self) -> &fidl::Channel {
84        self.client.as_channel()
85    }
86}
87
88#[cfg(target_os = "fuchsia")]
89impl SpeedtestSynchronousProxy {
90    pub fn new(channel: fidl::Channel) -> Self {
91        Self { client: fidl::client::sync::Client::new(channel) }
92    }
93
94    pub fn into_channel(self) -> fidl::Channel {
95        self.client.into_channel()
96    }
97
98    /// Waits until an event arrives and returns it. It is safe for other
99    /// threads to make concurrent requests while waiting for an event.
100    pub fn wait_for_event(
101        &self,
102        deadline: zx::MonotonicInstant,
103    ) -> Result<SpeedtestEvent, fidl::Error> {
104        SpeedtestEvent::decode(self.client.wait_for_event::<SpeedtestMarker>(deadline)?)
105    }
106
107    /// No-op, server responds immediately.
108    pub fn r#ping(&self, ___deadline: zx::MonotonicInstant) -> Result<(), fidl::Error> {
109        let _response = self.client.send_query::<
110            fidl::encoding::EmptyPayload,
111            fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
112            SpeedtestMarker,
113        >(
114            (),
115            0x1511ccb237874689,
116            fidl::encoding::DynamicFlags::FLEXIBLE,
117            ___deadline,
118        )?
119        .into_result::<SpeedtestMarker>("ping")?;
120        Ok(_response)
121    }
122
123    /// Server writes data into the provided zircon socket and reports stats.
124    pub fn r#socket_up(
125        &self,
126        mut socket: fidl::Socket,
127        mut params: &TransferParams,
128        ___deadline: zx::MonotonicInstant,
129    ) -> Result<TransferReport, fidl::Error> {
130        let _response = self.client.send_query::<
131            SpeedtestSocketUpRequest,
132            fidl::encoding::FlexibleType<TransferReport>,
133            SpeedtestMarker,
134        >(
135            (socket, params,),
136            0x7c530a369209ae87,
137            fidl::encoding::DynamicFlags::FLEXIBLE,
138            ___deadline,
139        )?
140        .into_result::<SpeedtestMarker>("socket_up")?;
141        Ok(_response)
142    }
143
144    /// Server reads data from the provided zircon socket and reports stats.
145    pub fn r#socket_down(
146        &self,
147        mut socket: fidl::Socket,
148        mut params: &TransferParams,
149        ___deadline: zx::MonotonicInstant,
150    ) -> Result<TransferReport, fidl::Error> {
151        let _response = self.client.send_query::<
152            SpeedtestSocketDownRequest,
153            fidl::encoding::FlexibleType<TransferReport>,
154            SpeedtestMarker,
155        >(
156            (socket, params,),
157            0x426e13de44070751,
158            fidl::encoding::DynamicFlags::FLEXIBLE,
159            ___deadline,
160        )?
161        .into_result::<SpeedtestMarker>("socket_down")?;
162        Ok(_response)
163    }
164}
165
166#[cfg(target_os = "fuchsia")]
167impl From<SpeedtestSynchronousProxy> for zx::NullableHandle {
168    fn from(value: SpeedtestSynchronousProxy) -> Self {
169        value.into_channel().into()
170    }
171}
172
173#[cfg(target_os = "fuchsia")]
174impl From<fidl::Channel> for SpeedtestSynchronousProxy {
175    fn from(value: fidl::Channel) -> Self {
176        Self::new(value)
177    }
178}
179
180#[cfg(target_os = "fuchsia")]
181impl fidl::endpoints::FromClient for SpeedtestSynchronousProxy {
182    type Protocol = SpeedtestMarker;
183
184    fn from_client(value: fidl::endpoints::ClientEnd<SpeedtestMarker>) -> Self {
185        Self::new(value.into_channel())
186    }
187}
188
189#[derive(Debug, Clone)]
190pub struct SpeedtestProxy {
191    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
192}
193
194impl fidl::endpoints::Proxy for SpeedtestProxy {
195    type Protocol = SpeedtestMarker;
196
197    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
198        Self::new(inner)
199    }
200
201    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
202        self.client.into_channel().map_err(|client| Self { client })
203    }
204
205    fn as_channel(&self) -> &::fidl::AsyncChannel {
206        self.client.as_channel()
207    }
208}
209
210impl SpeedtestProxy {
211    /// Create a new Proxy for fuchsia.developer.ffx.speedtest/Speedtest.
212    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
213        let protocol_name = <SpeedtestMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
214        Self { client: fidl::client::Client::new(channel, protocol_name) }
215    }
216
217    /// Get a Stream of events from the remote end of the protocol.
218    ///
219    /// # Panics
220    ///
221    /// Panics if the event stream was already taken.
222    pub fn take_event_stream(&self) -> SpeedtestEventStream {
223        SpeedtestEventStream { event_receiver: self.client.take_event_receiver() }
224    }
225
226    /// No-op, server responds immediately.
227    pub fn r#ping(
228        &self,
229    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
230        SpeedtestProxyInterface::r#ping(self)
231    }
232
233    /// Server writes data into the provided zircon socket and reports stats.
234    pub fn r#socket_up(
235        &self,
236        mut socket: fidl::Socket,
237        mut params: &TransferParams,
238    ) -> fidl::client::QueryResponseFut<TransferReport, fidl::encoding::DefaultFuchsiaResourceDialect>
239    {
240        SpeedtestProxyInterface::r#socket_up(self, socket, params)
241    }
242
243    /// Server reads data from the provided zircon socket and reports stats.
244    pub fn r#socket_down(
245        &self,
246        mut socket: fidl::Socket,
247        mut params: &TransferParams,
248    ) -> fidl::client::QueryResponseFut<TransferReport, fidl::encoding::DefaultFuchsiaResourceDialect>
249    {
250        SpeedtestProxyInterface::r#socket_down(self, socket, params)
251    }
252}
253
254impl SpeedtestProxyInterface for SpeedtestProxy {
255    type PingResponseFut =
256        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
257    fn r#ping(&self) -> Self::PingResponseFut {
258        fn _decode(
259            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
260        ) -> Result<(), fidl::Error> {
261            let _response = fidl::client::decode_transaction_body::<
262                fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>,
263                fidl::encoding::DefaultFuchsiaResourceDialect,
264                0x1511ccb237874689,
265            >(_buf?)?
266            .into_result::<SpeedtestMarker>("ping")?;
267            Ok(_response)
268        }
269        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, ()>(
270            (),
271            0x1511ccb237874689,
272            fidl::encoding::DynamicFlags::FLEXIBLE,
273            _decode,
274        )
275    }
276
277    type SocketUpResponseFut = fidl::client::QueryResponseFut<
278        TransferReport,
279        fidl::encoding::DefaultFuchsiaResourceDialect,
280    >;
281    fn r#socket_up(
282        &self,
283        mut socket: fidl::Socket,
284        mut params: &TransferParams,
285    ) -> Self::SocketUpResponseFut {
286        fn _decode(
287            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
288        ) -> Result<TransferReport, fidl::Error> {
289            let _response = fidl::client::decode_transaction_body::<
290                fidl::encoding::FlexibleType<TransferReport>,
291                fidl::encoding::DefaultFuchsiaResourceDialect,
292                0x7c530a369209ae87,
293            >(_buf?)?
294            .into_result::<SpeedtestMarker>("socket_up")?;
295            Ok(_response)
296        }
297        self.client.send_query_and_decode::<SpeedtestSocketUpRequest, TransferReport>(
298            (socket, params),
299            0x7c530a369209ae87,
300            fidl::encoding::DynamicFlags::FLEXIBLE,
301            _decode,
302        )
303    }
304
305    type SocketDownResponseFut = fidl::client::QueryResponseFut<
306        TransferReport,
307        fidl::encoding::DefaultFuchsiaResourceDialect,
308    >;
309    fn r#socket_down(
310        &self,
311        mut socket: fidl::Socket,
312        mut params: &TransferParams,
313    ) -> Self::SocketDownResponseFut {
314        fn _decode(
315            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
316        ) -> Result<TransferReport, fidl::Error> {
317            let _response = fidl::client::decode_transaction_body::<
318                fidl::encoding::FlexibleType<TransferReport>,
319                fidl::encoding::DefaultFuchsiaResourceDialect,
320                0x426e13de44070751,
321            >(_buf?)?
322            .into_result::<SpeedtestMarker>("socket_down")?;
323            Ok(_response)
324        }
325        self.client.send_query_and_decode::<SpeedtestSocketDownRequest, TransferReport>(
326            (socket, params),
327            0x426e13de44070751,
328            fidl::encoding::DynamicFlags::FLEXIBLE,
329            _decode,
330        )
331    }
332}
333
334pub struct SpeedtestEventStream {
335    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
336}
337
338impl std::marker::Unpin for SpeedtestEventStream {}
339
340impl futures::stream::FusedStream for SpeedtestEventStream {
341    fn is_terminated(&self) -> bool {
342        self.event_receiver.is_terminated()
343    }
344}
345
346impl futures::Stream for SpeedtestEventStream {
347    type Item = Result<SpeedtestEvent, fidl::Error>;
348
349    fn poll_next(
350        mut self: std::pin::Pin<&mut Self>,
351        cx: &mut std::task::Context<'_>,
352    ) -> std::task::Poll<Option<Self::Item>> {
353        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
354            &mut self.event_receiver,
355            cx
356        )?) {
357            Some(buf) => std::task::Poll::Ready(Some(SpeedtestEvent::decode(buf))),
358            None => std::task::Poll::Ready(None),
359        }
360    }
361}
362
363#[derive(Debug)]
364pub enum SpeedtestEvent {
365    #[non_exhaustive]
366    _UnknownEvent {
367        /// Ordinal of the event that was sent.
368        ordinal: u64,
369    },
370}
371
372impl SpeedtestEvent {
373    /// Decodes a message buffer as a [`SpeedtestEvent`].
374    fn decode(
375        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
376    ) -> Result<SpeedtestEvent, fidl::Error> {
377        let (bytes, _handles) = buf.split_mut();
378        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
379        debug_assert_eq!(tx_header.tx_id, 0);
380        match tx_header.ordinal {
381            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
382                Ok(SpeedtestEvent::_UnknownEvent { ordinal: tx_header.ordinal })
383            }
384            _ => Err(fidl::Error::UnknownOrdinal {
385                ordinal: tx_header.ordinal,
386                protocol_name: <SpeedtestMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
387            }),
388        }
389    }
390}
391
392/// A Stream of incoming requests for fuchsia.developer.ffx.speedtest/Speedtest.
393pub struct SpeedtestRequestStream {
394    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
395    is_terminated: bool,
396}
397
398impl std::marker::Unpin for SpeedtestRequestStream {}
399
400impl futures::stream::FusedStream for SpeedtestRequestStream {
401    fn is_terminated(&self) -> bool {
402        self.is_terminated
403    }
404}
405
406impl fidl::endpoints::RequestStream for SpeedtestRequestStream {
407    type Protocol = SpeedtestMarker;
408    type ControlHandle = SpeedtestControlHandle;
409
410    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
411        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
412    }
413
414    fn control_handle(&self) -> Self::ControlHandle {
415        SpeedtestControlHandle { inner: self.inner.clone() }
416    }
417
418    fn into_inner(
419        self,
420    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
421    {
422        (self.inner, self.is_terminated)
423    }
424
425    fn from_inner(
426        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
427        is_terminated: bool,
428    ) -> Self {
429        Self { inner, is_terminated }
430    }
431}
432
433impl futures::Stream for SpeedtestRequestStream {
434    type Item = Result<SpeedtestRequest, fidl::Error>;
435
436    fn poll_next(
437        mut self: std::pin::Pin<&mut Self>,
438        cx: &mut std::task::Context<'_>,
439    ) -> std::task::Poll<Option<Self::Item>> {
440        let this = &mut *self;
441        if this.inner.check_shutdown(cx) {
442            this.is_terminated = true;
443            return std::task::Poll::Ready(None);
444        }
445        if this.is_terminated {
446            panic!("polled SpeedtestRequestStream after completion");
447        }
448        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
449            |bytes, handles| {
450                match this.inner.channel().read_etc(cx, bytes, handles) {
451                    std::task::Poll::Ready(Ok(())) => {}
452                    std::task::Poll::Pending => return std::task::Poll::Pending,
453                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
454                        this.is_terminated = true;
455                        return std::task::Poll::Ready(None);
456                    }
457                    std::task::Poll::Ready(Err(e)) => {
458                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
459                            e.into(),
460                        ))));
461                    }
462                }
463
464                // A message has been received from the channel
465                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
466
467                std::task::Poll::Ready(Some(match header.ordinal {
468                    0x1511ccb237874689 => {
469                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
470                        let mut req = fidl::new_empty!(
471                            fidl::encoding::EmptyPayload,
472                            fidl::encoding::DefaultFuchsiaResourceDialect
473                        );
474                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
475                        let control_handle = SpeedtestControlHandle { inner: this.inner.clone() };
476                        Ok(SpeedtestRequest::Ping {
477                            responder: SpeedtestPingResponder {
478                                control_handle: std::mem::ManuallyDrop::new(control_handle),
479                                tx_id: header.tx_id,
480                            },
481                        })
482                    }
483                    0x7c530a369209ae87 => {
484                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
485                        let mut req = fidl::new_empty!(
486                            SpeedtestSocketUpRequest,
487                            fidl::encoding::DefaultFuchsiaResourceDialect
488                        );
489                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<SpeedtestSocketUpRequest>(&header, _body_bytes, handles, &mut req)?;
490                        let control_handle = SpeedtestControlHandle { inner: this.inner.clone() };
491                        Ok(SpeedtestRequest::SocketUp {
492                            socket: req.socket,
493                            params: req.params,
494
495                            responder: SpeedtestSocketUpResponder {
496                                control_handle: std::mem::ManuallyDrop::new(control_handle),
497                                tx_id: header.tx_id,
498                            },
499                        })
500                    }
501                    0x426e13de44070751 => {
502                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
503                        let mut req = fidl::new_empty!(
504                            SpeedtestSocketDownRequest,
505                            fidl::encoding::DefaultFuchsiaResourceDialect
506                        );
507                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<SpeedtestSocketDownRequest>(&header, _body_bytes, handles, &mut req)?;
508                        let control_handle = SpeedtestControlHandle { inner: this.inner.clone() };
509                        Ok(SpeedtestRequest::SocketDown {
510                            socket: req.socket,
511                            params: req.params,
512
513                            responder: SpeedtestSocketDownResponder {
514                                control_handle: std::mem::ManuallyDrop::new(control_handle),
515                                tx_id: header.tx_id,
516                            },
517                        })
518                    }
519                    _ if header.tx_id == 0
520                        && header
521                            .dynamic_flags()
522                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
523                    {
524                        Ok(SpeedtestRequest::_UnknownMethod {
525                            ordinal: header.ordinal,
526                            control_handle: SpeedtestControlHandle { inner: this.inner.clone() },
527                            method_type: fidl::MethodType::OneWay,
528                        })
529                    }
530                    _ if header
531                        .dynamic_flags()
532                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
533                    {
534                        this.inner.send_framework_err(
535                            fidl::encoding::FrameworkErr::UnknownMethod,
536                            header.tx_id,
537                            header.ordinal,
538                            header.dynamic_flags(),
539                            (bytes, handles),
540                        )?;
541                        Ok(SpeedtestRequest::_UnknownMethod {
542                            ordinal: header.ordinal,
543                            control_handle: SpeedtestControlHandle { inner: this.inner.clone() },
544                            method_type: fidl::MethodType::TwoWay,
545                        })
546                    }
547                    _ => Err(fidl::Error::UnknownOrdinal {
548                        ordinal: header.ordinal,
549                        protocol_name:
550                            <SpeedtestMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
551                    }),
552                }))
553            },
554        )
555    }
556}
557
558#[derive(Debug)]
559pub enum SpeedtestRequest {
560    /// No-op, server responds immediately.
561    Ping { responder: SpeedtestPingResponder },
562    /// Server writes data into the provided zircon socket and reports stats.
563    SocketUp { socket: fidl::Socket, params: TransferParams, responder: SpeedtestSocketUpResponder },
564    /// Server reads data from the provided zircon socket and reports stats.
565    SocketDown {
566        socket: fidl::Socket,
567        params: TransferParams,
568        responder: SpeedtestSocketDownResponder,
569    },
570    /// An interaction was received which does not match any known method.
571    #[non_exhaustive]
572    _UnknownMethod {
573        /// Ordinal of the method that was called.
574        ordinal: u64,
575        control_handle: SpeedtestControlHandle,
576        method_type: fidl::MethodType,
577    },
578}
579
580impl SpeedtestRequest {
581    #[allow(irrefutable_let_patterns)]
582    pub fn into_ping(self) -> Option<(SpeedtestPingResponder)> {
583        if let SpeedtestRequest::Ping { responder } = self { Some((responder)) } else { None }
584    }
585
586    #[allow(irrefutable_let_patterns)]
587    pub fn into_socket_up(
588        self,
589    ) -> Option<(fidl::Socket, TransferParams, SpeedtestSocketUpResponder)> {
590        if let SpeedtestRequest::SocketUp { socket, params, responder } = self {
591            Some((socket, params, responder))
592        } else {
593            None
594        }
595    }
596
597    #[allow(irrefutable_let_patterns)]
598    pub fn into_socket_down(
599        self,
600    ) -> Option<(fidl::Socket, TransferParams, SpeedtestSocketDownResponder)> {
601        if let SpeedtestRequest::SocketDown { socket, params, responder } = self {
602            Some((socket, params, responder))
603        } else {
604            None
605        }
606    }
607
608    /// Name of the method defined in FIDL
609    pub fn method_name(&self) -> &'static str {
610        match *self {
611            SpeedtestRequest::Ping { .. } => "ping",
612            SpeedtestRequest::SocketUp { .. } => "socket_up",
613            SpeedtestRequest::SocketDown { .. } => "socket_down",
614            SpeedtestRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
615                "unknown one-way method"
616            }
617            SpeedtestRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
618                "unknown two-way method"
619            }
620        }
621    }
622}
623
624#[derive(Debug, Clone)]
625pub struct SpeedtestControlHandle {
626    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
627}
628
629impl SpeedtestControlHandle {
630    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
631        self.inner.shutdown_with_epitaph(status.into())
632    }
633}
634
635impl fidl::endpoints::ControlHandle for SpeedtestControlHandle {
636    fn shutdown(&self) {
637        self.inner.shutdown()
638    }
639
640    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
641        self.inner.shutdown_with_epitaph(status)
642    }
643
644    fn is_closed(&self) -> bool {
645        self.inner.channel().is_closed()
646    }
647    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
648        self.inner.channel().on_closed()
649    }
650
651    #[cfg(target_os = "fuchsia")]
652    fn signal_peer(
653        &self,
654        clear_mask: zx::Signals,
655        set_mask: zx::Signals,
656    ) -> Result<(), zx_status::Status> {
657        use fidl::Peered;
658        self.inner.channel().signal_peer(clear_mask, set_mask)
659    }
660}
661
662impl SpeedtestControlHandle {}
663
664#[must_use = "FIDL methods require a response to be sent"]
665#[derive(Debug)]
666pub struct SpeedtestPingResponder {
667    control_handle: std::mem::ManuallyDrop<SpeedtestControlHandle>,
668    tx_id: u32,
669}
670
671/// Set the the channel to be shutdown (see [`SpeedtestControlHandle::shutdown`])
672/// if the responder is dropped without sending a response, so that the client
673/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
674impl std::ops::Drop for SpeedtestPingResponder {
675    fn drop(&mut self) {
676        self.control_handle.shutdown();
677        // Safety: drops once, never accessed again
678        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
679    }
680}
681
682impl fidl::endpoints::Responder for SpeedtestPingResponder {
683    type ControlHandle = SpeedtestControlHandle;
684
685    fn control_handle(&self) -> &SpeedtestControlHandle {
686        &self.control_handle
687    }
688
689    fn drop_without_shutdown(mut self) {
690        // Safety: drops once, never accessed again due to mem::forget
691        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
692        // Prevent Drop from running (which would shut down the channel)
693        std::mem::forget(self);
694    }
695}
696
697impl SpeedtestPingResponder {
698    /// Sends a response to the FIDL transaction.
699    ///
700    /// Sets the channel to shutdown if an error occurs.
701    pub fn send(self) -> Result<(), fidl::Error> {
702        let _result = self.send_raw();
703        if _result.is_err() {
704            self.control_handle.shutdown();
705        }
706        self.drop_without_shutdown();
707        _result
708    }
709
710    /// Similar to "send" but does not shutdown the channel if an error occurs.
711    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
712        let _result = self.send_raw();
713        self.drop_without_shutdown();
714        _result
715    }
716
717    fn send_raw(&self) -> Result<(), fidl::Error> {
718        self.control_handle.inner.send::<fidl::encoding::FlexibleType<fidl::encoding::EmptyStruct>>(
719            fidl::encoding::Flexible::new(()),
720            self.tx_id,
721            0x1511ccb237874689,
722            fidl::encoding::DynamicFlags::FLEXIBLE,
723        )
724    }
725}
726
727#[must_use = "FIDL methods require a response to be sent"]
728#[derive(Debug)]
729pub struct SpeedtestSocketUpResponder {
730    control_handle: std::mem::ManuallyDrop<SpeedtestControlHandle>,
731    tx_id: u32,
732}
733
734/// Set the the channel to be shutdown (see [`SpeedtestControlHandle::shutdown`])
735/// if the responder is dropped without sending a response, so that the client
736/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
737impl std::ops::Drop for SpeedtestSocketUpResponder {
738    fn drop(&mut self) {
739        self.control_handle.shutdown();
740        // Safety: drops once, never accessed again
741        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
742    }
743}
744
745impl fidl::endpoints::Responder for SpeedtestSocketUpResponder {
746    type ControlHandle = SpeedtestControlHandle;
747
748    fn control_handle(&self) -> &SpeedtestControlHandle {
749        &self.control_handle
750    }
751
752    fn drop_without_shutdown(mut self) {
753        // Safety: drops once, never accessed again due to mem::forget
754        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
755        // Prevent Drop from running (which would shut down the channel)
756        std::mem::forget(self);
757    }
758}
759
760impl SpeedtestSocketUpResponder {
761    /// Sends a response to the FIDL transaction.
762    ///
763    /// Sets the channel to shutdown if an error occurs.
764    pub fn send(self, mut payload: &TransferReport) -> Result<(), fidl::Error> {
765        let _result = self.send_raw(payload);
766        if _result.is_err() {
767            self.control_handle.shutdown();
768        }
769        self.drop_without_shutdown();
770        _result
771    }
772
773    /// Similar to "send" but does not shutdown the channel if an error occurs.
774    pub fn send_no_shutdown_on_err(self, mut payload: &TransferReport) -> Result<(), fidl::Error> {
775        let _result = self.send_raw(payload);
776        self.drop_without_shutdown();
777        _result
778    }
779
780    fn send_raw(&self, mut payload: &TransferReport) -> Result<(), fidl::Error> {
781        self.control_handle.inner.send::<fidl::encoding::FlexibleType<TransferReport>>(
782            fidl::encoding::Flexible::new(payload),
783            self.tx_id,
784            0x7c530a369209ae87,
785            fidl::encoding::DynamicFlags::FLEXIBLE,
786        )
787    }
788}
789
790#[must_use = "FIDL methods require a response to be sent"]
791#[derive(Debug)]
792pub struct SpeedtestSocketDownResponder {
793    control_handle: std::mem::ManuallyDrop<SpeedtestControlHandle>,
794    tx_id: u32,
795}
796
797/// Set the the channel to be shutdown (see [`SpeedtestControlHandle::shutdown`])
798/// if the responder is dropped without sending a response, so that the client
799/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
800impl std::ops::Drop for SpeedtestSocketDownResponder {
801    fn drop(&mut self) {
802        self.control_handle.shutdown();
803        // Safety: drops once, never accessed again
804        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
805    }
806}
807
808impl fidl::endpoints::Responder for SpeedtestSocketDownResponder {
809    type ControlHandle = SpeedtestControlHandle;
810
811    fn control_handle(&self) -> &SpeedtestControlHandle {
812        &self.control_handle
813    }
814
815    fn drop_without_shutdown(mut self) {
816        // Safety: drops once, never accessed again due to mem::forget
817        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
818        // Prevent Drop from running (which would shut down the channel)
819        std::mem::forget(self);
820    }
821}
822
823impl SpeedtestSocketDownResponder {
824    /// Sends a response to the FIDL transaction.
825    ///
826    /// Sets the channel to shutdown if an error occurs.
827    pub fn send(self, mut payload: &TransferReport) -> Result<(), fidl::Error> {
828        let _result = self.send_raw(payload);
829        if _result.is_err() {
830            self.control_handle.shutdown();
831        }
832        self.drop_without_shutdown();
833        _result
834    }
835
836    /// Similar to "send" but does not shutdown the channel if an error occurs.
837    pub fn send_no_shutdown_on_err(self, mut payload: &TransferReport) -> Result<(), fidl::Error> {
838        let _result = self.send_raw(payload);
839        self.drop_without_shutdown();
840        _result
841    }
842
843    fn send_raw(&self, mut payload: &TransferReport) -> Result<(), fidl::Error> {
844        self.control_handle.inner.send::<fidl::encoding::FlexibleType<TransferReport>>(
845            fidl::encoding::Flexible::new(payload),
846            self.tx_id,
847            0x426e13de44070751,
848            fidl::encoding::DynamicFlags::FLEXIBLE,
849        )
850    }
851}
852
853mod internal {
854    use super::*;
855
856    impl fidl::encoding::ResourceTypeMarker for SpeedtestSocketDownRequest {
857        type Borrowed<'a> = &'a mut Self;
858        fn take_or_borrow<'a>(
859            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
860        ) -> Self::Borrowed<'a> {
861            value
862        }
863    }
864
865    unsafe impl fidl::encoding::TypeMarker for SpeedtestSocketDownRequest {
866        type Owned = Self;
867
868        #[inline(always)]
869        fn inline_align(_context: fidl::encoding::Context) -> usize {
870            8
871        }
872
873        #[inline(always)]
874        fn inline_size(_context: fidl::encoding::Context) -> usize {
875            24
876        }
877    }
878
879    unsafe impl
880        fidl::encoding::Encode<
881            SpeedtestSocketDownRequest,
882            fidl::encoding::DefaultFuchsiaResourceDialect,
883        > for &mut SpeedtestSocketDownRequest
884    {
885        #[inline]
886        unsafe fn encode(
887            self,
888            encoder: &mut fidl::encoding::Encoder<
889                '_,
890                fidl::encoding::DefaultFuchsiaResourceDialect,
891            >,
892            offset: usize,
893            _depth: fidl::encoding::Depth,
894        ) -> fidl::Result<()> {
895            encoder.debug_check_bounds::<SpeedtestSocketDownRequest>(offset);
896            // Delegate to tuple encoding.
897            fidl::encoding::Encode::<
898                SpeedtestSocketDownRequest,
899                fidl::encoding::DefaultFuchsiaResourceDialect,
900            >::encode(
901                (
902                    <fidl::encoding::HandleType<
903                        fidl::Socket,
904                        { fidl::ObjectType::SOCKET.into_raw() },
905                        16388,
906                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
907                        &mut self.socket
908                    ),
909                    <TransferParams as fidl::encoding::ValueTypeMarker>::borrow(&self.params),
910                ),
911                encoder,
912                offset,
913                _depth,
914            )
915        }
916    }
917    unsafe impl<
918        T0: fidl::encoding::Encode<
919                fidl::encoding::HandleType<
920                    fidl::Socket,
921                    { fidl::ObjectType::SOCKET.into_raw() },
922                    16388,
923                >,
924                fidl::encoding::DefaultFuchsiaResourceDialect,
925            >,
926        T1: fidl::encoding::Encode<TransferParams, fidl::encoding::DefaultFuchsiaResourceDialect>,
927    >
928        fidl::encoding::Encode<
929            SpeedtestSocketDownRequest,
930            fidl::encoding::DefaultFuchsiaResourceDialect,
931        > for (T0, T1)
932    {
933        #[inline]
934        unsafe fn encode(
935            self,
936            encoder: &mut fidl::encoding::Encoder<
937                '_,
938                fidl::encoding::DefaultFuchsiaResourceDialect,
939            >,
940            offset: usize,
941            depth: fidl::encoding::Depth,
942        ) -> fidl::Result<()> {
943            encoder.debug_check_bounds::<SpeedtestSocketDownRequest>(offset);
944            // Zero out padding regions. There's no need to apply masks
945            // because the unmasked parts will be overwritten by fields.
946            unsafe {
947                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
948                (ptr as *mut u64).write_unaligned(0);
949            }
950            // Write the fields.
951            self.0.encode(encoder, offset + 0, depth)?;
952            self.1.encode(encoder, offset + 8, depth)?;
953            Ok(())
954        }
955    }
956
957    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
958        for SpeedtestSocketDownRequest
959    {
960        #[inline(always)]
961        fn new_empty() -> Self {
962            Self {
963                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 16388>, fidl::encoding::DefaultFuchsiaResourceDialect),
964                params: fidl::new_empty!(
965                    TransferParams,
966                    fidl::encoding::DefaultFuchsiaResourceDialect
967                ),
968            }
969        }
970
971        #[inline]
972        unsafe fn decode(
973            &mut self,
974            decoder: &mut fidl::encoding::Decoder<
975                '_,
976                fidl::encoding::DefaultFuchsiaResourceDialect,
977            >,
978            offset: usize,
979            _depth: fidl::encoding::Depth,
980        ) -> fidl::Result<()> {
981            decoder.debug_check_bounds::<Self>(offset);
982            // Verify that padding bytes are zero.
983            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
984            let padval = unsafe { (ptr as *const u64).read_unaligned() };
985            let mask = 0xffffffff00000000u64;
986            let maskedval = padval & mask;
987            if maskedval != 0 {
988                return Err(fidl::Error::NonZeroPadding {
989                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
990                });
991            }
992            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 16388>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 0, _depth)?;
993            fidl::decode!(
994                TransferParams,
995                fidl::encoding::DefaultFuchsiaResourceDialect,
996                &mut self.params,
997                decoder,
998                offset + 8,
999                _depth
1000            )?;
1001            Ok(())
1002        }
1003    }
1004
1005    impl fidl::encoding::ResourceTypeMarker for SpeedtestSocketUpRequest {
1006        type Borrowed<'a> = &'a mut Self;
1007        fn take_or_borrow<'a>(
1008            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1009        ) -> Self::Borrowed<'a> {
1010            value
1011        }
1012    }
1013
1014    unsafe impl fidl::encoding::TypeMarker for SpeedtestSocketUpRequest {
1015        type Owned = Self;
1016
1017        #[inline(always)]
1018        fn inline_align(_context: fidl::encoding::Context) -> usize {
1019            8
1020        }
1021
1022        #[inline(always)]
1023        fn inline_size(_context: fidl::encoding::Context) -> usize {
1024            24
1025        }
1026    }
1027
1028    unsafe impl
1029        fidl::encoding::Encode<
1030            SpeedtestSocketUpRequest,
1031            fidl::encoding::DefaultFuchsiaResourceDialect,
1032        > for &mut SpeedtestSocketUpRequest
1033    {
1034        #[inline]
1035        unsafe fn encode(
1036            self,
1037            encoder: &mut fidl::encoding::Encoder<
1038                '_,
1039                fidl::encoding::DefaultFuchsiaResourceDialect,
1040            >,
1041            offset: usize,
1042            _depth: fidl::encoding::Depth,
1043        ) -> fidl::Result<()> {
1044            encoder.debug_check_bounds::<SpeedtestSocketUpRequest>(offset);
1045            // Delegate to tuple encoding.
1046            fidl::encoding::Encode::<
1047                SpeedtestSocketUpRequest,
1048                fidl::encoding::DefaultFuchsiaResourceDialect,
1049            >::encode(
1050                (
1051                    <fidl::encoding::HandleType<
1052                        fidl::Socket,
1053                        { fidl::ObjectType::SOCKET.into_raw() },
1054                        16392,
1055                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1056                        &mut self.socket
1057                    ),
1058                    <TransferParams as fidl::encoding::ValueTypeMarker>::borrow(&self.params),
1059                ),
1060                encoder,
1061                offset,
1062                _depth,
1063            )
1064        }
1065    }
1066    unsafe impl<
1067        T0: fidl::encoding::Encode<
1068                fidl::encoding::HandleType<
1069                    fidl::Socket,
1070                    { fidl::ObjectType::SOCKET.into_raw() },
1071                    16392,
1072                >,
1073                fidl::encoding::DefaultFuchsiaResourceDialect,
1074            >,
1075        T1: fidl::encoding::Encode<TransferParams, fidl::encoding::DefaultFuchsiaResourceDialect>,
1076    >
1077        fidl::encoding::Encode<
1078            SpeedtestSocketUpRequest,
1079            fidl::encoding::DefaultFuchsiaResourceDialect,
1080        > for (T0, T1)
1081    {
1082        #[inline]
1083        unsafe fn encode(
1084            self,
1085            encoder: &mut fidl::encoding::Encoder<
1086                '_,
1087                fidl::encoding::DefaultFuchsiaResourceDialect,
1088            >,
1089            offset: usize,
1090            depth: fidl::encoding::Depth,
1091        ) -> fidl::Result<()> {
1092            encoder.debug_check_bounds::<SpeedtestSocketUpRequest>(offset);
1093            // Zero out padding regions. There's no need to apply masks
1094            // because the unmasked parts will be overwritten by fields.
1095            unsafe {
1096                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1097                (ptr as *mut u64).write_unaligned(0);
1098            }
1099            // Write the fields.
1100            self.0.encode(encoder, offset + 0, depth)?;
1101            self.1.encode(encoder, offset + 8, depth)?;
1102            Ok(())
1103        }
1104    }
1105
1106    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1107        for SpeedtestSocketUpRequest
1108    {
1109        #[inline(always)]
1110        fn new_empty() -> Self {
1111            Self {
1112                socket: fidl::new_empty!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 16392>, fidl::encoding::DefaultFuchsiaResourceDialect),
1113                params: fidl::new_empty!(
1114                    TransferParams,
1115                    fidl::encoding::DefaultFuchsiaResourceDialect
1116                ),
1117            }
1118        }
1119
1120        #[inline]
1121        unsafe fn decode(
1122            &mut self,
1123            decoder: &mut fidl::encoding::Decoder<
1124                '_,
1125                fidl::encoding::DefaultFuchsiaResourceDialect,
1126            >,
1127            offset: usize,
1128            _depth: fidl::encoding::Depth,
1129        ) -> fidl::Result<()> {
1130            decoder.debug_check_bounds::<Self>(offset);
1131            // Verify that padding bytes are zero.
1132            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1133            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1134            let mask = 0xffffffff00000000u64;
1135            let maskedval = padval & mask;
1136            if maskedval != 0 {
1137                return Err(fidl::Error::NonZeroPadding {
1138                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1139                });
1140            }
1141            fidl::decode!(fidl::encoding::HandleType<fidl::Socket, { fidl::ObjectType::SOCKET.into_raw() }, 16392>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.socket, decoder, offset + 0, _depth)?;
1142            fidl::decode!(
1143                TransferParams,
1144                fidl::encoding::DefaultFuchsiaResourceDialect,
1145                &mut self.params,
1146                decoder,
1147                offset + 8,
1148                _depth
1149            )?;
1150            Ok(())
1151        }
1152    }
1153}