moq_lite/coding/
stream.rs1use std::sync::Arc;
2
3use crate::Error;
4use crate::coding::{Reader, Writer};
5
6pub struct Stream<S: web_transport_trait::Session, V> {
8 pub writer: Writer<S::SendStream, V>,
9 pub reader: Reader<S::RecvStream, V>,
10}
11
12impl<S: web_transport_trait::Session, V> Stream<S, V> {
13 pub async fn open(session: &S, version: V) -> Result<Self, Error>
15 where
16 V: Clone,
17 {
18 let (send, recv) = session.open_bi().await.map_err(|err| Error::Transport(Arc::new(err)))?;
19
20 let writer = Writer::new(send, version.clone());
21 let reader = Reader::new(recv, version);
22
23 Ok(Stream { writer, reader })
24 }
25
26 pub async fn accept(session: &S, version: V) -> Result<Self, Error>
28 where
29 V: Clone,
30 {
31 let (send, recv) = session
32 .accept_bi()
33 .await
34 .map_err(|err| Error::Transport(Arc::new(err)))?;
35
36 let writer = Writer::new(send, version.clone());
37 let reader = Reader::new(recv, version);
38
39 Ok(Stream { writer, reader })
40 }
41
42 pub fn with_version<O: Clone>(self, version: O) -> Stream<S, O> {
44 Stream {
45 writer: self.writer.with_version(version.clone()),
46 reader: self.reader.with_version(version),
47 }
48 }
49}