Skip to content

Commit c079c90

Browse files
committed
Post-merge; Reader/Writer example
1 parent 8d7bb1f commit c079c90

File tree

12 files changed

+89
-21
lines changed

12 files changed

+89
-21
lines changed

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,33 @@ var message = new AwesomeMessage({ awesomeField: "AwesomeString" });
166166

167167
Custom classes are automatically populated with static `encode`, `encodeDelimited`, `decode`, `decodeDelimited` and `verify` methods and reference their reflected type via the `$type` property. Note that there are no methods (just `$type`) on instances by default as method names might conflict with field names.
168168

169+
### Using the Reader/Writer interface directly
170+
171+
While meant for the adventurous, it's also possible to use the Reader/Writer interface directly to build custom encoders and decoders that work accross modern to ancient browsers and, of course, node:
172+
173+
```js
174+
var writer = protobuf.Writer.create();
175+
var buffer = writer
176+
.int32(/* id */ 1 << 3 | /* wireType */ 2)
177+
.string("hello world!")
178+
.finish();
179+
180+
var reader = protobuf.Reader.create(buffer);
181+
while (reader.pos < reader.len) {
182+
var tag = reader.int32();
183+
switch (/* id */ tag >>> 3) {
184+
case 1:
185+
console.log(reader.string());
186+
break;
187+
default:
188+
reader.skipType(/* wireType */ tag & 7);
189+
break;
190+
}
191+
}
192+
```
193+
194+
You can take pretty much any generated code snippet as a reference. Easy ways to obtain these are either setting `protobuf.util.codegen.verbose = true` while watching the magic as it happens, or simply inspecting [generated static code](https://github.com/dcodeIO/protobuf.js#command-line).
195+
169196
### Using services
170197

171198
```protobuf

dist/protobuf.js

Lines changed: 16 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.min.js.gz

52 Bytes
Binary file not shown.

dist/protobuf.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/runtime/protobuf.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/runtime/protobuf.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/runtime/protobuf.min.js.gz

0 Bytes
Binary file not shown.

examples/reader-writer.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var protobuf = require("..");
2+
3+
var writer = protobuf.Writer.create();
4+
var buffer = writer
5+
.int32(1 << 3 | 2) // id 1, wireType 2
6+
.string("hello world!")
7+
.finish();
8+
9+
var reader = protobuf.Reader.create(buffer);
10+
while (reader.pos < reader.len) {
11+
var tag = reader.int32();
12+
switch (tag>>>3) {
13+
case 1:
14+
console.log(reader.string());
15+
break;
16+
default:
17+
reader.skipType(tag&7);
18+
break;
19+
}
20+
}

0 commit comments

Comments
 (0)