use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "iconsmaker", version, about, long_about = None)]
pub struct Cli {
#[arg(short, long)]
pub config: Option<String>,
#[arg(short = 'i', long = "input", value_name = "SVG")]
pub input: Option<String>,
#[arg(value_name = "SVG")]
pub input_positional: Option<String>,
#[arg(short = 'o', long = "output", value_name = "DIR")]
pub output: Option<String>,
#[arg(long, value_name = "SVG")]
pub symbolic: Option<String>,
#[arg(long)]
pub id: Option<String>,
#[arg(long)]
pub name: Option<String>,
#[arg(long)]
pub exec: Option<String>,
#[arg(long)]
pub generic_name: Option<String>,
#[arg(long)]
pub comment: Option<String>,
#[arg(long)]
pub description: Option<String>,
#[arg(long, value_delimiter = ',')]
pub categories: Option<Vec<String>>,
#[arg(long, value_delimiter = ',')]
pub keywords: Option<Vec<String>>,
#[arg(long)]
pub startup_wm_class: Option<String>,
#[arg(long, value_delimiter = ',')]
pub mime_types: Option<Vec<String>>,
#[arg(long)]
pub license: Option<String>,
#[arg(long)]
pub metadata_license: Option<String>,
#[arg(long)]
pub homepage_url: Option<String>,
#[arg(long)]
pub developer_name: Option<String>,
#[arg(long)]
pub macos: bool,
#[arg(long)]
pub windows: bool,
#[arg(long)]
pub linux: bool,
#[arg(long)]
pub all: bool,
#[arg(long)]
pub snap: bool,
#[arg(long)]
pub flatpak: bool,
#[arg(long)]
pub appimage: bool,
#[arg(long)]
pub squircle_power: Option<f32>,
#[arg(long = "squircle-depth", overrides_with = "no_squircle_depth")]
pub squircle_depth: bool,
#[arg(long = "no-squircle-depth")]
pub no_squircle_depth: bool,
#[arg(long)]
pub gloss_strength: Option<f32>,
#[arg(long)]
pub depth_blur: Option<f32>,
#[arg(long, value_delimiter = ',')]
pub hicolor_sizes: Option<Vec<u32>>,
#[arg(long)]
pub strict: bool,
#[arg(short, long)]
pub verbose: bool,
#[arg(long, hide = true)]
pub print_man_page: bool,
}
impl Cli {
pub fn resolve_input(&self) -> anyhow::Result<Option<String>> {
match (&self.input, &self.input_positional) {
(Some(_), Some(_)) => anyhow::bail!(
"the input SVG was given both positionally and with --input; pass it only once"
),
(Some(s), None) | (None, Some(s)) => Ok(Some(s.clone())),
(None, None) => Ok(None),
}
}
pub fn depth_override(&self) -> Option<bool> {
if self.squircle_depth {
Some(true)
} else if self.no_squircle_depth {
Some(false)
} else {
None
}
}
pub fn controls_selection(&self) -> bool {
self.all
|| self.macos
|| self.windows
|| self.linux
|| self.snap
|| self.flatpak
|| self.appimage
}
}