2 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2017 年 12 月 1 日 |
---|---|
0.1.0 | 2017 年 7 月 15 日 |
#836 在 配置
26KB
610 行
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();
}
- 使任何类型都变得
configurable
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
就可以填充,而无需了解。
依赖项
~480KB