2个版本 (1个稳定版本)

1.0.0 2019年5月6日
0.0.0 2019年3月6日

#48 in #cli-parser

Download history 3955/week @ 2023-11-19 5874/week @ 2023-11-26 5585/week @ 2023-12-03 7352/week @ 2023-12-10 4808/week @ 2023-12-17 1941/week @ 2023-12-24 4235/week @ 2023-12-31 6506/week @ 2024-01-07 4834/week @ 2024-01-14 7067/week @ 2024-01-21 6546/week @ 2024-01-28 8239/week @ 2024-02-04 9941/week @ 2024-02-11 6566/week @ 2024-02-18 8232/week @ 2024-02-25 10002/week @ 2024-03-03

34,867 每月下载量
用于 不到 51 个crate

MIT/Apache

18KB
129

paw

crates.io version build status downloads docs.rs docs

命令行参数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,我们很乐意听听你使用它的体验!

许可协议

MITApache-2.0

依赖关系

~1.5MB
~33K SLoC