如何在所有字段都公开的情况下建立一个公共结构,而不对每个字段重复执行“ pub”?

时间:2018-12-20 10:11:14

标签: struct rust public rust-macros

如何在Rust中定义一个公共结构,其中所有字段都是公共的,而不必在每个字段前面重复使用pub修饰符?

一个pub_struct宏将是理想的:

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

相当于:

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

1 个答案:

答案 0 :(得分:4)

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是否支持阅读器宏,那将是很好的选择。