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