cuprate_p2p_core/transports/
dummy.rs

1//! Dummy Transport
2//!
3//! This module defines a dummy transport method with no generation logic.
4//! It is only useful as a placeholder or performing logical p2p tests.
5//!
6//! It's implementation isn't constrained and can be used for any `Z: NetworkZone`
7//!
8
9use 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/// A dummy transport method with no generation logic. It is only useful as a placeholder or for tests.
24#[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}