Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to use the cfg(feature) check on multiple statements?

Tags:

rust

Is there a way to minimize the following feature check?

#[cfg(feature = "eugene")]
pub mod eugene_set_steam_id;
#[cfg(feature = "eugene")]
pub mod eugene_balance;
#[cfg(feature = "eugene")]
pub mod eugene_force_map;
#[cfg(feature = "eugene")]
pub mod eugene_rating;
#[cfg(feature = "eugene")]
pub mod eugene_stat;
#[cfg(feature = "eugene")]
pub mod eugene_steam_id;
#[cfg(feature = "eugene")]
pub mod eugene_top;

To something like:

#[cfg(feature = "eugene")] {
    pub mod eugene_set_steam_id;
    pub mod eugene_balance;
    pub mod eugene_force_map;
    pub mod eugene_rating;
    pub mod eugene_stat;
    pub mod eugene_steam_id;
    pub mod eugene_top;
}

This would better convey meaning and be more ergonomic.

like image 359
Victor Polevoy Avatar asked Mar 28 '17 13:03

Victor Polevoy


1 Answers

The cfg-if crate provides the cfg-if! macro that should do what you want:

#[macro_use]
extern crate cfg_if;

cfg_if! {
    if #[cfg(feature = "eugene")] {
        pub mod eugene_set_steam_id;
        pub mod eugene_balance;
        pub mod eugene_force_map;
        pub mod eugene_rating;
        pub mod eugene_stat;
        pub mod eugene_steam_id;
        pub mod eugene_top;
    } else {
    }
}

In fact, it even describes itself using your words:

A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted.

like image 199
Shepmaster Avatar answered Sep 17 '22 19:09

Shepmaster