是否可以为 Protocol Buffer 中的字段定义数值范围?

Is it possible to define a numeric range for a field in Protocol Buffer?

我生活在一个非常 safety/critical 的 Ada-ic 环境中,并且养成了定义明确和有界的类型定义的习惯。我也遇到了很多 ASN1 usage/evangelists.

我周围的一些人认为 ASN1 优于协议缓冲区的关键特性之一是能够定义并因此检查数据范围

所以,

常见的数值类型定义,如 int32、int64 超出了此处的范围。


我读了这个 Google overview 并没有发现对任何数据范围定义的引用。除了关于枚举的特性 management/representation 和一些排序特性。

为了提供一些其他参考,我听说了 of/read 下面的链接,并了解到一个 Ada 实施项目。

Does anyone know of an Ada plugin for protocol buffers?

这导致

http://www.diva-portal.org/smash/get/diva2:690878/FULLTEXT02.pdf

https://github.com/persan/protobuf-ada

Is it true that protocol buffers do not have any range definition system ?

Are there any means on top of protocol buffer that could provide such a feature ?

编写代码来检查值是否在预期范围内

Protocol buffers 确实没有任何内置的数值范围机制。

但是语法确实支持定义自定义选项:

extend google.protobuf.FieldOptions {
     optional int32 maxval = 50001;
     optional int32 minval = 50002;
}

message MyMessage {
     required int32 month = 1 [(minval) = 1, (maxval) = 12];
}

根据使用的库,这些可以在运行时使用反射访问,或者您可以使用自定义代码生成器自动生成验证码。