1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
use xwt_core::prelude::*;

pub async fn connect<Endpoint>(
    endpoint: &Endpoint,
    url: &str,
) -> Result<EndpointConnectConnectionFor<Endpoint>, xwt_error::Connect<Endpoint>>
where
    Endpoint: xwt_core::EndpointConnect,
{
    let connecting = endpoint
        .connect(url)
        .await
        .map_err(xwt_error::Connect::Connect)?;

    let connection = connecting
        .wait_connect()
        .await
        .map_err(xwt_error::Connect::Connecting)?;

    Ok(connection)
}

pub async fn ok_accepting<Accepting>(
    accepting: Accepting,
) -> Result<AcceptingConnectionFor<Accepting>, xwt_error::Accepting<Accepting>>
where
    Accepting: xwt_core::Accepting,
    AcceptingConnectionFor<Accepting>: xwt_core::Connection,
{
    let request = accepting
        .wait_accept()
        .await
        .map_err(xwt_error::Accepting::Accepting)?;

    let connection = request
        .ok()
        .await
        .map_err(xwt_error::Accepting::RequestOk)?;

    Ok(connection)
}

pub async fn open_bi<Connection>(
    connection: &Connection,
) -> Result<BiStreamsFor<Connection>, xwt_error::OpenBi<Connection>>
where
    Connection: xwt_core::OpenBiStream,
{
    let opening = connection
        .open_bi()
        .await
        .map_err(xwt_error::OpenBi::Open)?;
    let streams = opening
        .wait_bi()
        .await
        .map_err(xwt_error::OpenBi::Opening)?;

    Ok(streams)
}

pub async fn open_uni<Connection>(
    connection: &Connection,
) -> Result<SendUniStreamFor<Connection>, xwt_error::OpenUni<Connection>>
where
    Connection: xwt_core::OpenUniStream,
{
    let opening = connection
        .open_uni()
        .await
        .map_err(xwt_error::OpenUni::Open)?;
    let stream = opening
        .wait_uni()
        .await
        .map_err(xwt_error::OpenUni::Opening)?;

    Ok(stream)
}