code: function(k) {
          var ctx = u.context(SMALL);
          logger.debugf('Invoke getWithMetadata(msgId=%d,key=%s)', ctx.id, u.str(k));
          var decoder = p.decodeWithMeta();
          return futureKey(ctx, 0x1B, k, p.encodeKey(k), decoder);
        }
docs: Metadata value.
  
  @typedef {Object} MetadataValue
  @property {(String|Object)} value - Value associated with the key
  @property {Buffer} version - Version of the value as a byte buffer.
  @property {Number} lifespan - Lifespan of entry, defined in seconds.
  If the entry is immortal, it would be -1.
  @property {Number} maxIdle - Max idle time of entry, defined in seconds.
  If the entry is no transient, it would be -1.
  @since 0.3
   
  Get the value and metadata associated with the given key parameter.
  
  @param k {(String|Object)} Key to retrieve.
  @returns {module:promise.Promise.<?MetadataValue>}
  A promise that will be completed with the value and metadata
  associated with the key, or undefined if the value is not present.
  @memberof Client#
  @since 0.3