use s2n_quic_transport::stream::Stream;
#[derive(Debug)]
pub struct BidirectionalStream(Stream);
impl BidirectionalStream {
pub(crate) const fn new(stream: Stream) -> Self {
Self(stream)
}
pub fn id(&self) -> u64 {
self.0.id().into()
}
impl_connection_api!(|stream| crate::connection::Handle(stream.0.connection().clone()));
impl_receive_stream_api!(|stream, call| call!(stream.0));
impl_send_stream_api!(|stream, call| call!(stream.0));
pub fn split(self) -> (crate::stream::ReceiveStream, crate::stream::SendStream) {
let (recv, send) = self.0.split();
(
crate::stream::ReceiveStream::new(recv),
crate::stream::SendStream::new(send),
)
}
}
impl_receive_stream_trait!(BidirectionalStream, |stream, call| call!(stream.0));
impl_send_stream_trait!(BidirectionalStream, |stream, call| call!(stream.0));
impl_splittable_stream_trait!(BidirectionalStream, |stream| {
let (recv, send) = Self::split(stream);
(Some(recv), Some(send))
});