3 个版本 (破坏性)
使用旧的 Rust 2015
0.10.0 | 2019 年 5 月 13 日 |
---|---|
0.9.0 | 2017 年 12 月 20 日 |
0.8.0 | 2017 年 3 月 20 日 |
#320 在 配置
3,199 每月下载量
用于 4 包
15KB
113 行
特性
关于
features
是一个小型库,实现了库或程序在启动时或运行时动态更改行为的功能,使用相同的编译二进制文件。这与 cargo 的 特性 支持不同,它使用条件编译。
在核心上,它是一个宏 (features!
),它接受一组特性标志名称,并使用这些名称生成一个包含启用特性切换函数(::enable()
)、禁用特性切换函数(::disable()
)和检查特性切换是否启用的函数(::is_enabled()
)的模块。
示例
基本示例
#[macro_use]
extern crate bitflags;
#[macro_use]
extern crate features;
features! {
pub mod feature {
const Alpha = 0b00000001,
const Beta = 0b00000010
}
}
fn main() {
assert_eq!(false, feature::is_enabled(feature::Alpha));
assert_eq!(false, feature::is_enabled(feature::Beta));
feature::enable(feature::Beta);
assert_eq!(false, feature::is_enabled(feature::Alpha));
assert_eq!(true, feature::is_enabled(feature::Beta));
}
多个特性集
#[macro_use]
extern crate bitflags;
#[macro_use]
extern crate features;
features! {
pub mod ux {
const JsonOutput = 0b10000000,
const VerboseOutput = 0b01000000
}
}
features! {
pub mod srv {
const Http2Downloading = 0b10000000,
const BitTorrentDownloading = 0b01000000
}
}
fn main() {
// Parse CLI args, environment, read config file etc...
srv::enable(srv::BitTorrentDownloading);
ux::enable(ux::JsonOutput);
if srv::is_enabled(srv::Http2Downloading) {
println!("Downloading via http2...");
} else if srv::is_enabled(srv::BitTorrentDownloading) {
println!("Downloading via bit torrent...");
} else {
println!("Downloading the old fashioned way...");
}
if ux::is_enabled(ux::VerboseOutput) {
println!("COOL");
}
}
特性切换参考
以下是一些启发 features
实现的文档和项目:
- 特性切换(Martin Fowler 的博客)
- 使用特性标志自信地发布更改(TravisCI 的博客)
- 特性切换是技术债务中最糟糕的类型之一(优秀的警示故事和警告)
- 特性切换(维基百科文章)
- Ruby 特性 gem(优秀的先前艺术)
许可
Features
根据 Apache 许可证 2.0 和 MIT 许可证进行许可。请阅读 LICENSE-APACHE 和 LICENSE-MIT 以获取详细信息
依赖关系
~105KB