-
Notifications
You must be signed in to change notification settings - Fork 29
/
README
74 lines (55 loc) · 2.65 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Protojs is a BSD-licensed protocol buffer library written in JavaScript.
https://github.com/sirikata/protojs
==== Features:
* Fast compiler using ANTLR
* Packed field + 2.3.0 autodetection
* Full Unicode support (decoding surrogate pairs above 0xffff)
* Getters+setters for error checking (and fallback if not supported)
* Enums and nested messages
* 32-bit and 64-bit floating points
* Serializing/deserializing to base64 or array of int
* PBJ datatypes (uuid, vector, quaternion, normal) defined in pbj.js
==== Bugs or missing features:
* Does not enforce "required", acts the same as "optional"
* Default values are not used
* Setting a field in a sub-message will not cause the sub-message to be
serialized, as the python parser worked before 2.3.0
* It is not possible to serialize to binary string in a cross-browser way,
because Javascript uses unicode strings. However, the Stream class can
be extended for specific applications
* No support for extensions or services
* Not compatible with older versions of protobufs
==== Building protojs:
The build process is tested on Linux, and should work also on mac or cygwin:
First, run "./bootstrap.sh"
This script downloads antlr-3.2 from antlr.org.
Now, run "make"
Builds the "pbj" compiler and a test file from protocol/ into output/
If you want to use the makefile you can put your own .proto files into
protocol/. You can also run the pbj file with "pbj input.proto output.proto"
If you want to build a directory full of protocol files, run it with "make INPUTDIR=/path/to/protocol". You can optionally specify OUTPUTDIR if you don't want them to go to output.
==== Using the javascript library:
The javascript library is intended to be as similar as possible to python
protocol buffers.
If you have declared the package Example.Test, and made a message called
HelloWorld, you can create a message with:
var mymsg = new Example.Test.HelloWorld;
mymsg.field1 = "value1";
mymsg.inner_msg.field2 = 5;
var newmsg = mymsg.repeated_msg.push();
newmsg.field2 = 6;
newmsg.field3.push(1)
newmsg.field3.push(2)
newmsg.field3.push(3)
To serialize the message, you must create an instance of a class that
extends PROTO.Stream.
var serialized = new PROTO.Base64Stream;
mymsg.SerializeToStream(serialized);
document.write(serialized.getString());
Note that the function names are ParseFromStream and SerializeToStream, not
ParseFromString or ParseFromArray as in python or C++. This is because
javascript strings are encoded in UTF-16 and cannot handle binary data.
==== Reporting bugs:
Send mail to Patrick Horn <[email protected]>, or find me at
irc.freenode.net #sirikata
If you have a cool feature to add, feel free to fork the project.