use std::sync::RwLock;
use std::time::Duration;
use once_cell::sync::Lazy;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize), serde(default))]
pub struct ClientConfig {
pub connect_timeout: Duration,
pub receive_timeout: Duration,
}
impl Default for ClientConfig {
fn default() -> Self {
Self {
connect_timeout: Duration::from_secs(10),
receive_timeout: Duration::from_secs(30),
}
}
}
static CONFIG: Lazy<RwLock<ClientConfig>> = Lazy::new(|| RwLock::new(ClientConfig::default()));
#[inline]
pub fn set_config(config: ClientConfig) {
let mut c = CONFIG.write().unwrap();
*c = config;
}
#[inline]
pub fn get_config() -> ClientConfig {
let c = CONFIG.read().unwrap();
(*c).clone()
}
#[inline]
pub fn get_connect_timeout() -> Duration {
let c = CONFIG.read().unwrap();
(*c).connect_timeout
}
#[inline]
pub fn get_receive_timeout() -> Duration {
let c = CONFIG.read().unwrap();
(*c).receive_timeout
}