UNPKG

diffusion

Version:

Diffusion JavaScript client

61 lines (51 loc) 2.01 kB
var SchemaBuilder = require('data/record/schema/schema-builder-impl'); module.exports = function SchemaParserImpl(constructor) { this.parse = function(jsonString) { var builder = new SchemaBuilder(constructor); var json; try { json = JSON.parse(jsonString); } catch (e) { throw new Error("Invalid Schema JSON string"); } if (json.records === undefined) { throw new Error("Schema has no records"); } json.records.forEach(function(record) { if (record.occurs !== undefined) { builder.record(record.name, record.occurs); } else { builder.record(record.name, record.min, record.max); } if (record.fields) { record.fields.forEach(function(field) { var min; var max; if (field.occurs !== undefined) { min = field.occurs; max = field.occurs; } else { min = field.min; max = field.max; } var type = field.type || "STRING"; switch (type.toUpperCase()) { case 'STRING' : builder.string(field.name, min, max); break; case 'INTEGER' : builder.integer(field.name, min, max); break; case 'DECIMAL' : var scale = field.scale || 2; builder.decimal(field.name, scale, min, max); break; default : throw new Error("Invalid field type value '" + type + "'"); } }); } }); return builder.build(); }; };