use serde::Deserialize;
use serde::Serialize;
use crate::common::tls_config::TlsConfig;
mod defaults {
pub fn listen_port() -> u32 {
10911
}
pub fn bind_address() -> String {
"0.0.0.0".to_string()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServerConfig {
#[serde(default = "defaults::listen_port")]
pub listen_port: u32,
#[serde(default = "defaults::bind_address")]
pub bind_address: String,
#[serde(default, alias = "tls")]
pub tls_config: TlsConfig,
}
impl Default for ServerConfig {
fn default() -> Self {
ServerConfig {
listen_port: defaults::listen_port(),
bind_address: defaults::bind_address(),
tls_config: TlsConfig::default(),
}
}
}
impl ServerConfig {
pub fn bind_address(&self) -> String {
self.bind_address.clone()
}
pub fn listen_port(&self) -> u32 {
self.listen_port
}
pub fn tls_config(&self) -> &TlsConfig {
&self.tls_config
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_server_config() {
let config = ServerConfig::default();
assert_eq!(config.listen_port(), 10911);
assert_eq!(config.bind_address(), "0.0.0.0".to_string());
assert_eq!(
config.tls_config().server.mode,
crate::common::tls_config::TlsMode::Permissive
);
}
}