2个不稳定版本
使用旧的Rust 2015
0.2.1 | 2016年12月22日 |
---|---|
0.1.0 | 2016年8月10日 |
在#callback中排名第63
34KB
461 行
Yaccas
Yet Another Callback-orientated Command line pArSer是...好吧,又一个命令行解析器。
特性或“又一个?!你真的不够有创意,对吧?!”
的确,现在有很多用Rust编写的命令行解析器...但如果它和其他的都一样,我会写这个吗?让我来说服你:你为什么要选择这个?
- 平滑地集成到现有项目中
- 极轻量级,简单 & 快速
- 无依赖:只有纯Rust!
- 没有处理器,引用或其他垃圾:只是现代回调!
- 适用于每个系统:接受UNIX的语法,就像Windows的语法一样。
- 完全文档化,许多(doc-)测试以检查正确性
文档
示例
使用Yaccas有两种方式:首选的回调方法或参数方法。
#[macro_use]
extern crate yaccas;
use yaccas::arguments::{Argument, Command, Flag, Value};
use yaccas::parser::{Parser, FreeArgumentSupport, Result};
fn method_with_callback() {
let mut will_be_true_if_flag_is_set = false;
let mut will_be_42_as_everytime = 0u32;
{ // It's time for some magic ...
// There a three types of arguments
let flag = Flag::default();
let value = Value::new::<u32>();
let command = Command::new(|| Some("A fancy name for abort"));
// Registers the arguments to a parser.
// All callbacks will only be executed if parsing was successful!
let mut parser = Parser::default();
parser.register(&["option", "o1", "o2"], Argument::with_callback(flag, | flag | {
// Flags are options which may occur 0 - x times.
will_be_true_if_flag_is_set = flag.is_activated();
}));
parser.register(&["value", "v"], Argument::with_callback(value, | value | {
// Values are command line argument-value pairs of a specific type.
will_be_42_as_everytime = value.get_value::<u32>().expect("The answer for everything is 42!");
}));
parser.register(&["abort"], Argument::with_callback(command, | _command | {
// Commands may or may not abort the execution of parsing, i.e. for "help".
// This callback is a fallback: It is only called if the process was not aborted!
}));
match parser.parse(default_scanner!()) {
Result::Success(free_arguments) => { /* ... */ },
Result::Aborted("A fancy name for abort") => { /* ... */ },
_ => { /* ... */ }
}
}
// Do something with "will_be_true_if_flag_is_set" or "will_be_42_as_everytime" here ...
}
fn method_without_callback() {
let mut flag = Flag::default();
let mut value = Value::new::<u32>();
let mut command = Command::new(|| Some("A fancy name for abort"));
{ // It's time for some magic ...
// Registers the arguments to a parser.
let mut parser = Parser::default();
parser.register(&["option", "o1", "o2"], flag);
parser.register(&["value", "v"], value);
parser.register(&["abort"], command);
match parser.parse(default_scanner!()) {
Result::Success(free_arguments) => { /* ... */ },
Result::Aborted("A fancy name for abort") => { /* Abort execution */ },
_ => { /* Abort execution */ }
}
}
// Access arguments directly here to access i.e. their values.
}
##作者 Christopher Gundler ([email protected])
##许可协议 根据您的选择,许可协议为
- Apache License,版本2.0,(https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可协议 (http://opensource.org/licenses/MIT)
。
##贡献 除非您明确声明,否则除非您明确声明,否则根据Apache-2.0许可协议定义的,您提交的任何有意包含在作品中的贡献,应如上所述双重许可,而无需任何其他条款或条件。