use serde::Deserialize;
use std::path::PathBuf;
use structopt::StructOpt;
use crate::compression_algorithm::CompressionAlgorithm;
#[derive(Debug, Default, StructOpt)]
pub struct StaticFilesOpt {
#[structopt(short, long, parse(from_os_str))]
pub root: Option<PathBuf>,
#[structopt(long)]
pub canonicalize_uri: Option<bool>,
#[structopt(long)]
pub index_file: Option<Vec<String>>,
#[structopt(long)]
pub page_404: Option<String>,
#[structopt(long)]
pub precompressed: Option<Vec<CompressionAlgorithm>>,
}
#[derive(Debug, PartialEq, Eq, Deserialize)]
#[serde(default)]
pub struct StaticFilesConf {
pub root: Option<PathBuf>,
pub canonicalize_uri: bool,
pub redirect_prefix: Option<String>,
pub index_file: Vec<String>,
pub page_404: Option<String>,
pub precompressed: Vec<CompressionAlgorithm>,
}
impl StaticFilesConf {
pub fn merge_with_opt(&mut self, opt: StaticFilesOpt) {
if opt.root.is_some() {
self.root = opt.root;
}
if let Some(canonicalize_uri) = opt.canonicalize_uri {
self.canonicalize_uri = canonicalize_uri;
}
if let Some(index_file) = opt.index_file {
self.index_file = index_file;
}
if opt.page_404.is_some() {
self.page_404 = opt.page_404;
}
if let Some(precompressed) = opt.precompressed {
self.precompressed = precompressed;
}
}
}
impl Default for StaticFilesConf {
fn default() -> Self {
Self {
root: None,
canonicalize_uri: true,
redirect_prefix: None,
index_file: vec!["index.html".into()],
page_404: None,
precompressed: Vec::new(),
}
}
}