clean_cli is in programm command line parser using for repl.
```rust let cli = Cli::<()>::builder() .command(CommandBuilder::withname("cmd") .usevalue(ArgType::Bool) .parameter(Parameter::withname("bool") .valuetype(ArgType::Bool) .alias("b") .alias("bb") ) .parameter(Parameter::withname("int") .valuetype(ArgType::Int) .alias("i") .alias("ii") ) .parameter(Parameter::withname("float") .valuetype(ArgType::Float) .alias("f") .alias("ff") ) .parameter(Parameter::withname("string") .valuetype(ArgType::String) .alias("s") .alias("ss") ) .handler(|ctx| { let mut expectparams = HashSet::new(); expectparams.insert("bool"); expectparams.insert("int"); expectparams.insert("float"); expectparams.insert("string"); expectparams.insert("value");
if let Some(arg) = &ctx.units.last().unwrap().value() {
if let ArgValue::Bool(v) = arg {
assert!(!*v);
expect_params.remove("value");
}
}
if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("bool") {
assert_eq!("bool", param.name.as_str());
if let ArgValue::Bool(v) = arg {
assert!(*v);
expect_params.remove("bool");
}
}
if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("int") {
assert_eq!("int", param.name.as_str());
if let ArgValue::Int(v) = arg {
assert_eq!(*v, 42_i64);
expect_params.remove("int");
}
}
if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("float") {
assert_eq!("float", param.name.as_str());
if let ArgValue::Float(v) = arg {
assert_eq!(*v, 4.2_f64);
expect_params.remove("float");
}
}
if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("string") {
assert_eq!("string", param.name.as_str());
if let ArgValue::String(v) = arg {
assert_eq!(*v, "bla");
expect_params.remove("string");
}
}
if !expect_params.is_empty() {
panic!("parameters not found: {:?}", expect_params)
};
})
)
.build();
match cli.exec_line("cmd false --bool --int 42 --float 4.2 --string bla") {
Ok(_) => {}
Err(err) => panic!("{:?}", err)
}
```
Send all questions and wishes to bugrazoid@yandex.ru