defmodule Arke.Errors.ArkeError do
alias Arke.Utils.ErrorGenerator, as: Error
defexception [:message, type: nil]
def message(%{message: nil}), do: "message is required"
def message(%{message: msg, type: nil}) when is_binary(msg) do
{:error, [%{context: context, message: message}]} = Error.create(:arke, msg)
"context: #{context}, message: #{message}"
end
def message(%{message: [%{context: context, message: message}]} = exception),
do: "context: #{context}, message: #{message}"
def message(%{message: errors} = exception) when is_list(errors) do
formatted_errors =
errors
|> Enum.map(&format_error/1)
|> Enum.join("\n")
"Found multiple errors:\n" <> formatted_errors
end
defp format_error(%{context: context, message: message}) do
"- context: #{context}, message: #{message}"
end
end