nautilus_kraken/
config.rs1use nautilus_model::identifiers::{AccountId, TraderId};
19use nautilus_network::websocket::TransportBackend;
20
21use crate::common::{
22 enums::{KrakenEnvironment, KrakenProductType},
23 urls::{get_kraken_http_base_url, get_kraken_ws_private_url, get_kraken_ws_public_url},
24};
25
26#[derive(Debug, Clone, bon::Builder)]
28#[cfg_attr(
29 feature = "python",
30 pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.kraken", from_py_object)
31)]
32#[cfg_attr(
33 feature = "python",
34 pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.kraken")
35)]
36pub struct KrakenDataClientConfig {
37 pub api_key: Option<String>,
38 pub api_secret: Option<String>,
39 #[builder(default = KrakenProductType::Spot)]
40 pub product_type: KrakenProductType,
41 #[builder(default = KrakenEnvironment::Mainnet)]
42 pub environment: KrakenEnvironment,
43 pub base_url: Option<String>,
44 pub ws_public_url: Option<String>,
45 pub ws_private_url: Option<String>,
46 pub proxy_url: Option<String>,
48 #[builder(default = 30)]
49 pub timeout_secs: u64,
50 #[builder(default = 30)]
51 pub heartbeat_interval_secs: u64,
52 pub max_requests_per_second: Option<u32>,
53 #[builder(default)]
54 pub transport_backend: TransportBackend,
55}
56
57impl Default for KrakenDataClientConfig {
58 fn default() -> Self {
59 Self::builder().build()
60 }
61}
62
63impl KrakenDataClientConfig {
64 pub fn has_api_credentials(&self) -> bool {
66 self.api_key.is_some() && self.api_secret.is_some()
67 }
68
69 pub fn http_base_url(&self) -> String {
71 self.base_url.clone().unwrap_or_else(|| {
72 get_kraken_http_base_url(self.product_type, self.environment).to_string()
73 })
74 }
75
76 pub fn ws_public_url(&self) -> String {
78 self.ws_public_url.clone().unwrap_or_else(|| {
79 get_kraken_ws_public_url(self.product_type, self.environment).to_string()
80 })
81 }
82
83 pub fn ws_private_url(&self) -> String {
85 self.ws_private_url.clone().unwrap_or_else(|| {
86 get_kraken_ws_private_url(self.product_type, self.environment).to_string()
87 })
88 }
89}
90
91#[derive(Debug, Clone, bon::Builder)]
93#[cfg_attr(
94 feature = "python",
95 pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.kraken", from_py_object)
96)]
97#[cfg_attr(
98 feature = "python",
99 pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.kraken")
100)]
101pub struct KrakenExecClientConfig {
102 #[builder(default)]
103 pub trader_id: TraderId,
104 #[builder(default = AccountId::from("KRAKEN-001"))]
105 pub account_id: AccountId,
106 #[builder(default)]
107 pub api_key: String,
108 #[builder(default)]
109 pub api_secret: String,
110 #[builder(default = KrakenProductType::Spot)]
111 pub product_type: KrakenProductType,
112 #[builder(default = KrakenEnvironment::Mainnet)]
113 pub environment: KrakenEnvironment,
114 pub base_url: Option<String>,
115 pub ws_url: Option<String>,
116 pub proxy_url: Option<String>,
118 #[builder(default = 30)]
119 pub timeout_secs: u64,
120 #[builder(default = 30)]
121 pub heartbeat_interval_secs: u64,
122 pub max_requests_per_second: Option<u32>,
123 #[builder(default)]
124 pub transport_backend: TransportBackend,
125}
126
127impl Default for KrakenExecClientConfig {
128 fn default() -> Self {
129 Self::builder().build()
130 }
131}
132
133impl KrakenExecClientConfig {
134 pub fn http_base_url(&self) -> String {
136 self.base_url.clone().unwrap_or_else(|| {
137 get_kraken_http_base_url(self.product_type, self.environment).to_string()
138 })
139 }
140
141 pub fn ws_url(&self) -> String {
143 self.ws_url.clone().unwrap_or_else(|| {
144 get_kraken_ws_private_url(self.product_type, self.environment).to_string()
145 })
146 }
147}