У меня есть макрос, который создает структуру и кучу поддерживающих функций и реализаций признаков. Интересный бит для этого вопроса:
macro_rules! make_struct {
($name: ident) => {
struct $name;
}
}
Это работает так, как вы ожидаете:
make_struct!(MyStruct);
Если я хочу сделать параметризованный тип, мне не повезло:
make_struct!(AnotherStruct<T: SomeTrait>);
test.rs:8:27: 8:28 error: no rules expected the token `<`
test.rs:8 make_struct!(AnotherStruct<T: SomeTrait>);
Имя структуры является ident
, поэтому я не могу просто изменить это в макросах args (например, до ty
):
test.rs:3:16: 3:21 error: expected ident, found `MyStruct`
test.rs:3 struct $name;
Итак, как я могу написать этот макрос, чтобы иметь возможность обрабатывать оба? Или мне нужно разделить их? В последнем случае, как выглядит макрос?