git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

rest_xml.js (2371B)


      1 var AWS = require('../core');
      2 var util = require('../util');
      3 var Rest = require('./rest');
      4 
      5 function populateBody(req) {
      6   var input = req.service.api.operations[req.operation].input;
      7   var builder = new AWS.XML.Builder();
      8   var params = req.params;
      9 
     10   var payload = input.payload;
     11   if (payload) {
     12     var payloadMember = input.members[payload];
     13     params = params[payload];
     14     if (params === undefined) return;
     15 
     16     if (payloadMember.type === 'structure') {
     17       var rootElement = payloadMember.name;
     18       req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);
     19     } else { // non-xml payload
     20       req.httpRequest.body = params;
     21     }
     22   } else {
     23     req.httpRequest.body = builder.toXML(params, input, input.name ||
     24       input.shape || util.string.upperFirst(req.operation) + 'Request');
     25   }
     26 }
     27 
     28 function buildRequest(req) {
     29   Rest.buildRequest(req);
     30 
     31   // never send body payload on GET/HEAD
     32   if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {
     33     populateBody(req);
     34   }
     35 }
     36 
     37 function extractError(resp) {
     38   Rest.extractError(resp);
     39 
     40   var data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());
     41   if (data.Errors) data = data.Errors;
     42   if (data.Error) data = data.Error;
     43   if (data.Code) {
     44     resp.error = util.error(new Error(), {
     45       code: data.Code,
     46       message: data.Message
     47     });
     48   } else {
     49     resp.error = util.error(new Error(), {
     50       code: resp.httpResponse.statusCode,
     51       message: null
     52     });
     53   }
     54 }
     55 
     56 function extractData(resp) {
     57   Rest.extractData(resp);
     58 
     59   var parser;
     60   var req = resp.request;
     61   var body = resp.httpResponse.body;
     62   var operation = req.service.api.operations[req.operation];
     63   var output = operation.output;
     64 
     65   var payload = output.payload;
     66   if (payload) {
     67     var payloadMember = output.members[payload];
     68     if (payloadMember.isStreaming) {
     69       resp.data[payload] = body;
     70     } else if (payloadMember.type === 'structure') {
     71       parser = new AWS.XML.Parser();
     72       resp.data[payload] = parser.parse(body.toString(), payloadMember);
     73     } else {
     74       resp.data[payload] = body.toString();
     75     }
     76   } else if (body.length > 0) {
     77     parser = new AWS.XML.Parser();
     78     var data = parser.parse(body.toString(), output);
     79     util.update(resp.data, data);
     80   }
     81 }
     82 
     83 module.exports = {
     84   buildRequest: buildRequest,
     85   extractError: extractError,
     86   extractData: extractData
     87 };