/**
  * @param \Exception  $exception
  * @param string|null $id
  *
  * @return ErrorResponse
  */
 public function createForException(\Exception $exception, $id = null)
 {
     switch (true) {
         case $exception instanceof ParseException:
             return ErrorResponse::parseError($exception->getMessage() ?: 'Parse error');
         case $exception instanceof InvalidRequestException:
             return ErrorResponse::invalidRequestError($exception->getMessage() ?: 'Invalid request');
         case $exception instanceof MethodNotFoundException:
             return ErrorResponse::methodNotFoundError($id, $exception->getMessage() ?: 'Method not found');
         case $exception instanceof InvalidCallableArgumentsException:
         case $exception instanceof InvalidMethodParametersException:
             return ErrorResponse::invalidParamsError($id, $exception->getMessage() ?: 'Invalid params');
         case $exception instanceof ApplicationDefinedException:
             return ErrorResponse::applicationDefinedError($id, $exception->getMessage(), $exception->getCode());
         case $exception instanceof \Exception:
         default:
             if ($this->exposeInternalExceptions) {
                 return new ErrorResponse($id, new Error($exception->getMessage(), $exception->getCode()));
             }
             return ErrorResponse::applicationError($id);
     }
 }