3 个版本 (破坏性)

使用旧的 Rust 2015

0.10.0 2019 年 5 月 13 日
0.9.0 2017 年 12 月 20 日
0.8.0 2017 年 3 月 20 日

#320配置

Download history 1479/week @ 2024-03-14 1719/week @ 2024-03-21 1268/week @ 2024-03-28 1455/week @ 2024-04-04 1587/week @ 2024-04-11 1490/week @ 2024-04-18 1557/week @ 2024-04-25 991/week @ 2024-05-02 791/week @ 2024-05-09 1324/week @ 2024-05-16 725/week @ 2024-05-23 624/week @ 2024-05-30 519/week @ 2024-06-06 601/week @ 2024-06-13 882/week @ 2024-06-20 1081/week @ 2024-06-27

3,199 每月下载量
用于 4 包

MIT/Apache

15KB
113

特性

Crate version Crate downloads Crate license Documentation

AppVeyor (Windows) Travis (Linux 和 OS X)

关于

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 实现的文档和项目:

许可

Features 根据 Apache 许可证 2.0 和 MIT 许可证进行许可。请阅读 LICENSE-APACHELICENSE-MIT 以获取详细信息

依赖关系

~105KB