2个不稳定版本

使用旧的Rust 2015

0.2.1 2016年12月22日
0.1.0 2016年8月10日

#callback中排名第63

MIT许可协议

34KB
461

Yaccas 构建状态

Yet Another Callback-orientated Command line pArSer是...好吧,又一个命令行解析器。

特性或“又一个?!你真的不够有创意,对吧?!”

的确,现在有很多用Rust编写的命令行解析器...但如果它和其他的都一样,我会写这个吗?让我来说服你:你为什么要选择这个?

  • 平滑地集成到现有项目中
  • 极轻量级,简单 & 快速
    • 无依赖:只有纯Rust!
  • 没有处理器,引用或其他垃圾:只是现代回调!
  • 适用于每个系统:接受UNIX的语法,就像Windows的语法一样。
  • 完全文档化,许多(doc-)测试以检查正确性

文档

GitHub上的文档

示例

使用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-2.0许可协议定义的,您提交的任何有意包含在作品中的贡献,应如上所述双重许可,而无需任何其他条款或条件。

无运行时依赖