protobuf.js
Advanced tools
Comparing version 0.0.8 to 0.0.9
23
index.js
@@ -124,7 +124,10 @@ var fs = require('fs'), | ||
function parseMessage(name, buffer) { | ||
function parseMessage(name, buffer, start, end) { | ||
start = start || 0; | ||
end = end || buffer.length; | ||
var pos = start; | ||
var type, field, varint, len, val, key, ret = {}, schema = self.schema[name]; | ||
while (buffer.length > 0) { | ||
type = buffer[0] & 0x07; | ||
field = buffer[0] >> 3; | ||
while (pos < end) { | ||
type = buffer[pos] & 0x07; | ||
field = buffer[pos] >> 3; | ||
key = Object.keys(schema).filter(function (key) { | ||
@@ -134,3 +137,3 @@ return schema[key].field === field; | ||
if (schema[key].type === 0) { | ||
varint = butils.readVarint(buffer, 1); | ||
varint = butils.readVarint(buffer, pos + 1); | ||
len = varint.bytes + 1; | ||
@@ -140,12 +143,12 @@ val = varint.num; | ||
} else if (schema[key].type === 2) { | ||
varint = butils.readVarint(buffer, 1); | ||
varint = butils.readVarint(buffer, pos + 1); | ||
len = varint.num + varint.bytes + 1; | ||
if (schema[key].raw_type === 'string' || schema[key].raw_type === 'bytes') { | ||
if (key === 'vclock') { | ||
val = buffer.slice(varint.bytes + 1, len); | ||
val = buffer.slice(pos + varint.bytes + 1, pos + len); | ||
} else { | ||
val = butils.readString(buffer, varint.bytes + 1, len); | ||
val = butils.readString(buffer, pos + varint.bytes + 1, pos + len); | ||
} | ||
} else { | ||
val = parseMessage(schema[key].raw_type, buffer.slice(varint.bytes + 1, len)); | ||
val = parseMessage(schema[key].raw_type, buffer, pos + varint.bytes + 1, pos + len); | ||
} | ||
@@ -159,3 +162,3 @@ } | ||
} | ||
buffer = buffer.slice(len); | ||
pos += len; | ||
} | ||
@@ -162,0 +165,0 @@ return ret; |
{ | ||
"name": "protobuf.js", | ||
"version": "0.0.8", | ||
"version": "0.0.9", | ||
"description": "a pure javascript protocol buffer encoding implementation, written specifically for riak", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
Sorry, the diff of this file is not supported yet
10166
199