Проверьте и переопределите значения по умолчанию на этапе анализа

При использовании собственного пакета C# версии 3.0.0-бета3, согласно официальной документации, значения по умолчанию назначаются на этапе синтаксического анализа, и нет никакого способа определить, не было ли значение передано вообще, для моих целей это жизненно важный момент, так как я хотел сделать некоторые вид проверки для декодированных прототипов, так интересно, есть ли у кого-нибудь опыт пользовательской проверки данных или переопределения / перехвата стадии анализа?

Некоторые основные примеры:

  1. Для поля int32 в случае, если оно не было передано вообще, поэтому вместо значения по умолчанию 0 я хочу обработать этот случай и вызвать пользовательское исключение
  2. Для поля int32 я хотел установить допустимый диапазон значений, например 100-1000, в противном случае вывести исключение при разборе
  3. Для строкового поля я хотел установить минимальную длину на этапе анализа / декодирования

Как бы вы предложили сделать это, кроме написания пользовательского слоя проверки поверх пакета /API protobuf? Я все еще надеюсь, что есть точки расширяемости, но еще не найдены

1 ответ

Решение

Проверка должна быть выполнена в коде приложения после разбора. Нет никаких хуков для этого в самом парсере.

Proto3 не различает поля по умолчанию и неотправленные поля. Фактически, на отправляющей стороне, если поле было явно установлено в его значение по умолчанию, оно не будет закодировано. Таким образом, нет способа реализовать ваше первое правило в proto3.

Другие вопросы по тегам