core
Version:
Core Libs
175 lines (159 loc) • 4.24 kB
JavaScript
/**
* @overview JsonRpcResponse
* @copyright Dreamlab Onet.pl sp. z. o o 2012
*/
var JsonRpcAbstract = require("./JsonRpcAbstract.js").JsonRpcAbstract;
var JsonRpcError = require('./JsonRpcError.js').JsonRpcError;
/**
* @class JsonRpcResponse
* @classdesc JsonRpcResponse
* @extends JsonRpcAbstract
*
* @requires JsonRpcAbstract
* @requires JsonRpcError
*
* @param {Number} id
* @param {Object} result
* @param {Object} error
* @returns {JsonRpcResponse}
*
* @example empty object: new JsonRpcResponse()
* @example specifining parameters: new JsonRpcResponse(id, result, error);
* @example from object literal: new JsonRpcResponse({'id': 1, 'result': Object, 'error': {'code': -1, 'message': 'msg', 'data': 'some data'}});
* @example from json string: new JsonRpcResponse("{'id': 1, 'result': Object, 'error': {'code': -1, 'message': 'msg', 'data': 'some data'}}");
*/
var JsonRpcResponse = function (id, result, error) {
this._id = null;
this._result = null;
this._error = null;
JsonRpcAbstract.apply(this, arguments);
};
JsonRpcResponse.prototype = Object.create(JsonRpcAbstract.prototype);
/**
* Initialize object from object literal
* @param {Array} args object literal in format: [id:Number, result:Object, error:Object]
* @return {undefined}
* @throws JsonRpcAbstract.Exceptions.INVALID_JSON_RPC
* @method
* @private
*/
JsonRpcResponse.prototype._init = function (args) {
if (args[0]) {
this.setId(args[0]);
} else {
throw new Error(JsonRpcAbstract.Exceptions.INVALID_JSON_RPC);
}
if (typeof args[1] !== 'undefined') {
this.setResult(args[1]);
}
if (typeof args[2] !== 'undefined') {
this.setError(new JsonRpcError(args[2]));
}
};
/**
* Parses response json into array of parameters
* @param {Object} json object literal in format: {'id':Number, 'result':Object, 'error': Object}
* @return {Array}
* @method
* @private
*/
JsonRpcResponse.prototype._parse = function (json) {
return [
json.id,
json.result,
json.error
];
};
/**
* Sets JsonRpc Id
* @param {Number} id
* @returns {JsonRpcResponse}
* @throws Id should be a string
* @method
*/
JsonRpcResponse.prototype.setId = function (id) {
if (typeof id !== 'string') {
throw new Error("Id should be a String");
}
this._id = id;
return this;
};
/**
* Returns JsonRpc Id
* @returns {Number}
* @method
*/
JsonRpcResponse.prototype.getId = function () {
return this._id;
};
/**
* Sets JsonRpc result object
* @param {Object} result
* @returns {JsonRpcResponse}
* @method
*/
JsonRpcResponse.prototype.setResult = function (result) {
this._result = result;
return this;
};
/**
* Returns JsonRpc result object
* @returns {Object}
* @method
*/
JsonRpcResponse.prototype.getResult = function () {
return this._result;
};
/**
* Sets JsonRpc error
*
* @param {Number|JsonRpcError} code
* @param {String} message
* @param {Object} data
*
* @returns {JsonRpcResponse}
* @example jsonRpcResponse.setError(-1, 'msg', 'data');
* @example jsonRpcResponse.setError(new JsonRpcError(-1, 'msg', 'data'));
* @method
*/
JsonRpcResponse.prototype.setError = function (code, message, data) {
if (code instanceof JsonRpcError) {
this._error = code;
} else {
this._error = new JsonRpcError(code, message, data);
}
return this;
};
/**
* Returns JsonRpc error
* @returns {JsonRpcError}
* @method
*/
JsonRpcResponse.prototype.getError = function () {
return this._error;
};
/**
* Determines if JsonRpc response has error in it
* @method
* @returns {Boolean}
*/
JsonRpcResponse.prototype.isError = function () {
return this._error !== null;
};
/**
* Returns JSON representation of a jsonrpc response
* @method
* @returns {Object} in format: {jsonrpc: "1.1", id: 20, result:Object, error: {code: -1, message: 'msg', data: 'data'}}
*/
JsonRpcResponse.prototype.toJson = function () {
var jsonObj = {
jsonrpc: this._jsonrpc,
id: this._id,
result: this._result
};
if (this._error) {
jsonObj.error = this._error.toJson();
}
return jsonObj;
};
exports.JsonRpcResponse = JsonRpcResponse;