query_param_serializer.js (2314B)
1 var util = require('../util'); 2 3 function QueryParamSerializer() { 4 } 5 6 QueryParamSerializer.prototype.serialize = function(params, shape, fn) { 7 serializeStructure('', params, shape, fn); 8 }; 9 10 function ucfirst(shape) { 11 if (shape.isQueryName || shape.api.protocol !== 'ec2') { 12 return shape.name; 13 } else { 14 return shape.name[0].toUpperCase() + shape.name.substr(1); 15 } 16 } 17 18 function serializeStructure(prefix, struct, rules, fn) { 19 util.each(rules.members, function(name, member) { 20 var value = struct[name]; 21 if (value === null || value === undefined) return; 22 23 var memberName = ucfirst(member); 24 memberName = prefix ? prefix + '.' + memberName : memberName; 25 serializeMember(memberName, value, member, fn); 26 }); 27 } 28 29 function serializeMap(name, map, rules, fn) { 30 var i = 1; 31 util.each(map, function (key, value) { 32 var prefix = rules.flattened ? '.' : '.entry.'; 33 var position = prefix + (i++) + '.'; 34 var keyName = position + (rules.key.name || 'key'); 35 var valueName = position + (rules.value.name || 'value'); 36 serializeMember(name + keyName, key, rules.key, fn); 37 serializeMember(name + valueName, value, rules.value, fn); 38 }); 39 } 40 41 function serializeList(name, list, rules, fn) { 42 var memberRules = rules.member || {}; 43 44 if (list.length === 0) { 45 fn.call(this, name, null); 46 return; 47 } 48 49 util.arrayEach(list, function (v, n) { 50 var suffix = '.' + (n + 1); 51 if (rules.api.protocol === 'ec2') { 52 // Do nothing for EC2 53 suffix = suffix + ''; // make linter happy 54 } else if (rules.flattened) { 55 if (memberRules.name) { 56 var parts = name.split('.'); 57 parts.pop(); 58 parts.push(ucfirst(memberRules)); 59 name = parts.join('.'); 60 } 61 } else { 62 suffix = '.member' + suffix; 63 } 64 serializeMember(name + suffix, v, memberRules, fn); 65 }); 66 } 67 68 function serializeMember(name, value, rules, fn) { 69 if (value === null || value === undefined) return; 70 if (rules.type === 'structure') { 71 serializeStructure(name, value, rules, fn); 72 } else if (rules.type === 'list') { 73 serializeList(name, value, rules, fn); 74 } else if (rules.type === 'map') { 75 serializeMap(name, value, rules, fn); 76 } else { 77 fn(name, rules.toWireFormat(value).toString()); 78 } 79 } 80 81 module.exports = QueryParamSerializer;