Можно ли определить числовой диапазон для поля в буфере протокола? - PullRequest
4 голосов
/ 10 октября 2019

Я живу в очень безопасной / критической адаской среде и приобрел привычку иметь четкое и ограниченное определение типа. Я также сталкиваюсь с большим количеством использования / евангелистов ASN1.

Одной из ключевых особенностей, которые некоторые люди вокруг меня определяют как превосходящие в ASN1 над буферами протокола, является способность определять и, следовательно, проверять диапазон данных. .

Итак,

  • Правда ли, что у буферов протокола нет системы определения диапазона?
  • Есть ли какие-либо средства поверх буфера протоколачто могло бы обеспечить такую ​​функцию?

Определение обычных числовых типов, таких как int32, int64, здесь выходит за рамки.


Я прочитал это Обзор Google и не нашел ссылки на какое-либо определение диапазона данных. За исключением функций, связанных с управлением / представлением enum, и некоторыми функциями упорядочения.

Чтобы дать некоторые другие ссылки, я услышал / прочитал ссылки ниже и узнал о проекте реализации Ada.

Кто-нибудь знает плагин Ada для буферов протокола?

, что привело к

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

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

Ответы [ 2 ]

4 голосов
/ 10 октября 2019

Правда ли, что у буферов протокола нет системы определения диапазона?

Да

Есть ли какие-либо средства поверх буфера протокола, которые могли быпредоставить такую ​​функцию?

Вы пишете код, который проверяет, находятся ли значения в ожидаемом диапазоне .

2 голосов
/ 12 октября 2019

Это правда, что буферы протокола не имеют никакого встроенного механизма для числового диапазона.

Синтаксис, однако, поддерживает определение пользовательских параметров:

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

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

В зависимости от используемой библиотеки, этизатем можно получить доступ либо во время выполнения, используя отражение, либо вы можете использовать собственный генератор кода для автоматической генерации кода подтверждения.

...