Могу ли я обновить поле сообщения из перечисления в строку и сохранить его имя?

#protocol-buffers

Вопрос:

Код

Рассмотрим следующее объявление сообщения protobuf:

 syntax = "proto3";  enum Airport {  TLV = 0;  JFK = 1;  ... }  message Flight {  ...  Airport origin_airport = 11;  ... }   

Проблема

Из-за некоторых бизнес-требований мы должны установить Airport , чтобы это была свободная строка, а не выбор из закрытого перечисляемого списка. Я знаю, что могу добавлять и удалять поля по желанию, если я не использую одно и то же число повторно. Однако я не уверен, что могу использовать то же имя, а-ля:

 message Flight {  ...  reserved 11; // The old enum field number  string origin_airport = 18; // Unused so far  ... }   

Мой Вопрос

При обновлении типа поля protobuf3 можно ли сохранить имя поля, если его номер изменится?

Ответ №1:

Если вы не используете вариант JSON, то имена вообще не используются в полезной нагрузке, так что технически повторное использование имен совершенно законно; однако: это может привести к ненужным проблемам с существующим кодом — в зависимости от существующего кода и правил, специфичных для языка / фреймворка, и может привести к путанице. Поскольку этого можно избежать, я бы рекомендовал использовать такое имя origin_airport_code или подобное.

(Точка я делаю здесь: любой код, который использовал старое поле, наверное, нуждается во внимании, я могу видеть некоторые сценарии, в которых существующий код может компилироваться после смены, но имею в виду что-то другое, и, следовательно, приводит к ошибке, что было бы избежать, если бы вы поменяли название и заставили каждого использования, чтобы посетить)

Комментарии:

1. Хорошие моменты! Я начинаю думать, что собираюсь использовать венгерскую нотацию, чтобы избежать этого 🙂