2 个版本

0.3.1 2021 年 3 月 19 日
0.3.0 2021 年 2 月 25 日

#867 in 命令行界面

Apache-2.0

48KB
974

Crates.io Docs License

grab-rs

一个用于轻松获取用户为您的 CLI 提供的输入的库。无论是来自文件、stdin 还是命令行上的纯文本,我们都为您提供了支持。

安装

  1. 将其添加到 Cargo.toml 依赖项

    # Cargo.toml
    
    [dependencies]
    grab = "0.3"
    
  2. 导入和使用它

    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