2 个版本
0.3.1 | 2021 年 3 月 19 日 |
---|---|
0.3.0 | 2021 年 2 月 25 日 |
#867 in 命令行界面
48KB
974 行
grab-rs
一个用于轻松获取用户为您的 CLI 提供的输入的库。无论是来自文件、stdin 还是命令行上的纯文本,我们都为您提供了支持。
安装
-
将其添加到 Cargo.toml 依赖项
# Cargo.toml [dependencies] grab = "0.3"
-
导入和使用它
use grab::{ /* ... */ }
用法
此库公开的主要类型是 grab::Input
。可以通过 grab::Config::parse
创建 Input
的实例,它接受一个 &str
作为输入并尝试将其解析为已知 Input
源。
目前,已知的源包括
- 作为输入传递的实际文本 (
&str
) - 您程序的 stdin
- 一个文件
默认 Config
识别 -
作为 stdin,遵循 Unix 传统,并从 curl -d
获得灵感,通过识别 @<文件路径>
作为文件。
这意味着您可以使用单个类型轻松支持最常用的三种输入源。例如,假设我们有一个简单的 CLI 工具名为 hello
,它向用户打印出问候语...
use structopt::StructOpt;
use grab::Input;
// We use the popular StructOpt library for our CLI skeleton
#[derive(StructOpt)]
struct HelloCLI {
// Note we use Input instead of the typical String or Vec<u8>
/// The name we're going to greet
name: Input
}
fn main() -> Result<()> {
// Parse our argument(s)
let args = HelloCLI::from_args();
// Access the user's input, reading it to a string
let name = args.name.access()?.read_to_string()?;
// Say hello!
println!("Hello, {}!", &name);
Ok(())
}
现在我们可以通过零额外代码支持以下所有三种调用
$ hello John
Hello, John!
$ echo Bob | hello -
Hello, Bob!
$ print Fred >name.txt ; hello @name.txt
Hello, Fred!
许可协议
许可协议为 Apache 许可协议,版本 2.0除非您明确声明,否则根据 Apache-2.0 许可协议定义的,您有意提交以包含在此软件包中的任何贡献,都应按上述方式许可,不附加任何额外的条款或条件。
依赖关系
约 2.5MB
~47K SLoC