From 1cda2ffb5fd7955451eaa5023ea7048af938fd14 Mon Sep 17 00:00:00 2001 From: Daniel McCartney Date: Fri, 4 Dec 2015 23:37:20 -0800 Subject: [PATCH] add method for adding synthetic fields to messages --- lib/descriptors/MessageDescriptor.js | 13 +++++++++++++ tests/project_test.js | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/descriptors/MessageDescriptor.js b/lib/descriptors/MessageDescriptor.js index 6197543..960ccc4 100644 --- a/lib/descriptors/MessageDescriptor.js +++ b/lib/descriptors/MessageDescriptor.js @@ -5,6 +5,7 @@ var util = require('util') var Descriptor = require('./Descriptor') +var FieldDescriptor = require('./FieldDescriptor') var OneofDescriptor = require('./OneofDescriptor') var helper = require('../helper') @@ -97,6 +98,18 @@ MessageDescriptor.prototype.addField = function (field) { return this } +/** + * Adds a synthetic field to this message + * e.g. for use by a post-processor to add another field to a message after parsing before compiling + * + * @param {string|FieldType} type The synthetic field type, e.g. string or int32 + * @param {string} name The field name + * @param {number} tag The tag number for this field + * @return {MessageDescriptor} + */ +MessageDescriptor.prototype.addSyntheticField = function (type, name, tag) { + return this.addField(new FieldDescriptor(type, name, tag)) +} /** * @param {string} name diff --git a/tests/project_test.js b/tests/project_test.js index 97a0069..2b39b8a 100644 --- a/tests/project_test.js +++ b/tests/project_test.js @@ -131,6 +131,18 @@ builder.add(function testRemoveField(test) { test.done() }) +builder.add(function testAddSyntheticField(test) { + var project = new Project(baseDir) + .addProto('protos/common.proto') + + var color = project.getProtos('protos/common.proto')[0].getMessage('Color') + test.equal(3, color.toTemplateObject().fields.length) + + color.addSyntheticField('int32', 'alpha', 4) + test.equal(4, color.toTemplateObject().fields.length) + test.done() +}) + builder.add(function testTypeResolution(test) { var project = new Project(baseDir) .addProto('protos/person.proto')