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 次下载
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)
:防止由于相同回调函数的arg
或arg
被多次传递而产生的重复回调- 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_value
、get_values
和is_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