use anyhow::Result;
use std::path::PathBuf;
use structopt::StructOpt;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::str::FromStr;
use std::sync::Arc;
#[derive(Clone, Debug, Default, Deserialize, StructOpt)]
pub struct ConfigOptsBuild {
#[structopt(parse(from_os_str))]
pub target: Option<PathBuf>,
#[structopt(long)]
#[serde(default)]
pub release: bool,
#[structopt(short, long, parse(from_os_str))]
pub dist: Option<PathBuf>,
#[structopt(long, parse(from_str=parse_public_url))]
pub public_url: Option<String>,
#[structopt(skip)]
#[serde(default)]
pub pattern_script: Option<String>,
#[structopt(skip)]
#[serde(default)]
pub pattern_preload: Option<String>,
#[structopt(skip)]
#[serde(default)]
pub pattern_params: Option<HashMap<String, String>>,
}
pub fn parse_public_url(val: &str) -> String {
let prefix = if !val.starts_with('/') { "/" } else { "" };
let suffix = if !val.ends_with('/') { "/" } else { "" };
format!("{}{}{}", prefix, val, suffix)
}