use anyhow::Result;
use argh::FromArgs;
#[derive(Clone, Copy, Debug)]
pub enum CompressionMode {
Cached,
Static,
None,
}
impl std::str::FromStr for CompressionMode {
type Err = String;
fn from_str(value: &str) -> Result<Self, Self::Err> {
match value {
"cached" => Ok(Self::Cached),
"static" => Ok(Self::Static),
"none" => Ok(Self::None),
_ => Err(format!(
"invalid value '{value}', expected one of: cached, static, none"
)),
}
}
}
#[derive(FromArgs, Debug)]
pub struct Config {
#[argh(positional)]
pub directory: String,
#[argh(option)]
pub strip_prefix: Option<String>,
#[argh(option, default = "CompressionMode::None")]
pub compression: CompressionMode,
#[argh(option)]
pub not_found_path: Option<String>,
}
impl Config {
pub fn from_env() -> Self {
argh::from_env()
}
pub fn compression_strategy(&self) -> serdir::compression::CompressionStrategy {
match self.compression {
CompressionMode::Static => {
serdir::compression::CompressionStrategy::static_compression()
}
CompressionMode::None => serdir::compression::CompressionStrategy::none(),
CompressionMode::Cached => {
#[cfg(feature = "runtime-compression")]
{
serdir::compression::CompressionStrategy::cached_compression()
}
#[cfg(not(feature = "runtime-compression"))]
{
panic!("compression mode 'cached' requires the 'runtime-compression' feature");
}
}
}
}
}
#[allow(dead_code)]
fn main() {}