moq_lite/coding/
stream.rs1use 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}