moq_lite/session/
stream.rs

1use 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}