123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- var util = require('../util');
- function QueryParamSerializer() {
- }
- QueryParamSerializer.prototype.serialize = function(params, shape, fn) {
- serializeStructure('', params, shape, fn);
- };
- function ucfirst(shape) {
- if (shape.isQueryName || shape.api.protocol !== 'ec2') {
- return shape.name;
- } else {
- return shape.name[0].toUpperCase() + shape.name.substr(1);
- }
- }
- function serializeStructure(prefix, struct, rules, fn) {
- util.each(rules.members, function(name, member) {
- var value = struct[name];
- if (value === null || value === undefined) return;
- var memberName = ucfirst(member);
- memberName = prefix ? prefix + '.' + memberName : memberName;
- serializeMember(memberName, value, member, fn);
- });
- }
- function serializeMap(name, map, rules, fn) {
- var i = 1;
- util.each(map, function (key, value) {
- var prefix = rules.flattened ? '.' : '.entry.';
- var position = prefix + (i++) + '.';
- var keyName = position + (rules.key.name || 'key');
- var valueName = position + (rules.value.name || 'value');
- serializeMember(name + keyName, key, rules.key, fn);
- serializeMember(name + valueName, value, rules.value, fn);
- });
- }
- function serializeList(name, list, rules, fn) {
- var memberRules = rules.member || {};
- if (list.length === 0) {
- fn.call(this, name, null);
- return;
- }
- util.arrayEach(list, function (v, n) {
- var suffix = '.' + (n + 1);
- if (rules.api.protocol === 'ec2') {
- // Do nothing for EC2
- suffix = suffix + ''; // make linter happy
- } else if (rules.flattened) {
- if (memberRules.name) {
- var parts = name.split('.');
- parts.pop();
- parts.push(ucfirst(memberRules));
- name = parts.join('.');
- }
- } else {
- suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;
- }
- serializeMember(name + suffix, v, memberRules, fn);
- });
- }
- function serializeMember(name, value, rules, fn) {
- if (value === null || value === undefined) return;
- if (rules.type === 'structure') {
- serializeStructure(name, value, rules, fn);
- } else if (rules.type === 'list') {
- serializeList(name, value, rules, fn);
- } else if (rules.type === 'map') {
- serializeMap(name, value, rules, fn);
- } else {
- fn(name, rules.toWireFormat(value).toString());
- }
- }
- /**
- * @api private
- */
- module.exports = QueryParamSerializer;
|