1use xwt_core::prelude::*;
2
3pub async fn connect<Endpoint>(
4 endpoint: &Endpoint,
5 url: &str,
6) -> Result<ConnectSessionFor<Endpoint>, xwt_error::Connect<Endpoint>>
7where
8 Endpoint: xwt_core::endpoint::Connect,
9{
10 let connecting = endpoint
11 .connect(url)
12 .await
13 .map_err(xwt_error::Connect::Connect)?;
14
15 let session = connecting
16 .wait_connect()
17 .await
18 .map_err(xwt_error::Connect::Connecting)?;
19
20 Ok(session)
21}
22
23pub async fn ok_accepting<Accepting>(
24 accepting: Accepting,
25) -> Result<AcceptingSessionFor<Accepting>, xwt_error::Accepting<Accepting>>
26where
27 Accepting: xwt_core::endpoint::accept::Accepting,
28 AcceptingSessionFor<Accepting>: xwt_core::base::Session,
29{
30 let request = accepting
31 .wait_accept()
32 .await
33 .map_err(xwt_error::Accepting::Accepting)?;
34
35 let session = request
36 .ok()
37 .await
38 .map_err(xwt_error::Accepting::RequestOk)?;
39
40 Ok(session)
41}
42
43pub async fn open_bi<Session>(
44 session: &Session,
45) -> Result<BiStreamsFor<Session>, xwt_error::OpenBi<Session>>
46where
47 Session: xwt_core::session::stream::OpenBi,
48{
49 let opening = session.open_bi().await.map_err(xwt_error::OpenBi::Open)?;
50 let streams = opening
51 .wait_bi()
52 .await
53 .map_err(xwt_error::OpenBi::Opening)?;
54
55 Ok(streams)
56}
57
58pub async fn open_uni<Session>(
59 session: &Session,
60) -> Result<SendUniStreamFor<Session>, xwt_error::OpenUni<Session>>
61where
62 Session: xwt_core::session::stream::OpenUni,
63{
64 let opening = session.open_uni().await.map_err(xwt_error::OpenUni::Open)?;
65 let stream = opening
66 .wait_uni()
67 .await
68 .map_err(xwt_error::OpenUni::Opening)?;
69
70 Ok(stream)
71}