Как сделать публичную структуру, где все поля являются публичными, не повторяя `pub` для каждого поля?
Как я могу определить публичную структуру в Rust, где все поля являются открытыми, не повторяя pub
модификатор перед каждым полем?
pub_struct
макрос был бы идеальным:
pub_struct! Foo {
a: i32,
b: f64,
// ...
}
что будет эквивалентно:
pub struct Foo {
pub a: i32,
pub b: f64,
//...
}
1 ответ
macro_rules! pub_struct {
($name:ident {$($field:ident: $t:ty,)*}) => {
#[derive(Debug, Clone, PartialEq)] // ewww
pub struct $name {
$(pub $field: $t),*
}
}
}
К несчастью, derive
может применяться только к структурам, перечислениям и объединениям, поэтому я не знаю, как поднять их для звонящего.
Использование:
pub_struct!(Foo {
a: i32,
b: f64,
});
Было бы неплохо, если бы мне не нужны скобки и точка с запятой, т.е. если Rust поддерживает макросы читателей.