xwt_core/session/
stream.rs1#![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}