use std::fmt::Debug;
use tokio_tungstenite::tungstenite::stream::Mode;
use super::types::TcpMessageHandler;
#[derive(bon::Builder)]
#[cfg_attr(
feature = "python",
pyo3::pyclass(module = "nautilus_trader.core.nautilus_pyo3.network", from_py_object)
)]
#[cfg_attr(
feature = "python",
pyo3_stub_gen::derive::gen_stub_pyclass(module = "nautilus_trader.network")
)]
pub struct SocketConfig {
pub url: String,
pub mode: Mode,
pub suffix: Vec<u8>,
pub message_handler: Option<TcpMessageHandler>,
pub heartbeat: Option<(u64, Vec<u8>)>,
pub reconnect_timeout_ms: Option<u64>,
pub reconnect_delay_initial_ms: Option<u64>,
pub reconnect_delay_max_ms: Option<u64>,
pub reconnect_backoff_factor: Option<f64>,
pub reconnect_jitter_ms: Option<u64>,
pub connection_max_retries: Option<u32>,
pub reconnect_max_attempts: Option<u32>,
pub idle_timeout_ms: Option<u64>,
pub certs_dir: Option<String>,
}
impl Debug for SocketConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct(stringify!(SocketConfig))
.field("url", &self.url)
.field("mode", &self.mode)
.field("suffix", &self.suffix)
.field(
"message_handler",
&self.message_handler.as_ref().map(|_| "<function>"),
)
.field("heartbeat", &self.heartbeat)
.field("reconnect_timeout_ms", &self.reconnect_timeout_ms)
.field(
"reconnect_delay_initial_ms",
&self.reconnect_delay_initial_ms,
)
.field("reconnect_delay_max_ms", &self.reconnect_delay_max_ms)
.field("reconnect_backoff_factor", &self.reconnect_backoff_factor)
.field("reconnect_jitter_ms", &self.reconnect_jitter_ms)
.field("connection_max_retries", &self.connection_max_retries)
.field("reconnect_max_attempts", &self.reconnect_max_attempts)
.field("idle_timeout_ms", &self.idle_timeout_ms)
.field("certs_dir", &self.certs_dir)
.finish()
}
}
impl Clone for SocketConfig {
fn clone(&self) -> Self {
Self {
url: self.url.clone(),
mode: self.mode,
suffix: self.suffix.clone(),
message_handler: self.message_handler.clone(),
heartbeat: self.heartbeat.clone(),
reconnect_timeout_ms: self.reconnect_timeout_ms,
reconnect_delay_initial_ms: self.reconnect_delay_initial_ms,
reconnect_delay_max_ms: self.reconnect_delay_max_ms,
reconnect_backoff_factor: self.reconnect_backoff_factor,
reconnect_jitter_ms: self.reconnect_jitter_ms,
connection_max_retries: self.connection_max_retries,
reconnect_max_attempts: self.reconnect_max_attempts,
idle_timeout_ms: self.idle_timeout_ms,
certs_dir: self.certs_dir.clone(),
}
}
}