; | |
module.exports = Message; | |
var util = require("./util/minimal"); | |
/** | |
* Constructs a new message instance. | |
* @classdesc Abstract runtime message. | |
* @constructor | |
* @param {Properties<T>} [properties] Properties to set | |
* @template T extends object = object | |
*/ | |
function Message(properties) { | |
// not used internally | |
if (properties) | |
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) | |
this[keys[i]] = properties[keys[i]]; | |
} | |
/** | |
* Reference to the reflected type. | |
* @name Message.$type | |
* @type {Type} | |
* @readonly | |
*/ | |
/** | |
* Reference to the reflected type. | |
* @name Message#$type | |
* @type {Type} | |
* @readonly | |
*/ | |
/*eslint-disable valid-jsdoc*/ | |
/** | |
* Creates a new message of this type using the specified properties. | |
* @param {Object.<string,*>} [properties] Properties to set | |
* @returns {Message<T>} Message instance | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.create = function create(properties) { | |
return this.$type.create(properties); | |
}; | |
/** | |
* Encodes a message of this type. | |
* @param {T|Object.<string,*>} message Message to encode | |
* @param {Writer} [writer] Writer to use | |
* @returns {Writer} Writer | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.encode = function encode(message, writer) { | |
return this.$type.encode(message, writer); | |
}; | |
/** | |
* Encodes a message of this type preceeded by its length as a varint. | |
* @param {T|Object.<string,*>} message Message to encode | |
* @param {Writer} [writer] Writer to use | |
* @returns {Writer} Writer | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.encodeDelimited = function encodeDelimited(message, writer) { | |
return this.$type.encodeDelimited(message, writer); | |
}; | |
/** | |
* Decodes a message of this type. | |
* @name Message.decode | |
* @function | |
* @param {Reader|Uint8Array} reader Reader or buffer to decode | |
* @returns {T} Decoded message | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.decode = function decode(reader) { | |
return this.$type.decode(reader); | |
}; | |
/** | |
* Decodes a message of this type preceeded by its length as a varint. | |
* @name Message.decodeDelimited | |
* @function | |
* @param {Reader|Uint8Array} reader Reader or buffer to decode | |
* @returns {T} Decoded message | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.decodeDelimited = function decodeDelimited(reader) { | |
return this.$type.decodeDelimited(reader); | |
}; | |
/** | |
* Verifies a message of this type. | |
* @name Message.verify | |
* @function | |
* @param {Object.<string,*>} message Plain object to verify | |
* @returns {string|null} `null` if valid, otherwise the reason why it is not | |
*/ | |
Message.verify = function verify(message) { | |
return this.$type.verify(message); | |
}; | |
/** | |
* Creates a new message of this type from a plain object. Also converts values to their respective internal types. | |
* @param {Object.<string,*>} object Plain object | |
* @returns {T} Message instance | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.fromObject = function fromObject(object) { | |
return this.$type.fromObject(object); | |
}; | |
/** | |
* Creates a plain object from a message of this type. Also converts values to other types if specified. | |
* @param {T} message Message instance | |
* @param {IConversionOptions} [options] Conversion options | |
* @returns {Object.<string,*>} Plain object | |
* @template T extends Message<T> | |
* @this Constructor<T> | |
*/ | |
Message.toObject = function toObject(message, options) { | |
return this.$type.toObject(message, options); | |
}; | |
/** | |
* Converts this message to JSON. | |
* @returns {Object.<string,*>} JSON object | |
*/ | |
Message.prototype.toJSON = function toJSON() { | |
return this.$type.toObject(this, util.toJSONOptions); | |
}; | |
/*eslint-enable valid-jsdoc*/ |