use crate::config::env::env;
#[derive(Debug, Clone)]
pub struct ServerConfig {
pub host: String,
pub port: u16,
pub max_body_size: usize,
}
impl ServerConfig {
pub fn from_env() -> Self {
Self {
host: env("SERVER_HOST", "127.0.0.1".to_string()),
port: env("SERVER_PORT", 8080),
max_body_size: env("SERVER_MAX_BODY_SIZE", 10 * 1024 * 1024), }
}
pub fn builder() -> ServerConfigBuilder {
ServerConfigBuilder::default()
}
}
impl Default for ServerConfig {
fn default() -> Self {
Self::from_env()
}
}
#[derive(Default)]
pub struct ServerConfigBuilder {
host: Option<String>,
port: Option<u16>,
max_body_size: Option<usize>,
}
impl ServerConfigBuilder {
pub fn host(mut self, host: impl Into<String>) -> Self {
self.host = Some(host.into());
self
}
pub fn port(mut self, port: u16) -> Self {
self.port = Some(port);
self
}
pub fn max_body_size(mut self, size: usize) -> Self {
self.max_body_size = Some(size);
self
}
pub fn build(self) -> ServerConfig {
let default = ServerConfig::from_env();
ServerConfig {
host: self.host.unwrap_or(default.host),
port: self.port.unwrap_or(default.port),
max_body_size: self.max_body_size.unwrap_or(default.max_body_size),
}
}
}