#[derive(Clone, Copy)]
pub struct Config {
#[cfg(feature = "__rt_native__")]
pub request_bufsize: usize,
#[cfg(feature = "__rt_native__")]
pub request_payload_limit: usize,
#[cfg(feature = "__rt_native__")]
pub keepalive_timeout: u64,
#[cfg(feature = "__rt_native__")]
#[cfg(feature = "ws")]
#[cfg_attr(docsrs, doc(cfg(feature = "ws")))]
pub websocket_timeout: u64,
#[doc(hidden)]
pub __private__: (),
}
impl Default for Config {
fn default() -> Self {
Self {
#[cfg(feature = "__rt_native__")]
request_bufsize: 1 << 11,
#[cfg(feature = "__rt_native__")]
request_payload_limit: 1 << 32,
#[cfg(feature = "__rt_native__")]
keepalive_timeout: 30,
#[cfg(feature = "__rt_native__")]
#[cfg(feature = "ws")]
websocket_timeout: 60 * 60,
__private__: (),
}
}
}
impl Config {
pub fn new() -> Self {
#[allow(unused)]
fn parse_env<T: std::str::FromStr>(key: &str) -> Option<T> {
std::env::var(key).ok().map(|val| {
val.parse().unwrap_or_else(|err| {
panic!(
"failed to parse environment variable `{key}` as {}: `{val}`",
std::any::type_name::<T>(),
)
})
})
}
Self {
#[cfg(feature = "__rt_native__")]
request_bufsize: parse_env("OHKAMI_REQUEST_BUFSIZE")
.unwrap_or(Self::default().request_bufsize),
#[cfg(feature = "__rt_native__")]
request_payload_limit: parse_env("OHKAMI_REQUEST_PAYLOAD_LIMIT")
.unwrap_or(Self::default().request_payload_limit),
#[cfg(feature = "__rt_native__")]
keepalive_timeout: parse_env("OHKAMI_KEEPALIVE_TIMEOUT")
.unwrap_or(Self::default().keepalive_timeout),
#[cfg(feature = "__rt_native__")]
#[cfg(feature = "ws")]
websocket_timeout: parse_env("OHKAMI_WEBSOCKET_TIMEOUT")
.unwrap_or(Self::default().websocket_timeout),
__private__: (),
}
}
}