nautilus_system/
config.rs1use std::{fmt::Debug, time::Duration};
17
18use nautilus_common::{
19 cache::CacheConfig, enums::Environment, logging::logger::LoggerConfig,
20 msgbus::database::MessageBusConfig,
21};
22use nautilus_core::UUID4;
23use nautilus_data::engine::config::DataEngineConfig;
24use nautilus_execution::engine::config::ExecutionEngineConfig;
25use nautilus_model::identifiers::TraderId;
26#[cfg(feature = "streaming")]
27use nautilus_persistence::config::StreamingConfig;
28use nautilus_portfolio::config::PortfolioConfig;
29use nautilus_risk::engine::config::RiskEngineConfig;
30
31pub trait NautilusKernelConfig: Debug {
33 fn environment(&self) -> Environment;
35 fn trader_id(&self) -> TraderId;
37 fn load_state(&self) -> bool;
39 fn save_state(&self) -> bool;
41 fn logging(&self) -> LoggerConfig;
43 fn instance_id(&self) -> Option<UUID4>;
45 fn timeout_connection(&self) -> Duration;
47 fn timeout_reconciliation(&self) -> Duration;
49 fn timeout_portfolio(&self) -> Duration;
51 fn timeout_disconnection(&self) -> Duration;
53 fn delay_post_stop(&self) -> Duration;
55 fn timeout_shutdown(&self) -> Duration;
57 fn cache(&self) -> Option<CacheConfig>;
59 fn msgbus(&self) -> Option<MessageBusConfig>;
61 fn data_engine(&self) -> Option<DataEngineConfig>;
63 fn risk_engine(&self) -> Option<RiskEngineConfig>;
65 fn exec_engine(&self) -> Option<ExecutionEngineConfig>;
67 fn portfolio(&self) -> Option<PortfolioConfig>;
69 #[cfg(feature = "streaming")]
71 fn streaming(&self) -> Option<StreamingConfig>;
72}
73
74#[derive(Debug, Clone)]
76pub struct KernelConfig {
77 pub environment: Environment,
79 pub trader_id: TraderId,
81 pub load_state: bool,
83 pub save_state: bool,
85 pub logging: LoggerConfig,
87 pub instance_id: Option<UUID4>,
89 pub timeout_connection: Duration,
91 pub timeout_reconciliation: Duration,
93 pub timeout_portfolio: Duration,
95 pub timeout_disconnection: Duration,
97 pub delay_post_stop: Duration,
99 pub timeout_shutdown: Duration,
101 pub cache: Option<CacheConfig>,
103 pub msgbus: Option<MessageBusConfig>,
105 pub data_engine: Option<DataEngineConfig>,
107 pub risk_engine: Option<RiskEngineConfig>,
109 pub exec_engine: Option<ExecutionEngineConfig>,
111 pub portfolio: Option<PortfolioConfig>,
113 #[cfg(feature = "streaming")]
115 pub streaming: Option<StreamingConfig>,
116}
117
118impl NautilusKernelConfig for KernelConfig {
119 fn environment(&self) -> Environment {
120 self.environment
121 }
122
123 fn trader_id(&self) -> TraderId {
124 self.trader_id
125 }
126
127 fn load_state(&self) -> bool {
128 self.load_state
129 }
130
131 fn save_state(&self) -> bool {
132 self.save_state
133 }
134
135 fn logging(&self) -> LoggerConfig {
136 self.logging.clone()
137 }
138
139 fn instance_id(&self) -> Option<UUID4> {
140 self.instance_id
141 }
142
143 fn timeout_connection(&self) -> Duration {
144 self.timeout_connection
145 }
146
147 fn timeout_reconciliation(&self) -> Duration {
148 self.timeout_reconciliation
149 }
150
151 fn timeout_portfolio(&self) -> Duration {
152 self.timeout_portfolio
153 }
154
155 fn timeout_disconnection(&self) -> Duration {
156 self.timeout_disconnection
157 }
158
159 fn delay_post_stop(&self) -> Duration {
160 self.delay_post_stop
161 }
162
163 fn timeout_shutdown(&self) -> Duration {
164 self.timeout_shutdown
165 }
166
167 fn cache(&self) -> Option<CacheConfig> {
168 self.cache.clone()
169 }
170
171 fn msgbus(&self) -> Option<MessageBusConfig> {
172 self.msgbus.clone()
173 }
174
175 fn data_engine(&self) -> Option<DataEngineConfig> {
176 self.data_engine.clone()
177 }
178
179 fn risk_engine(&self) -> Option<RiskEngineConfig> {
180 self.risk_engine.clone()
181 }
182
183 fn exec_engine(&self) -> Option<ExecutionEngineConfig> {
184 self.exec_engine.clone()
185 }
186
187 fn portfolio(&self) -> Option<PortfolioConfig> {
188 self.portfolio.clone()
189 }
190
191 #[cfg(feature = "streaming")]
192 fn streaming(&self) -> Option<StreamingConfig> {
193 self.streaming.clone()
194 }
195}
196
197impl Default for KernelConfig {
198 fn default() -> Self {
199 Self {
200 environment: Environment::Backtest,
201 trader_id: TraderId::default(),
202 load_state: false,
203 save_state: false,
204 logging: LoggerConfig::default(),
205 instance_id: None,
206 timeout_connection: Duration::from_secs(60),
207 timeout_reconciliation: Duration::from_secs(30),
208 timeout_portfolio: Duration::from_secs(10),
209 timeout_disconnection: Duration::from_secs(10),
210 delay_post_stop: Duration::from_secs(10),
211 timeout_shutdown: Duration::from_secs(5),
212 cache: None,
213 msgbus: None,
214 data_engine: None,
215 risk_engine: None,
216 exec_engine: None,
217 portfolio: None,
218 #[cfg(feature = "streaming")]
219 streaming: None,
220 }
221 }
222}