Files
uutils-args/examples/deprecated.rs
T
2023-12-19 11:45:43 +01:00

51 lines
1.1 KiB
Rust

use uutils_args::{Arguments, Options};
fn parse_minus(s: &str) -> Option<&str> {
let num = s.strip_prefix('-')?;
if num.chars().all(|c| c.is_ascii_digit()) {
Some(num)
} else {
None
}
}
fn parse_plus(s: &str) -> Option<&str> {
let num = s.strip_prefix('+')?;
let num2 = num.strip_prefix('-').unwrap_or(num);
if num2.chars().all(|c| c.is_ascii_digit()) {
Some(num)
} else {
None
}
}
#[derive(Arguments)]
enum Arg {
#[arg(parse_minus)]
Min(usize),
#[arg(parse_plus)]
Plus(isize),
}
#[derive(Default)]
struct Settings {
n1: usize,
n2: isize,
}
impl Options<Arg> for Settings {
fn apply(&mut self, arg: Arg) {
match arg {
Arg::Min(n) => self.n1 = n,
Arg::Plus(n) => self.n2 = n,
}
}
}
fn main() {
assert_eq!(Settings::default().parse(["test", "-10"]).0.n1, 10usize);
assert!(Settings::default().try_parse(["test", "--10"]).is_err());
assert_eq!(Settings::default().parse(["test", "+10"]).0.n2, 10isize);
assert_eq!(Settings::default().parse(["test", "+-10"]).0.n2, -10isize);
}