diffusion
Version:
Diffusion JavaScript client
61 lines (51 loc) • 2.01 kB
JavaScript
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();
};
};