use crate::web::HealthCheckConfig;
use crate::web::cors::CorsConfig;
use crate::web::https::HttpsConfig;
use ipnet::IpNet;
use serde::Deserialize;
use std::time::Duration;
use wheel_rs::serde::{duration_serde, vec_ipnet_serde, vec_serde};
use wheel_rs::urn_utils::Urn;
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct WebServerConfig {
#[serde(with = "vec_serde", default = "bind_default")]
pub bind: Vec<String>,
#[serde(default = "port_default")]
pub port: Option<u16>,
#[serde(with = "vec_serde", default = "listen_default")]
pub listen: Vec<String>,
#[serde(default = "reuse_port_default")]
pub reuse_port: bool,
#[serde(default)]
pub https: Option<HttpsConfig>,
#[serde(default)]
pub local_only_urns: Vec<Urn>,
#[serde(default)]
pub forbidden_urns: Vec<Urn>,
#[serde(default, with = "vec_ipnet_serde")]
pub ip_white_list: Vec<IpNet>,
#[serde(default, with = "vec_ipnet_serde")]
pub ip_black_list: Vec<IpNet>,
#[serde(default)]
pub log_enabled: bool,
#[serde(default)]
pub cors: Option<CorsConfig>,
#[serde(default)]
pub health_check: HealthCheckConfig,
#[serde(with = "duration_serde", default = "start_wait_timeout_default")]
pub start_wait_timeout: Duration,
#[serde(with = "duration_serde", default = "start_retry_interval_default")]
pub start_retry_interval: Duration,
#[serde(
with = "duration_serde",
default = "terminate_old_app_wait_timeout_default"
)]
pub terminate_old_app_wait_timeout: Duration,
#[serde(
with = "duration_serde",
default = "terminate_old_app_retry_interval_default"
)]
pub terminate_old_app_retry_interval: Duration,
}
impl Default for WebServerConfig {
fn default() -> Self {
Self {
bind: bind_default(),
port: port_default(),
listen: listen_default(),
reuse_port: reuse_port_default(),
https: None,
forbidden_urns: vec![],
local_only_urns: vec![],
ip_white_list: vec![],
ip_black_list: vec![],
log_enabled: false,
cors: None,
health_check: HealthCheckConfig::default(),
start_wait_timeout: start_wait_timeout_default(),
start_retry_interval: start_retry_interval_default(),
terminate_old_app_wait_timeout: terminate_old_app_wait_timeout_default(),
terminate_old_app_retry_interval: terminate_old_app_retry_interval_default(),
}
}
}
fn bind_default() -> Vec<String> {
vec![]
}
fn port_default() -> Option<u16> {
None
}
fn listen_default() -> Vec<String> {
vec![]
}
fn reuse_port_default() -> bool {
false
}
fn start_wait_timeout_default() -> Duration {
Duration::from_secs(10)
}
fn start_retry_interval_default() -> Duration {
Duration::from_millis(500)
}
fn terminate_old_app_wait_timeout_default() -> Duration {
Duration::from_secs(15)
}
fn terminate_old_app_retry_interval_default() -> Duration {
Duration::from_millis(500)
}