use clap::Parser;
use std::process;
use crate::util::is_empty_root_url;
#[derive(Parser, Debug)]
#[clap(version)]
pub struct Args {
#[clap(value_parser, value_name = "PATH")]
pub serve_path: Option<String>,
#[clap(
short = 'H',
long,
value_parser,
value_name = "IP",
default_value = "0.0.0.0"
)]
pub host: String,
#[clap(short, long, value_parser, default_value_t = 8080)]
pub port: u16,
#[clap(short, long, value_parser, default_value_t = false)]
pub gzip: bool,
#[clap(short, long, value_parser, default_value_t = false)]
pub open: bool,
#[clap(short = '5', long, value_parser, default_value_t = false)]
pub html5: bool,
#[clap(
short,
long,
value_parser,
value_name = "FILE",
default_value = "index.html"
)]
pub index: String,
#[clap(short, long, value_parser, default_value_t = 0)]
pub delay: u64,
#[clap(short, long, value_parser, default_value_t = false)]
pub cache_in_memory: bool,
#[clap(short, long, value_parser, value_name = "REGEXP")]
pub regex_immutable: Option<regex::Regex>,
#[clap(short, long, value_parser, value_name = "DIRECTORY")]
pub log_dir: Option<String>,
#[clap(short, long, value_parser)]
pub base_href: Option<String>,
#[clap(short = 'A', long, value_parser, default_value_t = false)]
pub no_access: bool,
#[clap(short = 'C', long, value_parser, default_value_t = false)]
pub no_color: bool,
#[clap(short, long, value_name = "ACTION")]
pub signal: Option<String>,
}
pub fn get_args() -> Args {
let mut args = Args::parse();
if args.log_dir.is_some() || args.no_color {
colored::control::set_override(false);
}
if args.regex_immutable.is_some() && !args.cache_in_memory {
eprintln!("--regex-immutable only effect with --cache-in-memory");
process::exit(-1);
}
if args.signal.is_none() && args.serve_path.is_none() {
eprintln!("error: missing serve path\n\nUSAGE:\n lightstatic [OPTIONS] <PATH>\n\nFor more information try --help\n");
process::exit(-1);
}
if let Some(base_href) = &mut args.base_href {
if is_empty_root_url(base_href.trim()) {
args.base_href.take();
} else {
if !base_href.ends_with('/') {
base_href.push('/');
}
if !base_href.starts_with('/') {
let mut bh = "/".to_string();
bh.push_str(base_href);
args.base_href.replace(bh);
}
}
}
args
}