moq_lite/session/
stream.rs1use super::{Close, Reader, Writer};
2use crate::{message, Error};
3
4pub(super) struct Stream {
5 pub writer: Writer,
6 pub reader: Reader,
7}
8
9impl Stream {
10 pub async fn open(session: &mut web_transport::Session, typ: message::ControlType) -> Result<Self, Error> {
11 let (send, recv) = session.open_bi().await?;
12
13 let mut writer = Writer::new(send);
14 let reader = Reader::new(recv);
15 writer.encode(&typ).await?;
16
17 Ok(Stream { writer, reader })
18 }
19
20 pub async fn accept(session: &mut web_transport::Session) -> Result<Self, Error> {
21 let (send, recv) = session.accept_bi().await?;
22
23 let writer = Writer::new(send);
24 let reader = Reader::new(recv);
25
26 Ok(Stream { writer, reader })
27 }
28}
29
30impl Close<Error> for Stream {
31 fn close(&mut self, err: Error) {
32 self.writer.close(err.clone());
33 self.reader.close(err);
34 }
35}