use super::constants::*;
#[derive(Debug, Clone, Copy)]
pub enum BackpressureStrategy {
Block,
Drop,
}
impl Default for BackpressureStrategy {
fn default() -> Self {
Self::Block
}
}
#[derive(Debug, Clone)]
pub struct BackpressureConfig {
pub permits: usize,
pub strategy: BackpressureStrategy,
}
impl Default for BackpressureConfig {
fn default() -> Self {
Self { permits: 1, strategy: BackpressureStrategy::default() }
}
}
#[derive(Debug, Clone)]
pub struct ConnectionConfig {
pub connect_timeout: u64,
pub request_timeout: u64,
pub max_decoding_message_size: usize,
}
impl Default for ConnectionConfig {
fn default() -> Self {
Self {
connect_timeout: DEFAULT_CONNECT_TIMEOUT,
request_timeout: DEFAULT_REQUEST_TIMEOUT,
max_decoding_message_size: DEFAULT_MAX_DECODING_MESSAGE_SIZE,
}
}
}
#[derive(Debug, Clone)]
pub struct StreamClientConfig {
pub connection: ConnectionConfig,
pub backpressure: BackpressureConfig,
pub enable_metrics: bool,
}
impl Default for StreamClientConfig {
fn default() -> Self {
Self {
connection: ConnectionConfig::default(),
backpressure: BackpressureConfig::default(),
enable_metrics: false,
}
}
}
impl StreamClientConfig {
pub fn high_throughput() -> Self {
Self {
connection: ConnectionConfig::default(),
backpressure: BackpressureConfig {
permits: 20000,
strategy: BackpressureStrategy::Drop,
},
enable_metrics: false,
}
}
pub fn low_latency() -> Self {
Self {
connection: ConnectionConfig::default(),
backpressure: BackpressureConfig { permits: 4000, strategy: BackpressureStrategy::Block },
enable_metrics: false,
}
}
}