use clap::{Parser, ValueEnum};
#[derive(ValueEnum, Debug, Clone)]
pub enum AngleUnit {
Radian,
Degree,
}
#[derive(Parser, Debug)]
#[command(version, about)]
pub struct Args {
#[arg(value_enum, short, long, default_value_t = AngleUnit::Radian)]
pub angle_unit: AngleUnit,
#[arg(long, default_value_t = false)]
pub no_color: bool,
#[arg(short, long, value_parser = fix_in_range)]
pub fix: Option<usize>,
#[arg(short, long)]
pub debug: bool,
}
fn fix_in_range(s: &str) -> Result<Option<usize>, String> {
if s.is_empty() {
return Ok(None);
}
let fix = s
.parse::<usize>()
.map_err(|_| format!("{} is not a usize", s))?;
if (0..64).contains(&fix) {
Ok(Some(fix))
} else {
Err(String::from("fix must be in range 0-63"))
}
}