Current section
Files
Jump to
Current section
Files
lib/phantom/plug_wrapper_error.ex
defmodule Phantom.ErrorWrapper do
@moduledoc """
Wraps errors that occur during a request or batch or requests.
This allows the connection to finish, and then reraises with this error
containing the exceptions by request.
"""
defexception [:message, :exceptions_by_request]
def new(message, exceptions_by_request) do
%__MODULE__{
exceptions_by_request: exceptions_by_request,
message:
message <>
"\n\n" <>
Enum.map_join(exceptions_by_request, "\n\n", fn {request, exception, stacktrace} ->
exception = unwrap_plug_wrapper(exception)
"""
Error:
#{inspect(exception)}
Request:
#{inspect(request)}
Stacktrace:
#{Exception.format_stacktrace(stacktrace)}
"""
end)
}
end
defp unwrap_plug_wrapper(%Plug.Conn.WrapperError{} = error) do
Exception.normalize(error.kind, error.reason, error.stack)
end
defp unwrap_plug_wrapper(error), do: error
end