moq_lite/coding/
stream.rs

1use std::sync::Arc;
2
3use crate::coding::{Reader, Writer};
4use crate::Error;
5
6pub struct Stream<S: web_transport_trait::Session> {
7	pub writer: Writer<S::SendStream>,
8	pub reader: Reader<S::RecvStream>,
9}
10
11impl<S: web_transport_trait::Session> Stream<S> {
12	pub async fn open(session: &S) -> Result<Self, Error> {
13		let (send, recv) = session.open_bi().await.map_err(|err| Error::Transport(Arc::new(err)))?;
14
15		let writer = Writer::new(send);
16		let reader = Reader::new(recv);
17
18		Ok(Stream { writer, reader })
19	}
20
21	pub async fn accept(session: &S) -> Result<Self, Error> {
22		let (send, recv) = session
23			.accept_bi()
24			.await
25			.map_err(|err| Error::Transport(Arc::new(err)))?;
26
27		let writer = Writer::new(send);
28		let reader = Reader::new(recv);
29
30		Ok(Stream { writer, reader })
31	}
32}