Как изменить сгенерированный дескриптор - PullRequest
0 голосов
/ 24 июня 2019

У меня есть экземпляр Descriptors.Descriptor, и я хотел бы добавить к нему несколько полей метаданных.

Предположим, что наш дескриптор в настоящее время имеет следующие поля: name и address.

Я хотел бы добавить поле типа user_id

В классе Descriptors.Descriptor нет доступных функций установки, поэтому я преобразовал его в DescriptorProto, а затем в Builder.

Код:

descriptor = descriptor.toProto().toBuilder()
           .addField(FieldDescriptorProto.newBuilder().setNumber(my_index)                .setType(Descriptors.FieldDescriptor.Type.INT64.toProto()).setName("user_id"))
.getDescriptor();

Когда я делаю это, дескриптор содержит несколько странных полей, таких как:

0: Descriptors$FieldDescriptor@254 "google.protobuf.DescriptorProto.name"
1: Descriptors$FieldDescriptor@154 "google.protobuf.DescriptorProto.field"
2: Descriptors$FieldDescriptor@207 "google.protobuf.DescriptorProto.extension"
3: Descriptors$FieldDescriptor@208 "google.protobuf.DescriptorProto.nested_type"
4: Descriptors$FieldDescriptor@209 "google.protobuf.DescriptorProto.enum_type"
5: Descriptors$FieldDescriptor@210 "google.protobuf.DescriptorProto.extension_range"
6: Descriptors$FieldDescriptor@211 "google.protobuf.DescriptorProto.oneof_decl"
7: Descriptors$FieldDescriptor@212 "google.protobuf.DescriptorProto.options"
8: Descriptors$FieldDescriptor@213 "google.protobuf.DescriptorProto.reserved_range"
9: Descriptors$FieldDescriptor@214 "google.protobuf.DescriptorProto.reserved_name"

Таким образом, вместо добавления полей полностью изменяется дескриптор.

Есть ли способ добавить поля в дескриптор? Ожидаемый результат заключается в том, что если я сделаю descriptor.getFields(), то получу три результата, в которые также включено поле user_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...