-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathindex.js
More file actions
39 lines (31 loc) · 919 Bytes
/
index.js
File metadata and controls
39 lines (31 loc) · 919 Bytes
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
"use strict";
var parse = require('./src/parser')
function buildMessageFromAST(message, ast) {
ast.map(function(entry) {
var value;
var field = message.$type.getChild(entry.name)
if (entry.type === 'pair') {
value = entry.value;
} else if (entry.type === 'message') {
var ChildMessageClass = field.resolvedType.build();
var value = new ChildMessageClass();
buildMessageFromAST(value, entry.values);
}
if (field.repeated) {
message.add(entry.name, value);
} else {
message.set(entry.name, value);
}
});
};
module.exports.encode = require('./src/encoder');
module.exports.parse = function(builder, fqn, input) {
var MessageClass = builder.build(fqn)
, message = new MessageClass();
var result = parse(input);
if (result.status) {
buildMessageFromAST(message, result.value);
result.message = message;
}
return result;
};