function updateSpecFromArgs({ shim, fn, fnName, args, spec, ctx }) {
  let msgDesc = null
  if (shim.isFunction(spec)) {
    msgDesc = spec.call(ctx, shim, fn, fnName, args)
  } else {
    msgDesc = spec
  }

  const destNameIsArg = shim.isNumber(msgDesc.destinationName)
  if (destNameIsArg) {
    const destIdx = shim.normalizeIndex(args.length, msgDesc.destinationName)
    if (destIdx !== null) {
      msgDesc.destinationName = args[destIdx]
    }
  }

  return msgDesc
}
Generates the spec for the consumer

@private
@param {object} params to function
@param {MessageShim} params.shim instance of shim
@param {Function} params.fn consumer function
@param {string} params.fnName name of function
@param {Array} params.args arguments passed to original consume function
@param {Object} params.ctx this binding of the original function
@param {specs.MessageSpec} params.spec spec for the wrapped consume function
@returns {specs.MessageSpec} new spec