Javascript/NodeJS 中的协议缓冲区字段选项
Protocol Buffer Field Options in Javascript/NodeJS
如何获得与协议缓冲区字段关联的选项?
假设我有一个带有自定义选项的字段,例如:
syntax = "proto3";
package main;
import "google/protobuf/descriptor.proto";
extend google.protobuf.FieldOptions {
bool required = 7000;
}
message Person {
string name = 1 [(required) = true];
}
使用 protoc
生成了 js 文件
protoc -I . *.proto --js_out=import_style=commonjs,binary:js
我已经阅读了如何从 here 中检索其他语言的选项,但在 Javascript 中似乎可以正常工作。
如有任何帮助,我们将不胜感激!
很遗憾,这不受支持。
其他语言在生成的代码中嵌入了原型文件的“描述符”。描述符包含有关消息、其字段以及自定义选项的信息,所有这些均采用二进制 protobuf 格式。参见 descriptor.proto
读取扩展的代码已生成。如果你有一个 FieldDescriptor,你可以阅读你的 FieldOption 扩展。但是你在 Javascript 生成的代码中没有这个描述符。
有一个可能的解决方法:您可以使用 protoc 为您的 .proto 文件转储 FileDescriptorSet(请参阅 --descriptor_set_out
选项)。您可以使用 Javascript(proto.google.protobuf.FileDescriptorSet 来自 google-protobuf)读取此二进制消息,导航到您的消息,到有问题的字段,然后读取您的扩展数据以获取自定义选项值。
如何获得与协议缓冲区字段关联的选项?
假设我有一个带有自定义选项的字段,例如:
syntax = "proto3";
package main;
import "google/protobuf/descriptor.proto";
extend google.protobuf.FieldOptions {
bool required = 7000;
}
message Person {
string name = 1 [(required) = true];
}
使用 protoc
protoc -I . *.proto --js_out=import_style=commonjs,binary:js
我已经阅读了如何从 here 中检索其他语言的选项,但在 Javascript 中似乎可以正常工作。
如有任何帮助,我们将不胜感激!
很遗憾,这不受支持。
其他语言在生成的代码中嵌入了原型文件的“描述符”。描述符包含有关消息、其字段以及自定义选项的信息,所有这些均采用二进制 protobuf 格式。参见 descriptor.proto
读取扩展的代码已生成。如果你有一个 FieldDescriptor,你可以阅读你的 FieldOption 扩展。但是你在 Javascript 生成的代码中没有这个描述符。
有一个可能的解决方法:您可以使用 protoc 为您的 .proto 文件转储 FileDescriptorSet(请参阅 --descriptor_set_out
选项)。您可以使用 Javascript(proto.google.protobuf.FileDescriptorSet 来自 google-protobuf)读取此二进制消息,导航到您的消息,到有问题的字段,然后读取您的扩展数据以获取自定义选项值。