xwt_core/session/
stream.rs

1#![allow(missing_docs)]
2
3use core::future::Future;
4
5use crate::utils::{maybe, Error};
6
7pub trait SendSpec: maybe::Send {
8    type SendStream: crate::stream::Write
9        + crate::stream::WriteAbort
10        + crate::stream::WriteAborted
11        + crate::stream::Finish;
12}
13
14pub trait RecvSpec: maybe::Send {
15    type RecvStream: crate::stream::Read
16        + crate::stream::ReadAbort
17        + crate::stream::ReadAborted
18        + crate::stream::Finished;
19}
20
21pub trait PairSpec: maybe::Send + SendSpec + RecvSpec {}
22
23impl<T> PairSpec for T where T: maybe::Send + SendSpec + RecvSpec {}
24
25pub type TupleFor<T> = (<T as SendSpec>::SendStream, <T as RecvSpec>::RecvStream);
26
27pub trait OpeningBi: maybe::Send {
28    type Streams: PairSpec;
29    type Error: Error + maybe::Send + maybe::Sync + 'static;
30
31    fn wait_bi(
32        self,
33    ) -> impl Future<Output = Result<TupleFor<Self::Streams>, Self::Error>> + maybe::Send;
34}
35
36pub trait OpenBi: PairSpec {
37    type Opening: OpeningBi<Streams = Self>;
38    type Error: Error + maybe::Send + maybe::Sync + 'static;
39
40    fn open_bi(&self) -> impl Future<Output = Result<Self::Opening, Self::Error>> + maybe::Send;
41}
42
43pub trait AcceptBi: PairSpec {
44    type Error: Error + maybe::Send + maybe::Sync + 'static;
45
46    fn accept_bi(&self) -> impl Future<Output = Result<TupleFor<Self>, Self::Error>> + maybe::Send;
47}
48
49pub trait OpeningUni: maybe::Send {
50    type Streams: SendSpec;
51    type Error: Error + maybe::Send + maybe::Sync + 'static;
52
53    fn wait_uni(
54        self,
55    ) -> impl Future<Output = Result<<Self::Streams as SendSpec>::SendStream, Self::Error>> + maybe::Send;
56}
57
58pub trait OpenUni: SendSpec {
59    type Opening: OpeningUni<Streams = Self>;
60    type Error: Error + maybe::Send + maybe::Sync + 'static;
61
62    fn open_uni(&self) -> impl Future<Output = Result<Self::Opening, Self::Error>> + maybe::Send;
63}
64
65pub trait AcceptUni: RecvSpec {
66    type Error: Error + maybe::Send + maybe::Sync + 'static;
67
68    fn accept_uni(
69        &self,
70    ) -> impl Future<Output = Result<Self::RecvStream, Self::Error>> + maybe::Send;
71}