2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2017年12月1日 |
---|---|
0.1.0 | 2017年7月15日 |
在配置中排名第739
在zcfg_flag_parser中使用
20KB
477 行
zcfg
zcfg是一个简单的配置库。它允许您为Rust库定义可配置的值,而不将您绑定到特定的解析格式,也不需要在二进制中添加管道。
与其他常见的配置或标志库不同,您不需要将应用程序的内部细节传播到main
中,并且如果您选择不这样做,也不需要强制用户配置库的内部细节。
它受到gflags和类似的全局配置系统的影响。
特性
- 在相关位置直接定义配置值
#![feature(used)]
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate zcfg;
define_pub_cfg!(net_protocol_timeout_ms, u32, 20000,
"How long the server or client should wait before considering \
this connection timed out.")
- 在初始化领域对象时访问这些值
struct NetProtocolClient {
timeout_ms: u32,
}
impl Default for NetProtocolClient {
fn default() -> NetProtocolClient {
NetProtocolClient {
timeout_ms: net_protocol_timeout_ms::CONFIG.get_value(),
}
}
}
- 让二进制决定如何引入配置值
extern crate zcfg;
extern crate zcfg_flag_parser;
use zcfg_flag_parser::FlagParser;
fn main() {
// Parse flags for all linked crates via command line
FlagParser::new().parse_from_args(env::args().skip(1)).unwrap();
}
- 使您的任何类型都成为可配置的
use zcfg::ConfigParsable;
enum BuildStrategy {
Local,
Remote {
addr: String,
}
}
impl ConfigParsable for BuildStrategy { ... }
define_cfg!(use_build_strategy, BuildStrategy, BuildStrategy::Local,
"Defines how the build planner performs compilation. Options are \
[Local] or [Remote(\"some_address\")].")
最佳实践
- 将配置的访问限制在默认条件下的对象初始化中,以保持可测试性
- 如果您希望其他模块使用配置,请考虑使用
define_pub_cfg
- 确保默认值是有用的——用户可能根本不会进行配置填充。
路线图
- 一个“帮助”功能,可以输出配置名称、默认值和配置描述,供公众使用
- 基于稳定的构建!
zcfg
目前依赖于实验性的used功能,以防止编译器丢弃配置初始化器。
工作原理
非常复杂。 zcfg
结合了链接器标志和used
实验性功能,将链接库中定义的所有标志排队到一个全局列表中,然后main
可以填充,而无需了解。
依赖项
~14KB