use serde::{Deserialize, Serialize};
use crate::{enums::SerializationEncoding, msgbus::database::DatabaseConfig};
#[cfg_attr(
feature = "python",
pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.common", from_py_object)
)]
#[cfg_attr(
feature = "python",
pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.common")
)]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, bon::Builder)]
#[serde(default, deny_unknown_fields)]
pub struct CacheConfig {
pub database: Option<DatabaseConfig>,
#[builder(default = SerializationEncoding::MsgPack)]
pub encoding: SerializationEncoding,
#[builder(default)]
pub timestamps_as_iso8601: bool,
pub buffer_interval_ms: Option<usize>,
pub bulk_read_batch_size: Option<usize>,
#[builder(default = true)]
pub use_trader_prefix: bool,
#[builder(default)]
pub use_instance_id: bool,
#[builder(default)]
pub flush_on_start: bool,
#[builder(default = true)]
pub drop_instruments_on_reset: bool,
#[builder(default = 10_000)]
pub tick_capacity: usize,
#[builder(default = 10_000)]
pub bar_capacity: usize,
#[builder(default = true)]
pub persist_account_events: bool,
#[builder(default)]
pub save_market_data: bool,
}
impl Default for CacheConfig {
fn default() -> Self {
Self::builder().build()
}
}
impl CacheConfig {
#[expect(clippy::too_many_arguments)]
#[must_use]
pub const fn new(
database: Option<DatabaseConfig>,
encoding: SerializationEncoding,
timestamps_as_iso8601: bool,
buffer_interval_ms: Option<usize>,
bulk_read_batch_size: Option<usize>,
use_trader_prefix: bool,
use_instance_id: bool,
flush_on_start: bool,
drop_instruments_on_reset: bool,
tick_capacity: usize,
bar_capacity: usize,
persist_account_events: bool,
save_market_data: bool,
) -> Self {
Self {
database,
encoding,
timestamps_as_iso8601,
buffer_interval_ms,
bulk_read_batch_size,
use_trader_prefix,
use_instance_id,
flush_on_start,
drop_instruments_on_reset,
tick_capacity,
bar_capacity,
persist_account_events,
save_market_data,
}
}
}