1 个不稳定版本

0.0.0 2019年3月23日

#9 in #parked

MIT/Apache

1KB

爪子

crates.io version build status downloads docs.rs docs

命令行参数爪子解析器抽象化,适用于主函数。

Paw 的目标是证明 C 语言在将参数传递给 main 函数时的想法并不坏,只是需要一点氧化(即适配)才能与 Rust 语言兼容。

Paw 定义了一个特质、一个过程宏和一个示例实现,当它们组合在一起时,允许您将完全解析的参数传递给 main。不再需要记住调用哪些方法来解析 CLI 参数。相反,paw 使命令行解析感觉像一等公民

示例

#[paw::main]
fn main(args: paw::Args) {
    for arg in args {
        println!("{:?}", arg);
    }
}

更多示例

安装

$ cargo add paw

安全性

此 crate 使用 #![deny(unsafe_code)] 来确保所有内容都在 100% 安全的 Rust 中实现。

贡献

想加入我们吗?请查看我们的 "贡献" 指南 并查看一些这些问题

常见问题解答

paw 如何工作?

paw::main 属性允许 fn main 接受任何实现 paw::ParseArgs 特质的参数。实现了 paw::ParseArgs 特质的参数有一个方法:parse_args,它返回一个 Result 类型。

生成的任何错误都会从 fn main 返回,返回的 Result 类型负责如何打印它们。

与 C 语言的关系是什么?

在 C 语言的运行时中,命令行参数是通过“参数数量”(argc)和“参数列表”(argv)的组合传递的。

int main(int argc, char **argv) {
    for(i = 1; i < argc; i++) {
        printf("%s",argv[i]);
    }
    return 0;
}

在Rust中,这会转换为一个参数迭代器,这正是std::env::Args所提供的,它被paw通过paw::Args封装。

paw的未来是什么?

Paw是CLI工作组进行的一个实验,旨在为每个人提供更好的命令行体验。我们的假设是通过将命令行解析移动到fn main,Rust的命令行体验可以变得更加直观和易于使用。

我们希望收集人们对这种工作方式的反馈,并看看我们如何与现有库集成。这将需要时间,我们可能在过程中对某些事情进行更改。

如果这个实验证明是成功的,我们可能会通过RFC流程将Paw提供的功能正式化到Rust中。但还不是这样,所以现在:我们希望你喜欢Paw,并期待听到你使用它的体验!

许可协议

MIT 或者 Apache-2.0

无运行时依赖