Поработав некоторое время, я решил пересмотреть решение, использующее повторение Any.И вот совет для тех, кто застрял в этом же месте: попробуйте использовать конкретные типы вместо Any
.
Обходной путь для моей ситуации - создавать сообщения типов SpecificTargetSet1
, SpecificTargetSet2
и т. д., которые содержат конкретные цели.Файл прото Task
будет выглядеть так:
message Task {
google.protobuf.Any target_set = 1;
}
Файл протока набора целей:
message SpecificTargetSet1 {
repeated SpecificTarget1 targets = 1;
}
И теперь задача может быть создана таким образом:
target = Target()
target.name = "Some name"
target_set = SpecificTargetSet1()
target_set.targets.append(target)
task = Task()
task.target_set.Pack(target_set)
Я не отмечаю свой ответ как правильный, так как это всего лишь обходной путь.