binance/
config.rs

1use crate::rest::core::rate_limiter::ip_rate_limit_manager::IpRateLimitManager;
2use crate::rest::core::rate_limiter::unfilled_order_rate_limit_manager::UnfilledOrderRateLimitManager;
3use std::sync::Arc;
4
5pub const REST_API_HOST: &str = "https://api.binance.com";
6const WS_HOST: &str = "wss://stream.binance.com/ws";
7const FUTURES_REST_API_HOST: &str = "https://fapi.binance.com";
8const FUTURES_WS_HOST: &str = "wss://fstream.binance.com/ws";
9
10#[derive(Clone, Debug)]
11pub struct Config {
12  pub rest_api_host: String,
13  pub ws_host: String,
14  pub futures_rest_api_host: String,
15  pub futures_ws_host: String,
16  pub recv_window: u64,
17  pub ip_rate_limit_manager: Option<Arc<IpRateLimitManager>>,
18  pub unfilled_order_rate_limit_manager: Option<Arc<UnfilledOrderRateLimitManager>>,
19}
20
21impl Default for Config {
22  fn default() -> Self {
23    Self {
24      rest_api_host: REST_API_HOST.into(),
25      ws_host: WS_HOST.into(),
26      futures_rest_api_host: FUTURES_REST_API_HOST.into(),
27      futures_ws_host: FUTURES_WS_HOST.into(),
28      recv_window: 5000,
29      ip_rate_limit_manager: None,
30      unfilled_order_rate_limit_manager: None,
31    }
32  }
33}
34
35impl Config {
36  pub fn testnet() -> Self {
37    Self::default()
38      .set_rest_api_endpoint("https://testnet.binance.vision")
39      .set_ws_endpoint("wss://testnet.binance.vision/ws")
40      .set_futures_rest_api_endpoint("https://testnet.binancefuture.com")
41      .set_futures_ws_endpoint("https://testnet.binancefuture.com/ws")
42  }
43
44  pub fn set_rest_api_endpoint<T: Into<String>>(mut self, rest_api_host: T) -> Self {
45    self.rest_api_host = rest_api_host.into();
46    self
47  }
48
49  pub fn set_ws_endpoint<T: Into<String>>(mut self, ws_host: T) -> Self {
50    self.ws_host = ws_host.into();
51    self
52  }
53
54  pub fn set_futures_rest_api_endpoint<T: Into<String>>(
55    mut self,
56    futures_rest_api_host: T,
57  ) -> Self {
58    self.futures_rest_api_host = futures_rest_api_host.into();
59    self
60  }
61
62  pub fn set_futures_ws_endpoint<T: Into<String>>(mut self, futures_ws_host: T) -> Self {
63    self.futures_ws_host = futures_ws_host.into();
64    self
65  }
66
67  pub fn set_recv_window(mut self, recv_window: u64) -> Self {
68    self.recv_window = recv_window;
69    self
70  }
71
72  pub fn set_ip_rate_limit_manager(mut self, rate_limit_manager: Arc<IpRateLimitManager>) -> Self {
73    self.ip_rate_limit_manager = Some(rate_limit_manager);
74    self
75  }
76
77  pub fn set_unfilled_order_rate_limit_manager(
78    mut self,
79    rate_limit_manager: Arc<UnfilledOrderRateLimitManager>,
80  ) -> Self {
81    self.unfilled_order_rate_limit_manager = Some(rate_limit_manager);
82    self
83  }
84}