73 lines
3.4 KiB
Markdown
73 lines
3.4 KiB
Markdown
protobufjs/ext/descriptor
|
|
=========================
|
|
|
|
Experimental extension for interoperability with [descriptor.proto](https://github.com/google/protobuf/blob/master/src/google/protobuf/descriptor.proto) types.
|
|
|
|
Usage
|
|
-----
|
|
|
|
```js
|
|
var protobuf = require("protobufjs"), // requires the full library
|
|
descriptor = require("protobufjs/ext/descriptor");
|
|
|
|
var root = ...;
|
|
|
|
// convert any existing root instance to the corresponding descriptor type
|
|
var descriptorMsg = root.toDescriptor("proto2");
|
|
// ^ returns a FileDescriptorSet message, see table below
|
|
|
|
// encode to a descriptor buffer
|
|
var buffer = descriptor.FileDescriptorSet.encode(descriptorMsg).finish();
|
|
|
|
// decode from a descriptor buffer
|
|
var decodedDescriptor = descriptor.FileDescriptorSet.decode(buffer);
|
|
|
|
// convert any existing descriptor to a root instance
|
|
root = protobuf.Root.fromDescriptor(decodedDescriptor);
|
|
// ^ expects a FileDescriptorSet message or buffer, see table below
|
|
|
|
// and start all over again
|
|
```
|
|
|
|
API
|
|
---
|
|
|
|
The extension adds `.fromDescriptor(descriptor[, syntax])` and `#toDescriptor([syntax])` methods to reflection objects and exports the `.google.protobuf` namespace of the internally used `Root` instance containing the following types present in descriptor.proto:
|
|
|
|
| Descriptor type | protobuf.js type | Remarks
|
|
|-------------------------------|------------------|---------
|
|
| **FileDescriptorSet** | Root |
|
|
| FileDescriptorProto | | dependencies are not supported
|
|
| FileOptions | |
|
|
| FileOptionsOptimizeMode | |
|
|
| SourceCodeInfo | | not supported
|
|
| SourceCodeInfoLocation | |
|
|
| GeneratedCodeInfo | | not supported
|
|
| GeneratedCodeInfoAnnotation | |
|
|
| **DescriptorProto** | Type |
|
|
| MessageOptions | |
|
|
| DescriptorProtoExtensionRange | |
|
|
| DescriptorProtoReservedRange | |
|
|
| **FieldDescriptorProto** | Field |
|
|
| FieldDescriptorProtoLabel | |
|
|
| FieldDescriptorProtoType | |
|
|
| FieldOptions | |
|
|
| FieldOptionsCType | |
|
|
| FieldOptionsJSType | |
|
|
| **OneofDescriptorProto** | OneOf |
|
|
| OneofOptions | |
|
|
| **EnumDescriptorProto** | Enum |
|
|
| EnumOptions | |
|
|
| EnumValueDescriptorProto | |
|
|
| EnumValueOptions | | not supported
|
|
| **ServiceDescriptorProto** | Service |
|
|
| ServiceOptions | |
|
|
| **MethodDescriptorProto** | Method |
|
|
| MethodOptions | |
|
|
| UninterpretedOption | | not supported
|
|
| UninterpretedOptionNamePart | |
|
|
|
|
Note that not all features of descriptor.proto translate perfectly to a protobuf.js root instance. A root instance has only limited knowlege of packages or individual files for example, which is then compensated by guessing and generating fictional file names.
|
|
|
|
When using TypeScript, the respective interface types can be used to reference specific message instances (i.e. `protobuf.Message<IDescriptorProto>`).
|