rust [Best原型或默认值中可选值的实践

qlzsbp2j  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(196)

我们正在设置我们的rust服务,并使用prost-build来连接proto <->rust land。我们的proto定义在proto 3中,让我们来看看下面的proto消息:

message Test {
string id = 1;
string body = 2;
string maybe_nullable_thing = 3;
}

这会产生如下的结构:

pub struct Test {
    #[prost(string, tag="1")]
    pub id: ::prost::alloc::string::String,
    #[prost(string, tag="2")]
    pub body: ::prost::alloc::string::String,
    #[prost(string, tag="3")]
    pub maybe_nullable_thing: ::prost::alloc::string::String,
}

在我们尝试过的其他语言中,proto消息的字段被设计成可选的,可以省略。在这个例子中,可能有maybe_nullable_thing不能被设置的情况。
我可以通过使用optional关键字来解决这个问题。尽管我记得这样做并不是最好的做法(也许我搞错了?)
就proto 3和rust的最佳实践而言,使用optional关键字可以吗?如果我将serdeTest结构体沿着使用,我可以看到所有字段的默认值都开始设置为"".to_owned()(或空字符串)。
所以我不知道这里最好的做法是什么?我很想得到一些关于这里最好的前进方向的指针。

5lhxktic

5lhxktic1#

看一下时雄的PROST!工具的自述文件,他们的建议是用Option<T> Package 任何非重复和非标量字段,或者任何可选字段。这可能与prost-build不同,也可能没有不同,但它应该为您提供了一个很好的参考,说明在使用proto 3和Rust时需要做什么。
然而,一般来说,你应该把任何你想成为可选的值 Package 在Option<T>中。这是一个不错的做法,这是Rust中默认的、标准的表示“可能为空的东西”的方式。

相关问题