123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- "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"]) {
- // Only use fully qualified type name after the last '/'
- var name = object["@type"].substring(object["@type"].lastIndexOf("/") + 1);
- var type = this.lookup(name);
- /* istanbul ignore else */
- if (type) {
- // type_url does not accept leading "."
- var type_url = object["@type"].charAt(0) === "." ?
- object["@type"].slice(1) : object["@type"];
- // type_url prefix is optional, but path seperator is required
- if (type_url.indexOf("/") === -1) {
- type_url = "/" + type_url;
- }
- return this.create({
- type_url: type_url,
- value: type.encode(type.fromObject(object)).finish()
- });
- }
- }
- return this.fromObject(object);
- },
- toObject: function(message, options) {
- // Default prefix
- var googleApi = "type.googleapis.com/";
- var prefix = "";
- var name = "";
- // decode value if requested and unmapped
- if (options && options.json && message.type_url && message.value) {
- // Only use fully qualified type name after the last '/'
- name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);
- // Separate the prefix used
- prefix = message.type_url.substring(0, 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);
- var messageName = message.$type.fullName[0] === "." ?
- message.$type.fullName.slice(1) : message.$type.fullName;
- // Default to type.googleapis.com prefix if no prefix is used
- if (prefix === "") {
- prefix = googleApi;
- }
- name = prefix + messageName;
- object["@type"] = name;
- return object;
- }
- return this.toObject(message, options);
- }
- };
|