From eb540e554f0997a95f0068ed750e6e8f81a47938 Mon Sep 17 00:00:00 2001 From: Jose Quintana Date: Wed, 27 Apr 2022 00:42:47 +0200 Subject: [PATCH] chore: optional `[general]` and `[advanced]` sections --- src/settings/file.rs | 4 ++-- src/settings/mod.rs | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------- tests/toml/config.toml | 36 ++++++++++++++++++------------------ 3 files changed, 86 insertions(+), 84 deletions(-) diff --git a/src/settings/file.rs b/src/settings/file.rs index 27d0f6e..48f1dee 100644 --- a/src/settings/file.rs +++ b/src/settings/file.rs @@ -102,8 +102,8 @@ pub struct General { #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "kebab-case")] pub struct Settings { - pub general: General, - pub advanced: Advanced, + pub general: Option, + pub advanced: Option, } impl Settings { diff --git a/src/settings/mod.rs b/src/settings/mod.rs index 13944b9..24b6827 100644 --- a/src/settings/mod.rs +++ b/src/settings/mod.rs @@ -56,76 +56,78 @@ impl Settings { .canonicalize() .with_context(|| "error resolving toml config file path")?; - let file::Settings{ general, advanced } = file::Settings::read(&path_resolved) + let settings = file::Settings::read(&path_resolved) .with_context(|| {"can not read toml config file because has invalid or unsupported format/options" })?; config_file = Some(path_resolved); - if let Some(ref v) = general.host { - host = v.to_owned() - } - if let Some(v) = general.port { - port = v - } - if let Some(ref v) = general.root { - root = v.to_owned() - } - if let Some(ref v) = general.log_level { - log_level = v.name().to_lowercase(); - } - if let Some(v) = general.cache_control_headers { - cache_control_headers = v - } - if let Some(v) = general.compression { - compression = v - } - if let Some(ref v) = general.page404 { - page404 = v.to_owned() - } - if let Some(ref v) = general.page50x { - page50x = v.to_owned() - } - if let Some(v) = general.http2 { - http2 = v - } - if let Some(ref v) = general.http2_tls_cert { - http2_tls_cert = v.to_owned() - } - if let Some(ref v) = general.http2_tls_key { - http2_tls_key = v.to_owned() - } - if let Some(v) = general.security_headers { - security_headers = v - } - if let Some(ref v) = general.cors_allow_origins { - cors_allow_origins = v.to_owned() - } - if let Some(ref v) = general.cors_allow_headers { - cors_allow_headers = v.to_owned() - } - if let Some(v) = general.directory_listing { - directory_listing = v - } - if let Some(v) = general.directory_listing_order { - directory_listing_order = v - } - if let Some(ref v) = general.basic_auth { - basic_auth = v.to_owned() - } - if let Some(v) = general.fd { - fd = Some(v) - } - if let Some(v) = general.threads_multiplier { - threads_multiplier = v - } - if let Some(v) = general.grace_period { - grace_period = v - } - if let Some(ref v) = general.page_fallback { - page_fallback = v.to_owned() + if let Some(general) = settings.general { + if let Some(ref v) = general.host { + host = v.to_owned() + } + if let Some(v) = general.port { + port = v + } + if let Some(ref v) = general.root { + root = v.to_owned() + } + if let Some(ref v) = general.log_level { + log_level = v.name().to_lowercase(); + } + if let Some(v) = general.cache_control_headers { + cache_control_headers = v + } + if let Some(v) = general.compression { + compression = v + } + if let Some(ref v) = general.page404 { + page404 = v.to_owned() + } + if let Some(ref v) = general.page50x { + page50x = v.to_owned() + } + if let Some(v) = general.http2 { + http2 = v + } + if let Some(ref v) = general.http2_tls_cert { + http2_tls_cert = v.to_owned() + } + if let Some(ref v) = general.http2_tls_key { + http2_tls_key = v.to_owned() + } + if let Some(v) = general.security_headers { + security_headers = v + } + if let Some(ref v) = general.cors_allow_origins { + cors_allow_origins = v.to_owned() + } + if let Some(ref v) = general.cors_allow_headers { + cors_allow_headers = v.to_owned() + } + if let Some(v) = general.directory_listing { + directory_listing = v + } + if let Some(v) = general.directory_listing_order { + directory_listing_order = v + } + if let Some(ref v) = general.basic_auth { + basic_auth = v.to_owned() + } + if let Some(v) = general.fd { + fd = Some(v) + } + if let Some(v) = general.threads_multiplier { + threads_multiplier = v + } + if let Some(v) = general.grace_period { + grace_period = v + } + if let Some(ref v) = general.page_fallback { + page_fallback = v.to_owned() + } } - settings_advanced = Some(advanced) + settings_advanced = settings.advanced } } diff --git a/tests/toml/config.toml b/tests/toml/config.toml index 3eb3915..71afae2 100644 --- a/tests/toml/config.toml +++ b/tests/toml/config.toml @@ -1,49 +1,49 @@ [general] #### Address & Root dir -# host = "::" -# port = 80 -# root = "./public" +host = "::" +port = 8087 +root = "docker/public" #### Logging log-level = "debug" -# Cache Control headers -# cache-control-headers = true +#### Cache Control headers +cache-control-headers = true #### Auto Compression -# compression = true +compression = true #### Error pages -# page404 = "404.html" -# page50x = "50x.html" +page404 = "docker/public/404.html" +page50x = "docker/public/50x.html" #### HTTP/2 + TLS -# http2 = true -# http2-tls-cert = "" -# http2-tls-key = "" +http2 = false +http2-tls-cert = "" +http2-tls-key = "" #### CORS & Security headers -# security-headers = true -# cors-allow-origins = "" +security-headers = true +cors-allow-origins = "" #### Directoy listing -# directory-listing = false +directory-listing = false #### Basich Authentication -# basic-auth = "" +basic-auth = "" #### File descriptor binding # fd = "" #### Worker threads -# threads-multiplier = 1 +threads-multiplier = 1 #### Grace period after a graceful shutdown -# grace-period = 0 +grace-period = 0 #### Page fallback for 404s -# page-fallback = "" +page-fallback = "" [advanced] -- libgit2 1.7.2