我正在尝试编写一个需要我使用自定义选项的协议插件。我定义了自定义选项,如示例所示(https://developers.google.com/protocol-buffers/docs/proto#customoptions):
import "google/protobuf/descriptor.proto";
extend google.protobuf.MessageOptions {
string my_option = 51234;
}
Run Code Online (Sandbox Code Playgroud)
我使用它如下:
message Hello {
bool greeting = 1;
string name = 2;
int32 number = 3;
option (my_option) = "telephone";
}
Run Code Online (Sandbox Code Playgroud)
但是,当我读取已解析的请求时,“Hello”消息的选项字段为空。
我正在执行以下操作来阅读
data = sys.stdin.read()
request = plugin.CodeGeneratorRequest()
request.ParseFromString(data)
Run Code Online (Sandbox Code Playgroud)
当我打印“请求”时,它只是给了我这个
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 {
}
}
Run Code Online (Sandbox Code Playgroud)
如图所示,即使我在 .proto 文件中定义了选项,选项字段仍为空。我定义自定义选项的语法是否不正确?或者是我的protoc版本有问题?
小智 5
我正在制作我的 protobuf python 插件。我也遇到了像你这样的问题,我已经找到了解决方案。
import my_custom_pb2