Struct 如何使结构的所有字段公开可读,同时强制使用;新";建造师

Struct 如何使结构的所有字段公开可读,同时强制使用;新";建造师,struct,rust,public,serde,Struct,Rust,Public,Serde,许多结构需要强制使用构造函数来创建对象,但我希望对所有字段都具有公共读取权限 我需要通过bish.bash.bosh.wibble.wobble-bish.get_bash().get_bosh().get_wibble().get_wobble().get_wobble()访问几个级别,因为可读性和可能的性能原因,我不想去 我用的就是这个可怕的乱七八糟的东西: #[derive(Debug)] pub struct Foo { pub bar: u8, pub baz: u16

许多结构需要强制使用构造函数来创建对象,但我希望对所有字段都具有公共读取权限

我需要通过
bish.bash.bosh.wibble.wobble
-
bish.get_bash().get_bosh().get_wibble().get_wobble().get_wobble()
访问几个级别,因为可读性和可能的性能原因,我不想去

我用的就是这个可怕的乱七八糟的东西:

#[derive(Debug)]
pub struct Foo {
    pub bar: u8,
    pub baz: u16,
    dummy: bool,
}

impl Foo {
    pub fn new(bar: u8, baz: u16) -> Foo {
        Foo {bar, baz, dummy: true}
    }
}
这显然浪费了一小部分空间,而且
dummy
给其他地方带来了不便


我该怎么做?

多亏了@hellow,我现在有了一个有效的解决方案:

use serde::{Serialize, Deserialize}; // 1.0.115

#[derive(Serialize, Deserialize, Debug)]
pub struct Foo {
    pub bar: u8,
    pub baz: u16,

    #[serde(skip)] 
    _private: (),
}

impl Foo {
    pub fn new(bar: u8, baz: u16) -> Foo {
        Foo {bar, baz, _private: ()}
    }
}

这回答了你的问题吗?TL;Dr使用
()
而不是
bool
,因为单元类型是零尺寸类型(ZST)@hellow谢谢,问题不一样,但答案的最后一部分是适用的。使用
\u private:()
仍然需要我在序列化过程中处理它的存在-但我可以在
serde
中解决这个问题。