私はカスタムオプションを使用する必要があるprotocプラグインを作成しようとしています。例(https://developers.google.com/protocol-buffers/docs/proto#customoptions)に示すように、私は私のカスタムオプションを定義した:カスタムprotocプラグインの解析がカスタムオプションで機能しない
import "google/protobuf/descriptor.proto";
extend google.protobuf.MessageOptions {
string my_option = 51234;
}
次のように私はそれを使用する:
message Hello {
bool greeting = 1;
string name = 2;
int32 number = 3;
option (my_option) = "telephone";
}
私が解析された要求を読んだときただし、オプションフィールドが空いたとき"こんにちは"メッセージ。
私が見て、オプションフィールドは、私はオプションを定義していても空であるとして、私は「要求、」それはちょうど私にこの
を与えるmessage_type {
name: "Hello"
field {
name: "greeting"
number: 1
label: LABEL_REQUIRED
type: TYPE_BOOL
json_name: "greeting"
}
field {
name: "name"
number: 2
label: LABEL_REQUIRED
type: TYPE_STRING
json_name: "name"
}
field {
name: "number"
number: 3
label: LABEL_OPTIONAL
type: TYPE_INT32
json_name: "number"
}
options {
}
}
を印刷するとき
data = sys.stdin.read()
request = plugin.CodeGeneratorRequest()
request.ParseFromString(data)
を読むために次のことをやっています私の.protoファイルにあります。カスタムオプションを定義するために私の構文が間違っていますか?それとも、私のバージョンのprotocに問題がありますか?
データはoptionsオブジェクトの* extensions *です。拡張APIを使用しましたか?カスタムオプションを読み込むには、拡張APIを使用する必要があります。それが存在するかどうかを確認するには、descriptor-set-outputを使用してファイルをhttps://protogen.marcgravell.com/decodeにアップロードします。すべてのフィールドを表示するために任意のファイルを取り出します。 –
@MarcGravell!私は拡張APIを使いこなしてきましたが、オプションに加えられた拡張をリストアップすることはできません。これは私がこれまで持っていたものです。あなたはそのオブジェクト内の要素にアクセスする手助けをしてもらえますか? 'd = msg.DESCRIPTOR.GetOptions()。拡張子' msgは私のプロトファイル内のメッセージです – staleMilk
まあ、どの言語/フレームワークを使用していますか?拡張にアクセスするための構文は、それに依存します。 C++の例がここにあります:https://developers.google.com/protocol-buffers/docs/proto#extensions –