1 个不稳定版本
0.1.0 | 2024 年 6 月 9 日 |
---|
#2 在 #opt
11KB
172 行
Rusty CLI 框架
这是一个用 Rust 构建命令行应用程序的简单框架。它设计得易于使用和扩展。
用法
要使用此框架,您需要将其添加到您的 Cargo.toml
文件中
[dependencies]
rusty_cli = "0.1.0"
然后您可以在代码中使用它,如下所示
use rusty_cli::{Command, CommandError, CommandManager, Opt, OptValue};
struct EchoCommand;
impl Command for EchoCommand {
fn run(
&self,
args: Vec<String>,
opts: std::collections::HashMap<Opt, OptValue>,
) -> Result<(), CommandError> {
let output = args.join(" ");
Ok(())
}
}
fn main() {
let mut manager = CommandManager::new();
manager.add_command("echo".to_string(), Box::new(EchoCommand));
manager.run(std::env::args().skip(1).collect());
}
选项
您还可以向您的命令添加选项。选项使用 Opt
枚举指定,并通过 run
方法作为 HashMap<Opt, OptValue>
传递。以下是一个接受 --uppercase
选项的命令示例
use rusty_cli::{Command, CommandError, CommandManager, Opt, OptValue};
struct LsCommand;
impl Command for LsCommand {
/// Returns the options available for the `ls` command.
fn opts(&self) -> Vec<Opt> {
vec![
Opt::new(
"a",
"all",
OptValue::BOOL(false),
"do not ignore entries starting with .",
),
Opt::new(
"l",
"long",
OptValue::BOOL(false),
"use a long listing format",
),
Opt::new(
"h",
"human-readable",
OptValue::BOOL(false),
"with -l and -s, print sizes like 1K 234M 2G etc.",
),
]
}
/// Executes the `ls` command with the given arguments and options.
fn run(
&self,
args: Vec<String>,
opts: std::collections::HashMap<Opt, OptValue>,
) -> Result<(), CommandError> {
println!(
"Running ls command with args: {:?} and opts {:?}",
args, opts
);
// Do ls command logic here
let mut all = false;
if let Some(opt) = rusty_cli::find_opt(opts, "--all".to_string()) {
if let OptValue::BOOL(value) = opt {
all = value;
}
}
println!("all: {}", all);
for entry in std::fs::read_dir(".").unwrap() {
let entry = entry.unwrap();
let path = entry.path();
let file_name = path.file_name().unwrap().to_str().unwrap().to_owned();
if !all && file_name.starts_with(".") {
continue;
}
println!("{}", file_name);
}
Ok(())
}
}
fn main() {
let mut manager = CommandManager::new();
manager.add_command("ls".to_string(), Box::new(LsCommand));
manager.run(std::env::args().skip(1).collect());
}
支持的 OptValue
类型包括
STRING(String)
:字符串值。BOOL(bool)
:布尔值。INT(i64)
:整数值。UINT(u64)
:无符号整数值。