是否可以为协议缓冲区中的字段定义数字范围?

时间:2019-10-09 21:19:44

标签: types protocol-buffers ada

我生活在非常安全/关键的Ada-ic环境中,并养成了良好定义和界定类型定义的习惯。我也遇到了很多ASN1使用/宣传人员。

我周围的一些人将ASN1定义为优于协议缓冲区的关键功能之一是定义并检查数据范围的功能

所以

  • 是真的,协议缓冲区没有任何范围定义 系统?
  • 协议缓冲区上方是否有任何方法可以 提供这样的功能?

通常的数字类型定义(例如int32,int64)不在本文范围内。


我阅读了此Google overview,发现没有引用任何数据范围定义。除了与枚举管理/表示有关的功能和一些排序功能。

为了提供其他参考,我听说/阅读了下面的链接,并且知道了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

2 个答案:

答案 0 :(得分:4)

  

协议缓冲区没有任何范围定义系统是真的吗?

  

在协议缓冲区之上是否有任何手段可以提供这种功能?

编写代码以检查值在预期范围内

答案 1 :(得分:2)

确实,协议缓冲区没有任何用于数字范围的内置机制。

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

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

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

根据所使用的库,可以在运行时使用反射来访问它们,也可以使用自定义代码生成器自动生成验证代码。