xapi_binance/common/
endpoint.rs

1use url::Url;
2
3pub struct BnEndpoint {
4    rest_base_url: Url,
5    ws_api_base_url: Url,
6    ws_stream_base_url: Url,
7}
8
9impl BnEndpoint {
10    pub fn new_spot() -> Self {
11        Self {
12            rest_base_url: Url::parse("https://api.binance.com").unwrap(),
13            ws_api_base_url: Url::parse("wss://ws-api.binance.com:443/ws-api/v3").unwrap(),
14            ws_stream_base_url: Url::parse("wss://stream.binance.com:9443/stream").unwrap(),
15        }
16    }
17
18    pub fn new_spot_testnet() -> Self {
19        Self {
20            rest_base_url: Url::parse("https://testnet.binance.vision/api").unwrap(),
21            ws_api_base_url: Url::parse("wss://ws-api.testnet.binance.vision/ws-api/v3").unwrap(),
22            ws_stream_base_url: Url::parse("wss://stream.testnet.binance.vision:443/stream")
23                .unwrap(),
24        }
25    }
26
27    pub fn new_usdm() -> Self {
28        Self {
29            rest_base_url: Url::parse("https://fapi.binance.com/").unwrap(),
30            ws_api_base_url: Url::parse("wss://ws-fapi.binance.com/ws-fapi/v1").unwrap(),
31            ws_stream_base_url: Url::parse("wss://fstream.binance.com/stream").unwrap(),
32        }
33    }
34
35    pub fn new_usdm_testnet() -> Self {
36        Self {
37            rest_base_url: Url::parse("https://testnet.binancefuture.com").unwrap(),
38            ws_api_base_url: Url::parse("wss://testnet.binancefuture.com/ws-fapi/v1").unwrap(),
39            ws_stream_base_url: Url::parse("wss://stream.binancefuture.com/stream").unwrap(),
40        }
41    }
42
43    pub fn build_rest_api_url(&self, path: &str) -> Url {
44        self.rest_base_url
45            .join(path)
46            .inspect_err(|err| tracing::error!("fail to build url: {err}"))
47            .unwrap()
48    }
49
50    pub fn get_ws_api_base_url(&self) -> &Url {
51        &self.ws_api_base_url
52    }
53
54    pub fn get_ws_stream_base_url(&self) -> &Url {
55        &self.ws_stream_base_url
56    }
57}