В прототипе, как я могу определить карту как пользовательскую опцию

В моем прото-файле я хочу определить карту как пользовательскую опцию, пробовал несколько вещей, но ничего не работает.

мой прото-файл метаданных:

syntax = "proto2";
import "google/protobuf/descriptor.proto";

package com.util;
option java_package = "com.util";

message MyMeta {
  optional bool needValidation = 1;
  map<string, string> fileMap = 2;
}

extend google.protobuf.FieldOptions {
  optional MyMeta meta = 80412; 
}

мой прото файл

syntax = "proto3";

package com.test;

import "util/meta.proto";
import "google/protobuf/timestamp.proto";

message MyMeta {
  int32 id = 1 [(com.util.meta).needValidation = false, /*looking for a way to set a map (com.meta).tableOptions = {"t,raw_orders"}]*/;

}

Это возможно?


person JDev    schedule 02.04.2020    source источник


Ответы (2)


Это работает:

message MyMeta {
  int32 id = 1 [
        (com.util.meta) = {
                needValidation: false,
                fileMap: [
                        {
                                key: "t",
                                value: "raw_orders"
                        }
                ];
        }];
}

Протобуф map — это синтаксический сахар для поля repeated сообщений ввода карты с полями key и value. 1

В вашем случае ваше метасообщение

message MyMeta {
  optional bool needValidation = 1;
  map<string, string> fileMap = 2;
}

эквивалентно

message MyMeta {
  optional bool needValidation = 1;

  message FileMapEntry {
    string key = 1;
    string value = 2;
  }
  repeated FileMapEntry fileMap = 2;
}

Конечно, было бы намного лучше, если бы был более очевидный способ указать значение карты в опции.

person Alexander Klauer    schedule 10.09.2020

Кажется, это невозможно. Чтобы сделать мою логику, я создал строку типа «StoreOrders:raw_orders_test,OrderItems:raw_order_items_test


message MyMeta {
  int32 id = 1 [(com.util.meta).needValidation = false, (com.meta).tableOptions = "TableA:valueA,TableB:valueB;
}

и в моем коде jav и разбиении строки для создания хэш-карты.

person JDev    schedule 02.04.2020