use super::{BidirectionalStream, ReceiveStream};
#[derive(Debug)]
pub enum PeerStream {
Bidirectional(BidirectionalStream),
Receive(ReceiveStream),
}
impl PeerStream {
pub fn id(&self) -> u64 {
match self {
Self::Bidirectional(stream) => stream.id(),
Self::Receive(stream) => stream.id(),
}
}
impl_connection_api!(|stream| match stream {
PeerStream::Bidirectional(stream) => stream.connection(),
PeerStream::Receive(stream) => stream.connection(),
});
impl_receive_stream_api!(|stream, dispatch| match stream {
PeerStream::Bidirectional(stream) => dispatch!(stream),
PeerStream::Receive(stream) => dispatch!(stream),
});
impl_send_stream_api!(|stream, dispatch| match stream {
PeerStream::Bidirectional(stream) => dispatch!(stream),
PeerStream::Receive(_stream) => dispatch!(),
});
impl_splittable_stream_api!();
}
impl_receive_stream_trait!(PeerStream, |stream, dispatch| match stream {
PeerStream::Bidirectional(stream) => dispatch!(stream),
PeerStream::Receive(stream) => dispatch!(stream),
});
impl_send_stream_trait!(PeerStream, |stream, dispatch| match stream {
PeerStream::Bidirectional(stream) => dispatch!(stream),
PeerStream::Receive(_stream) => dispatch!(),
});
impl_splittable_stream_trait!(PeerStream, |stream| match stream {
PeerStream::Bidirectional(stream) => super::SplittableStream::split(stream),
PeerStream::Receive(stream) => super::SplittableStream::split(stream),
});
impl From<ReceiveStream> for PeerStream {
#[inline]
fn from(stream: ReceiveStream) -> Self {
Self::Receive(stream)
}
}
impl From<BidirectionalStream> for PeerStream {
#[inline]
fn from(stream: BidirectionalStream) -> Self {
Self::Bidirectional(stream)
}
}