2个版本 (1个稳定版本)
1.0.0 | 2019年5月6日 |
---|---|
0.0.0 | 2019年3月6日 |
#48 in #cli-parser
34,867 每月下载量
用于 不到 51 个crate
18KB
129 行
paw
命令行参数paw-rser抽象层,用于main。
Paw的目标是证明C语言中传递参数给main的想法并不那么糟糕,只需要一点点氧化就可以使其与Rust一起工作。
Paw定义了一个trait、一个proc宏和示例实现,当组合使用时,可以将完全解析的参数传递给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
trait的参数。paw::ParseArgs
实现了一个方法:parse_args
,它返回一个Result<Self>
。
产生的任何错误都会从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::Args
被包装在
paw的未来是什么?
Paw是CLI工作组进行的一个实验,旨在为每个人提供更好的命令行体验。我们的假设是通过将命令行解析移动到Rust的fn main
,Rust的命令行体验可以变得更加直观和易于使用。
我们希望收集人们对这种方法的反馈,并看看我们如何与现有库集成。这将需要时间,我们可能在过程中改变一些事情。
如果这个实验证明是成功的,我们可能会通过RFC过程将Paw提供的功能正式化到Rust本身中。但目前还不是这样,所以现在:希望你喜欢Paw,我们很乐意听听你使用它的体验!
许可协议
依赖关系
~1.5MB
~33K SLoC