refactor: error context when compiling glob sources
Diff
src/custom_headers.rs | 6 +++---
src/handler.rs | 4 ++--
src/settings/mod.rs | 32 ++++++++++++++++++++------------
3 files changed, 25 insertions(+), 17 deletions(-)
@@ -1,14 +1,14 @@
use hyper::{Body, Response};
use crate::settings::HeadersOpt;
use crate::settings::Header;
pub fn append_headers(
uri: &str,
multiple_headers: &Option<Vec<HeadersOpt>>,
headers_opts_vec: &Option<Vec<Header>>,
resp: &mut Response<Body>,
) {
if let Some(multiple_headers) = multiple_headers {
if let Some(multiple_headers) = headers_opts_vec {
for headers_entry in multiple_headers.iter() {
if headers_entry.source.is_match(uri) {
@@ -3,7 +3,7 @@ use std::{future::Future, path::PathBuf, sync::Arc};
use crate::{
basic_auth, compression, control_headers, cors, custom_headers, error_page, fallback_page,
security_headers, settings::AdvancedOpts, static_files, Error, Result,
security_headers, settings::Advanced, static_files, Error, Result,
};
@@ -22,7 +22,7 @@ pub struct RequestHandlerOpts {
pub basic_auth: String,
pub advanced_opts: Option<AdvancedOpts>,
pub advanced_opts: Option<Advanced>,
}
@@ -9,21 +9,25 @@ pub mod file;
use cli::General;
pub struct AdvancedOpts {
pub headers: Option<Vec<HeadersOpt>>,
}
pub struct HeadersOpt {
pub struct Header {
pub source: GlobMatcher,
pub headers: HeaderMap,
}
pub struct Advanced {
pub headers: Option<Vec<Header>>,
}
pub struct Settings {
pub general: General,
pub advanced: Option<AdvancedOpts>,
pub advanced: Option<Advanced>,
}
impl Settings {
@@ -56,7 +60,7 @@ impl Settings {
let mut page_fallback = opts.page_fallback.to_owned();
let mut settings_advanced: Option<AdvancedOpts> = None;
let mut settings_advanced: Option<Advanced> = None;
@@ -67,7 +71,9 @@ impl Settings {
.with_context(|| "error resolving toml config file path")?;
let settings = file::Settings::read(&path_resolved)
.with_context(|| {"can not read toml config file because has invalid or unsupported format/options" })?;
.with_context(|| {
"can not read toml config file because has invalid or unsupported format/options"
})?;
config_file = Some(path_resolved);
@@ -139,17 +145,19 @@ impl Settings {
if let Some(advanced) = settings.advanced {
if let Some(multiple_headers) = advanced.headers {
let mut headers_vec: Vec<HeadersOpt> = Vec::new();
let mut headers_vec: Vec<Header> = Vec::new();
for headers_entry in multiple_headers.iter() {
let source = Glob::new(&headers_entry.source)?.compile_matcher();
headers_vec.push(HeadersOpt {
let source = Glob::new(&headers_entry.source)
.with_context(|| "can not compile glob pattern for header source")?
.compile_matcher();
headers_vec.push(Header {
source,
headers: headers_entry.headers.to_owned(),
});
}
settings_advanced = Some(AdvancedOpts {
settings_advanced = Some(Advanced {
headers: Some(headers_vec),
});
}