3 个不稳定版本
0.2.1 | 2022年7月13日 |
---|---|
0.2.0 | 2022年7月13日 |
0.1.0 | 2021年5月17日 |
946 在 命令行界面
4,377 每月下载量
在 2 个 Crates 中使用(通过 routes)
39KB
686 行
easy-repl
一个易于使用的 REPL,适合需要创建临时 shell 的情况。
这是一个 Rust 库,它以快速便捷的方式为您的应用程序生成一个 REPL。它提供了一个易于使用的 command!
宏,该宏将自动验证和解析命令参数,为您完成所有类型检查。REPL 配有方便的帮助信息、输入验证、提示和自动补全。许多 REPL 功能都可以进行配置。
有关更多信息,请参阅 crate 文档和 examples/
目录。
lib.rs
:
一个易于使用的 REPL,适合需要创建临时 shell 的情况。
此库提供了为您的应用程序生成一个 REPL 的快速便捷方式。它提供了一个易于使用的 command!
宏,该宏将自动验证和解析命令参数,为您完成所有类型检查。REPL 配有方便的帮助信息、输入验证、提示和自动补全。许多 REPL 功能都可以进行配置。
示例
这是一个基本示例,对应于 examples/minimal.rs
。有关更多示例,请参阅 examples/
目录,其中包括如何处理错误、访问处理闭包外的变量以及如何在多个 REPL 中创建 REPL 的示例。
use easy_repl::{Repl, CommandStatus, command};
let mut repl = Repl::builder()
.add("hello", command! {
"Say hello",
(name: String) => |name| {
println!("Hello {}!", name);
Ok(CommandStatus::Done)
}
})
.add("add", command! {
"Add X to Y",
(X:i32, Y:i32) => |x, y| {
println!("{} + {} = {}", x, y, x + y);
Ok(CommandStatus::Done)
}
})
.build().expect("Failed to create repl");
repl.run().expect("Critical REPL error");
生成的 REPL 可以用作
> hello world
Hello world!
它具有参数数量检查...
> add 1
Error: wrong number of arguments: got 1, expected 2
Usage: add X:i32 Y:i32
> hello easy repl
Error: wrong number of arguments: got 2, expected 1
Usage: hello name:String
> hello "easy repl"
Hello easy repl!
...以及类型检查!
> add 1 world
Error: failed to parse argument value 'world': invalid digit found in string
Usage: add X:i32 Y:i32
它包括自动的 help
和 quit
命令。帮助信息是自动生成的
> help
Available commands:
add X:i32 Y:i32 Add X to Y
hello name:String Say hello
Other commands:
help Show this help message
quit Quit repl
默认情况下,用户不需要使用完整的命令名称,如果命令名称可以唯一解决(即前缀仅匹配单个命令),例如
> a 1 2
1 + 2 = 3
但如果输入有歧义,将打印出错误并提供命令建议
> h world
Command not found: h
Candidates:
hello
help
Use 'help' to see available commands.
REPL 默认情况下也自动实现了命令提示和TAB补全(参见 rustyline::hint
,rustyline::completion
)。
依赖关系
~8–20MB
~236K SLoC