aliyun-sdk
Version:
Aliyun SDK for JavaScript
77 lines (59 loc) • 2.07 kB
JavaScript
var ALY = require('../core');
var inherit = ALY.util.inherit;
/**
* @api private
*/
ALY.JSON = {};
/**
* @api private
*/
ALY.JSON.Builder = inherit({
constructor: function JSONBuilder(rules, options) {
this.rules = rules;
this.timestampFormat = options.timestampFormat;
},
build: function build(params) {
return JSON.stringify(this.translate(this.rules, params));
},
translate: function translate(rules, value) {
if (value === null || value === undefined) return undefined;
if (rules.type == 'structure') {
// translate structures (hashes with pre-defined keys)
var struct = {};
ALY.util.each.call(this, value, function (memberName, memberValue) {
var memberRules = rules.members[memberName] || {};
var result = this.translate(memberRules, memberValue);
if (result !== undefined) struct[memberName] = result;
});
return struct;
} else if (rules.type == 'list') {
// translate each member of the list
var list = [];
ALY.util.arrayEach.call(this, value, function (memberValue) {
var memberRules = rules.members || {};
var result = this.translate(memberRules, memberValue);
if (result !== undefined) list.push(result);
});
return list;
} else if (rules.type == 'map') {
// translate maps (hashes with user supplied keys)
var map = {};
ALY.util.each.call(this, value, function (memberName, memberValue) {
var memberRules = rules.members || {};
var result = this.translate(memberRules, memberValue);
if (result !== undefined) map[memberName] = result;
});
return map;
} else if (rules.type == 'timestamp') {
var timestampFormat = rules.format || this.timestampFormat;
return ALY.util.date.format(value, timestampFormat);
} else if (rules.type == 'integer') {
return parseInt(value, 10);
} else if (rules.type == 'float') {
return parseFloat(value);
} else {
// all other shapes
return value;
}
}
});