You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
"use strict"; |
|
|
|
var DecoratorAscoltatore = require("./decorator_ascoltatore"); |
|
var util = require("./util"); |
|
var debug = require("debug")("ascoltatori:json"); |
|
|
|
/** |
|
* An Ascoltatore decorator to publish messages on a |
|
* parent Ascoltatore with a prefix. |
|
* |
|
* @param {AbstractAscoltatore} ascoltatore |
|
* @api public |
|
*/ |
|
function JSONAscoltatore(ascoltatore) { |
|
DecoratorAscoltatore.call(this, ascoltatore); |
|
} |
|
|
|
/** |
|
* See AbstractAscoltatore for the public API definitions. |
|
* |
|
* @api private |
|
*/ |
|
JSONAscoltatore.prototype = Object.create(DecoratorAscoltatore.prototype); |
|
|
|
JSONAscoltatore.prototype.wrapCallback = function(callback, next) { |
|
var that = this; |
|
if (!callback._json_ascoltatore_wrapper) { |
|
callback._json_ascoltatore_wrapper = function(t, payload, options) { |
|
debug("converting from JSON"); |
|
var errored = false; |
|
|
|
try { |
|
payload = JSON.parse(payload); |
|
} catch (e) { |
|
errored = true; |
|
debug("The payload is not a valid JSON", e); |
|
} |
|
|
|
if (!errored) { |
|
callback(t, payload, options); |
|
} |
|
}; |
|
} |
|
next(null, callback._json_ascoltatore_wrapper); |
|
}; |
|
|
|
JSONAscoltatore.prototype.wrapPayload = function(payload, next) { |
|
|
|
if (payload === undefined || payload === null) { |
|
payload = false; // so we can convert it to JSON |
|
} |
|
|
|
debug("converting to JSON"); |
|
next(null, JSON.stringify(payload)); |
|
}; |
|
|
|
/** |
|
* Exports the JSONAscoltatore. |
|
* |
|
* @api public |
|
*/ |
|
module.exports = JSONAscoltatore;
|
|
|