У меня есть экземпляр 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
.