#protocol-buffers
Вопрос:
Если у меня есть сообщение protobuf, подобное этому:
message Hostnames {
message Hostname {
string hostname = 1;
uint32 port = 2;
}
repeated Hostname hostnames = 1;
}
Если я хочу использовать это сообщение в другом сообщении, как мне избежать назначения другого поля? Пример:
message Backends {
Hostnames hostnames = 1;
}
Это похоже на то, что в YAML это выглядело бы так:
backends:
hostnames:
hostnames:
- hostname: one.example.com
port: 80
- hostname: two.example.com
port: 80
Но чего я хочу, так это просто:
backends:
hostnames:
- hostname: one.example.com
port: 80
- hostname: two.example.com
port: 80
Комментарии:
1. Для этого вам нужно удалить
Hostnames
тип и просто использоватьrepeated Hostname hostnames = N;
там, где это необходимо. ОчевидноHostname
, сначала переместите тип на уровень выше.2. В проекте есть другие пользователи, и я хочу принудительно ввести повторяющееся имя хоста, иначе некоторые могут использовать только одно имя хоста. Неужели нет другого выхода?
3. нет; но переход от одного к повторному не невозможен — это не двоичное нарушение на уровне формата, но: в приложениях, которые не используют повторное, будет сохранено только последнее значение