Как дублировать имена полей с помощью функции proto3 oneof? - PullRequest
1 голос
/ 02 ноября 2019

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

Так как одно поле будет установлено одновременно, оно будетразумно иметь повторяющиеся имена полей в схеме прото. Проблема в том, что прото-генератор видит это как переопределение.

Я хотел бы сделать это, потому что в моей ситуации это делает сериализацию json простой JsonFormat.

Например, яможет иметь

message MyResponse {
    int32 a = 1;
    string b = 2;
    oneof Properties {
        PropertiesType1 properties = 3;
        PropertiesType2 properties = 4;
        PropertiesType3 properties = 5;
        PropertiesType4 properties = 6;
    }
}

Есть ли способ обойти это, или придется приложить усилия для переопределения прото? Возможным обходным путем может быть, например, использование map<string, Properties> properties = 9;

1 Ответ

1 голос
/ 02 ноября 2019

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

Также: anyof позволяет использовать один и тот же тип для нескольких членов в различном объединении, и в этом случае то, что вы хотите сделать, получит когда-либоболее запутанно.

Наконец, возвращаясь к JSON: синтаксический анализатор видит "properties": - что он ожидает дальше ? И после того, как он проанализировал значение, какое поле считается «установленным» в различаемом объединении?

Так что нет, по многим причинам: это не разрешено.

...