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}