1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
- /**
- * Wrappers for common types.
- * @type {Object.<string,IWrapper>}
- * @const
- */
- var wrappers = exports;
- var Message = require("./message");
- /**
- * From object converter part of an {@link IWrapper}.
- * @typedef WrapperFromObjectConverter
- * @type {function}
- * @param {Object.<string,*>} object Plain object
- * @returns {Message<{}>} Message instance
- * @this Type
- */
- /**
- * To object converter part of an {@link IWrapper}.
- * @typedef WrapperToObjectConverter
- * @type {function}
- * @param {Message<{}>} message Message instance
- * @param {IConversionOptions} [options] Conversion options
- * @returns {Object.<string,*>} Plain object
- * @this Type
- */
- /**
- * Common type wrapper part of {@link wrappers}.
- * @interface IWrapper
- * @property {WrapperFromObjectConverter} [fromObject] From object converter
- * @property {WrapperToObjectConverter} [toObject] To object converter
- */
- // Custom wrapper for Any
- wrappers[".google.protobuf.Any"] = {
- fromObject: function(object) {
- // unwrap value type if mapped
- if (object && object["@type"]) {
- var type = this.lookup(object["@type"]);
- /* istanbul ignore else */
- if (type) {
- // type_url does not accept leading "."
- var type_url = object["@type"].charAt(0) === "." ?
- object["@type"].substr(1) : object["@type"];
- // type_url prefix is optional, but path seperator is required
- return this.create({
- type_url: "/" + type_url,
- value: type.encode(type.fromObject(object)).finish()
- });
- }
- }
- return this.fromObject(object);
- },
- toObject: function(message, options) {
- // decode value if requested and unmapped
- if (options && options.json && message.type_url && message.value) {
- // Only use fully qualified type name after the last '/'
- var name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);
- var type = this.lookup(name);
- /* istanbul ignore else */
- if (type)
- message = type.decode(message.value);
- }
- // wrap value if unmapped
- if (!(message instanceof this.ctor) && message instanceof Message) {
- var object = message.$type.toObject(message, options);
- object["@type"] = message.$type.fullName;
- return object;
- }
- return this.toObject(message, options);
- }
- };
|