docs: function reportManualError(err, request, additionalMessage, callback) {
      if (isString(request)) {
        // no request given
        callback = additionalMessage;
        additionalMessage = request;
        request = undefined;
      } else if (isFunction(request)) {
        // neither request nor additionalMessage given
        callback = request;
        request = undefined;
        additionalMessage = undefined;
      }
  
      if (isFunction(additionalMessage)) {
        callback = additionalMessage;
        additionalMessage = undefined;
      }
  
      var em = new ErrorMessage();
      em.setServiceContext(config.getServiceContext().service,
                           config.getServiceContext().version);
  
      errorHandlerRouter(err, em);
  
      if (isObject(request)) {
        em.consumeRequestInformation(manualRequestInformationExtractor(request));
      }
  
      if (isString(additionalMessage)) {
        em.setMessage(additionalMessage);
      }
  
      client.sendError(em, callback);
      return em;
    }