Как сделать публичную структуру, где все поля являются публичными, не повторяя `pub` для каждого поля? - PullRequest
0 голосов
/ 20 декабря 2018

Как определить открытую структуру в Rust, где все поля являются общедоступными, без необходимости повторять модификатор pub перед каждым полем?

Макрос pub_struct будет идеальным:

pub_struct! Foo {
    a: i32,
    b: f64,
    // ...
}

, что эквивалентно:

pub struct Foo {
    pub a: i32,
    pub b: f64,
    //...
}

1 Ответ

0 голосов
/ 20 декабря 2018
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 поддерживал макросы читателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...