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

#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. нет; но переход от одного к повторному не невозможен — это не двоичное нарушение на уровне формата, но: в приложениях, которые не используют повторное, будет сохранено только последнее значение