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//!
89use std::{
10 marker::PhantomData,
11 pin::Pin,
12 task::{Context, Poll},
13};
1415use futures::Stream;
16use tokio::io::{DuplexStream, ReadHalf, WriteHalf};
17use tokio_util::codec::{FramedRead, FramedWrite};
1819use cuprate_wire::MoneroWireCodec;
2021use crate::{NetworkZone, Transport};
2223/// A dummy transport method with no generation logic. It is only useful as a placeholder or for tests.
24#[derive(Clone)]
25pub struct DummyTransport;
2627type DummyTransportStream = FramedRead<ReadHalf<DuplexStream>, MoneroWireCodec>;
28type DummyTransportSink = FramedWrite<WriteHalf<DuplexStream>, MoneroWireCodec>;
2930pub struct DummyTransportListener<Z: NetworkZone> {
31 _zone: PhantomData<Z>,
32}
3334impl<Z: NetworkZone> Stream for DummyTransportListener<Z> {
35type Item = Result<(Option<Z::Addr>, DummyTransportStream, DummyTransportSink), std::io::Error>;
3637fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
38panic!("The dummy transport listener is never meant to be used.");
39 }
40}
4142#[async_trait::async_trait]
43impl<Z: NetworkZone> Transport<Z> for DummyTransport {
44type ClientConfig = ();
45type ServerConfig = ();
4647type Stream = DummyTransportStream;
48type Sink = DummyTransportSink;
49type Listener = DummyTransportListener<Z>;
5051async fn connect_to_peer(
52 _addr: Z::Addr,
53 _config: &Self::ClientConfig,
54 ) -> Result<(Self::Stream, Self::Sink), std::io::Error> {
55panic!("The dummy transport method is never meant to be used.");
56 }
5758async fn incoming_connection_listener(
59 _config: Self::ServerConfig,
60 ) -> Result<Self::Listener, std::io::Error> {
61panic!("The dummy transport method is never meant to be used.");
62 }
63}