36 lines
901 B
Rust
36 lines
901 B
Rust
use enve::SepVec;
|
|
|
|
type MinusVec<T> = SepVec<T, '-'>;
|
|
type PlusVec<T> = SepVec<T, '+'>;
|
|
type MulVec<T> = SepVec<T, '*'>;
|
|
|
|
const HELP_MESSAGE: &str = "
|
|
USAGE:
|
|
E=10+10*2+4 cargo run --example calc --all-features
|
|
";
|
|
|
|
fn main() -> Result<(), enve::Error> {
|
|
let res: f32 = enve::get::<PlusVec<MinusVec<MulVec<f32>>>>("E")
|
|
.map_err(|err| {
|
|
match err {
|
|
enve::Error::NotPresent => eprintln!("The expression was not found"),
|
|
rest => eprintln!("ERROR: {}", rest),
|
|
}
|
|
|
|
eprintln!("{}", HELP_MESSAGE);
|
|
std::process::exit(0);
|
|
})
|
|
.unwrap()
|
|
.iter()
|
|
.map(|p| {
|
|
p.iter()
|
|
.map(|m| m.iter().product::<f32>())
|
|
.reduce(|acc, v| acc - v)
|
|
.unwrap_or_default()
|
|
})
|
|
.sum::<f32>();
|
|
|
|
println!("result: {}", res);
|
|
|
|
Ok(())
|
|
}
|