5 个版本

0.0.6 2024 年 5 月 25 日
0.0.4 2023 年 7 月 20 日
0.0.3 2023 年 7 月 19 日
0.0.2 2023 年 5 月 25 日
0.0.1 2023 年 5 月 25 日

#560解析器实现

每月 25 次下载

MIT 许可证

31KB
495

FLI

一个用于在 Rust 中创建命令行应用程序的库,灵感来自 commander.js

注意:查看 示例代码

更改

有关稳定更改,请检查 CHANGELOG.md 文件

有关不稳定更改,请检查 CHANGELOG.md 文件

use fli::Fli;

fn main(){
    let mut app : Fli = Fli::init_from_toml();
    app.option("-n --name, <>", "Name to call you", |x : &Fli| {});
    app.option("-g --greet", "greeting", |x : &Fli| {
        match x.get_values("name".to_owned() /* passing (--name, -n or n) would work*/){
            Ok(value) => {
                println!("Good day {?}", value[0])
            },
            Err(_) => {},
        }
    });
    // required for the app  to work 
    app.run();
}

然后按此方式运行

$ cargo run -- -g -n james
Good day james

入门

安装

cargo add fli

或者

[dependencies]
fli = "0.0.5"

导入

extern crate fli;
use fli::Fli;
fn main(){
    println!("Happy Coding");
}

创建应用程序实例

fn main(){
    let mut app = Fli::init_from_toml(); // to init from your cargo.toml file
}

或者

fn main(){
    let mut app = Fli::init_from_toml();
}

添加选项

fn main(){
    let mut app = Fli::init_from_toml();
    app.option("-g --greet", "to make a greeting", greet);
    app.option("-n --name, <>", "to set your name", |x|{});
}

// callback for the greet param
fn greet(x: &Fli){
    match x.get_values("--name".to_owned()){
        Ok(option) => {
            println!("Good day {?}", v[0]);
        },
        Err(_) => {},
    }
}

运行您的应用程序

fn main(){
    //... other code
    app.run();
}

添加新的命令集

您还可以使用命令方法添加新的命令集

fn main(){
    let mut app = Fli::init_from_toml();
    app.command("greet", "An app that respects")
    .default(greet)
    .allow_inital_no_param_values(false)
    .option("-n --name, <>", "To print your name along side", greet)
    .option("-t --time, []", "For time based Greeting", greet);
    app.run();
}

fn greet(x){ /*code to greet "*/ }

然后您将按此方式运行该命令

$ cargo run -- greet -n "codad5" 
> Hello Codad5

以过程式方式进行

像 commander.js 一样,您也可以以过程式方式执行

use fli::Fli;

fn main(){
    //  doing it procedual way
    let mut app = Fli::init_from_toml();
    let moveCommand = app.command("move", "move files");
    // the [...] means accept optional multiple
    moveCommand.option("-p --path, <...>", "path to files to be moved", move_file);
    app.option("-g --greet",  "to make a greeting", |x|{});
    app.option("-n --name, <>", "to set your name", |x|{});
    app.run();

    if app.is_passed("--greet"){
        if app.has_a_value("-n"){/* greet person with name*/}
        else { /* freet without name*/ }
    }
}

解释所有 app : Fli 方法

注意

所有 app : Fli 方法都作为 app : &Fli 方法提供

  • app.option(arg_and_data, callback) : 此方法接受两个参数

    • 第一个 arg_and_data:这是一个命令可用参数的格式模板,可以是格式 -a --arg-a --arg, data,其中 -a 是参数的简写形式,--arg 是参数的长形式。--data 是可接受的数据类型,并且通过一个 逗号 , 分隔,如果没有传递,则参数不需要数据类型。
    符号 含义
    [] 这意味着它需要一个可选数据
    <> 这意味着它需要一个必选数据
    [...] 这意味着它可以接受多个可选数据
    <...> 这意味着它需要至少一个数据,可以接受更多
  • app.command(command_name):这是创建一个带有自己选项和参数的新命令,例如

  • app.default(callback):如果没有传递参数或命令,但传递了 no_param_value,则这是默认回调函数

  • app.allow_duplicate_callback(bool):防止由于相同回调函数的 argarg 被多次传递而产生的重复回调

    • True:开启它,即下面的代码将正常工作
    $ myapp "some ran value"
    
  • app.allow_initial_no_param_values(bool):允许为没有参数的命令赋值

  • app.run() (!important):运行应用程序

  • app.has_a_value(arg_flag):检查一个参数是否有值

  • app.get_values(arg_flag):获取一个期望必选参数的值,这返回一个 Result 类型,其 Ok 值是一个字符串向量 Vec<String>&str 作为错误值

注意,如果参数不需要或不需要值,则方法 get_values 将返回 Err 枚举

  • app.is_passed(bool):检查是否传递了一个参数标志

注意:使用方法 has_a_valueget_valuesis_passed,您可以传递 -n , --name , n , name,并且它们都会返回相同的预期值

  • app.get_arg_at(u8):获取特定位置的参数

注意:运行者不包括在参数列表中。例如,如果存在如下命令 my-app > greet > hello,则命令 greet 的位置 1 为 greet,而不是 my-app

  • app.print_help(message):打印一个描述性良好的消息。

打印默认的帮助信息以获取应用程序的帮助选项

$ my-app --help

获取移动命令的帮助选项

$ my-app move --help # a new command called

依赖关系

~0–9.5MB
~41K SLoC