1 个不稳定版本
0.0.0 | 2019年3月23日 |
---|
#9 in #parked
1KB
爪子
命令行参数爪子解析器抽象化,适用于主函数。
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