cuprate_p2p_core/transports/
dummy.rs1use std::{
10 marker::PhantomData,
11 pin::Pin,
12 task::{Context, Poll},
13};
14
15use futures::Stream;
16use tokio::io::{DuplexStream, ReadHalf, WriteHalf};
17use tokio_util::codec::{FramedRead, FramedWrite};
18
19use cuprate_wire::MoneroWireCodec;
20
21use crate::{NetworkZone, Transport};
22
23#[derive(Clone)]
25pub struct DummyTransport;
26
27type DummyTransportStream = FramedRead<ReadHalf<DuplexStream>, MoneroWireCodec>;
28type DummyTransportSink = FramedWrite<WriteHalf<DuplexStream>, MoneroWireCodec>;
29
30pub struct DummyTransportListener<Z: NetworkZone> {
31 _zone: PhantomData<Z>,
32}
33
34impl<Z: NetworkZone> Stream for DummyTransportListener<Z> {
35 type Item = Result<(Option<Z::Addr>, DummyTransportStream, DummyTransportSink), std::io::Error>;
36
37 fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
38 panic!("The dummy transport listener is never meant to be used.");
39 }
40}
41
42#[async_trait::async_trait]
43impl<Z: NetworkZone> Transport<Z> for DummyTransport {
44 type ClientConfig = ();
45 type ServerConfig = ();
46
47 type Stream = DummyTransportStream;
48 type Sink = DummyTransportSink;
49 type Listener = DummyTransportListener<Z>;
50
51 async fn connect_to_peer(
52 _addr: Z::Addr,
53 _config: &Self::ClientConfig,
54 ) -> Result<(Self::Stream, Self::Sink), std::io::Error> {
55 panic!("The dummy transport method is never meant to be used.");
56 }
57
58 async fn incoming_connection_listener(
59 _config: Self::ServerConfig,
60 ) -> Result<Self::Listener, std::io::Error> {
61 panic!("The dummy transport method is never meant to be used.");
62 }
63}