1个不稳定版本
0.1.0 | 2021年1月18日 |
---|
#958 在 命令行界面
每月 22 次下载
用于 eavesdropper_cli
13KB
206 代码行
cliargs_t
一个简单的库,可以快速创建CLI应用程序,无需处理用户输入解析。
优点 | 缺点 |
---|---|
易于使用 | 缺少更复杂库拥有的功能 |
提供自动帮助命令 |
用户体验
如果用户使用下面的示例代码,他们可能会这样使用您的命令
无标志:hello
标志:hello -a flag_value
帮助命令
这个库提供已经实现的帮助命令!
help
:将提供命令列表、它们的帮助描述以及它们的标志数量。
help -c command_name
:将显示命令的帮助描述以及详细的标志帮助。
help -c command_name -f flag_name
:将显示指定命令的特定标志的帮助信息。
创建命令
下面的示例展示了如何通过实现Command trait创建一个命令实例。
struct HelloCommand {}
impl cliargs_t::Command for HelloCommand {
fn execute_command(&self, flags: std::collections::HashMap<std::string::String, std::string::String>) {
println!("Hello from the command!");
}
fn get_information(&self) -> cliargs_t::CommandInformation {
return cliargs_t::CommandInformation {
command_name: "hello",
command_help: "says hello",
flags: vec![
cliargs_t::Flag {
identifier: "a",
flag_help: "some example flag -a",
required: false
}
]
}
}
}
主循环
这是一个主方法示例,可能将输入通过此库进行路由。在这个例子中,我使用了rustyline库来简化我的用户输入读取,但只要将适当的格式传递给handle_input()方法,任何用户输入方法都可以工作。
use std::io::Read;
use rustyline::error::ReadlineError;
use rustyline::Editor;
fn main() {
let hello_command: Box<cliargs_t::Command> = Box::new(HelloCommand {});
let mut commands = vec![
hello_command
];
let commander = cliargs_t::Commander::new(&mut commands);
let mut rl = Editor::<()>::new();
if rl.load_history("history.txt").is_err() {
println!("No previous history.");
}
loop {
let readline = rl.readline(">> ");
match readline {
Ok(line) => {
rl.add_history_entry(line.as_str());
commander.handle_input(line);
},
Err(ReadlineError::Interrupted) => {
println!("CTRL-C");
break;
},
Err(ReadlineError::Eof) => {
println!("CTRL-D");
break
},
Err(err) => {
println!("Error: {:?}", err);
break
}
}
}
rl.save_history("history.txt").unwrap();
}
依赖项
~1.5MB
~36K SLoC