0.0.1 • Published 8 years ago
gen-proto v0.0.1
gen-proto
A tool for generating protobuf files from json descriptions
Installation
npm install -g gen-proto
Usage
gen-proto some/json/file.json
or
require('gen-proto')('some/json/file.json')
File Format
{
filename: String, // file name
syntax: Number, // by default 3 (should be protobuf version 2 or 3)
package: String, // package name
options: {}, // string to string mapping of options
imports: [ // all the import statements
{
filename: String,
public: Boolean // public import?
},
...
],
messages: [ // TODO: allow for nesting of message types later
{
name: String, // name of message type
description: String, // comment to write above the message type definition
schema: [ // message type definition
{
type: String, // type of data
name: String, // name of field
key: Number, // number of field (otherwise default enumeration)
repeated: Boolean, // array?
},
...
]
},
...
],
services: [ // services to include
{
name: String, // name of service
methods: [ // methods to include in service
{
name: String, // name of rpc method
req: String, // name of request message type
res: String, // name of response message type
},
...
]
},
...
]
}
Example
Input
{
"filename": "test/test-output.proto",
"syntax": 2,
"package": "some.package",
"options": {
"some_option": "some_string/some_string"
},
"imports": [
{
"filename": "some/path/to/a/publicly/imported/file",
"public": true
},
{
"filename": "some/path/to/an/imported/file"
}
],
"messages": [
{
"name": "SomeMessageType",
"description": "A simple description of the message type below",
"schema": [
{
"type": "string",
"name": "field1"
},
{
"type": "int32",
"name": "field2",
"repated": true
},
{
"type": "some_type",
"name": "field3",
"repated": true
},
{
"type": "another_type",
"name": "field4",
"key": 777
}
]
}
],
"services": [
{
"name": "SomeService",
"methods": [
{
"name": "SomeMethod",
"req": "SomeMessageType",
"res": "AnotherMessageType"
}
]
},
{
"name": "AnotherService",
"methods": [
{
"name": "AnotherMethod",
"req": "CrazyMessageType",
"res": "CrazierMessageType"
},
{
"name": "LastMethod",
"req": "CraziestMessageType",
"res": "CraziesterMessageType"
}
]
}
]
}
Output
syntax = "proto2";
package some.package;
option some_option = "some_string/some_string";
import public "some/path/to/a/publicly/imported/file";
import "some/path/to/an/imported/file";
// A simple description of the message type below
message SomeMessageType {
string field1 = 1;
int32 field2 = 2;
some_type field3 = 3;
another_type field4 = 777;
}
service SomeService {
rpc SomeMethod(SomeMessageType) returns (AnotherMessageType);
}
service AnotherService {
rpc AnotherMethod(CrazyMessageType) returns (CrazierMessageType);
rpc LastMethod(CraziestMessageType) returns (CraziesterMessageType);
}
0.0.1
8 years ago