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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use flex_error::{define_error, TraceError};
use http;
use reqwest;
use serde_json;
use std::path::PathBuf;
use tendermint_rpc;
use tokio::task::JoinError;
use tokio::time::error::Elapsed;

define_error! {
    RegistryError {

        GrpcEndpointParseError
            { grpc: String }
            [ TraceError<http::Error> ]
            |e| { format_args!("Unable to parse gRPC endpoint for: {}", e.grpc) },

        JoinError
            { task: String }
            [ TraceError<JoinError> ]
            |e| { format_args!("Error when joining task: {}", e.task) },

        JsonParseError
            { chain_name: String }
            [ TraceError <serde_json::Error> ]
            |e| { format_args!("Error when parsing JSON for chain {}", e.chain_name) },

        NoAssetFound
            { chain_name: String }
            |e| { format_args!("No asset found for chain: {}", e.chain_name) },

        NoHealthyGrpc
            { chain: String }
            |e| { format_args!("No healthy gRPC found for chain: {}", e.chain) },

        NoHealthyRpc
            { chain: String }
            |e| { format_args!("No healthy RPC found for chain: {}", e.chain) },

        PathError
            { path: PathBuf}
            |e| { format_args!("Error when parsing path: {:?}", e.path) },

        RequestError
            { url: String }
            [ TraceError<reqwest::Error> ]
            |e| { format_args!("Error when requesting: {}", e.url) },

        RpcConnectError
            { rpc: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Error when connecting to RPC: {}", e.rpc) },

        RpcConsensusParamsError
            { rpc: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Unable to fetch consensus params for RPC: {}", e.rpc) },

        RpcStatusError
            { rpc: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Unable to fetch status for RPC: {}", e.rpc) },

        RpcUrlWithoutAuthority
            { rpc: String }
            |e| { format_args!("Provided RPC URL without authority: {}", e.rpc) },

        RpcSyncingError
            { rpc: String }
            |e| { format_args!("Rpc node out of sync: {}", e.rpc) },

        UriParseError
            { uri: String }
            [ TraceError<http::uri::InvalidUri> ]
            |e| { format_args!("Error when parsing URI: {}", e.uri) },

        UrlParseError
            { url: String }
            [ TraceError<http::Error> ]
            |e| { format_args!("Error when parsing URL: {}", e.url) },

        TendermintUrlParseError
            { url: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Error when parsing URL: {}", e.url) },

        StatusError
            { url: String, status : u16}
            |e| { format_args!("Incorrect HTTP response status ({}) for URL: {}", e.status, e.url) },

        UnableToBuildWebsocketEndpoint
            {rpc: String }
            [ TraceError<http::Error> ]
            |e| { format_args!("Unable to build WebSocket endpoint for RPC: {}", e.rpc) },

        UnableToConnectWithGrpc
            |_| { "Unable to connect with gRPC" },

        WebsocketConnectError
            { url: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Unable to connect to WebSocket: {}", e.url) },

        WebsocketConnCloseError
            { url: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Unable to close WebSocket connection: {}", e.url) },

        WebsocketTimeOutError
            { url: String }
            [ TraceError<Elapsed> ]
            |e| { format_args!("Unable to connect to WebSocket: {}", e.url) },

        WebsocketDriverError
            { url: String }
            [ TraceError<tendermint_rpc::Error> ]
            |e| { format_args!("Unable to close WebSocket driver: {}", e.url) },
    }
}