Как я могу процедурно построить значение атрибута во время компиляции? - PullRequest
0 голосов
/ 20 января 2020

У меня есть количество исходных файлов (001.rs, 002.rs, 003.rs, ...), каждый из которых имеет следующее содержимое:

// FILE: 001.rs
pub const NUM: i64 = 1; // Different number per file

Я хочу загрузить все эти значения с макросом:

// FILE: main.rs
macro_rules! get_numbers_from_modues {
    ($start: expr, $end: expr) => {{
        let mut numbers = std::vec::Vec::<i64>::with_capacity($end - $start);

        for i in $start..=$end {
            #[path = format!("{:03}.rs", i)] // <= error: unexpected token: `format`
            mod inline_module;
            numbers.push(inline_module::NUM);
        }
        numbers
    }};
}


fn main() {
    let numbers = get_numbers_from_modues!(1, 2);
}

Не компилируется, поскольку атрибут path имеет неожиданный токен. Есть ли способ установить атрибут процедурным способом? Все значения известны во время компиляции.

Это минимальный пример, в каждом файле больше номера, и я не могу изменить структуру. Я просто предпочел бы не повторяться во всех случаях.

...