У меня есть количество исходных файлов (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
имеет неожиданный токен. Есть ли способ установить атрибут процедурным способом? Все значения известны во время компиляции.
Это минимальный пример, в каждом файле больше номера, и я не могу изменить структуру. Я просто предпочел бы не повторяться во всех случаях.