-
Notifications
You must be signed in to change notification settings - Fork 29
Protobuf implementation in javascript
License
danielrh/protojs
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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.
About
Protobuf implementation in javascript
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published