Current section

Files

Jump to
cereal lib cereal error_serializer.ex
Raw

lib/cereal/error_serializer.ex

defmodule Cereal.ErrorSerializer do
@moduledoc """
DSL to provide the ability to create custom error serializers
"""
defmacro __using__(_) do
quote do
unquote(define_default_title())
unquote(define_default_status())
unquote(define_default_error_funs())
end
end
defp define_default_title do
quote do
def title(conn), do: Cereal.ErrorSerializer.title(conn)
defoverridable [title: 1]
end
end
defp define_default_status do
quote do
def status(conn), do: Cereal.ErrorSerializer.status(conn)
defoverridable [status: 1]
end
end
defp define_default_error_funs do
quote do
def error_detail(data), do: Cereal.ErrorSerializer.error_detail(data)
def error_code(message), do: Cereal.ErrorSerializer.error_code(message)
def error_metadata(message, conn), do: Cereal.ErrorSerializer.error_metadata(message, conn)
defoverridable [error_detail: 1, error_code: 1, error_metadata: 2]
end
end
@doc false
def title(_), do: "There was a problem processing your request"
@doc false
def status(%{status: status}), do: status
@doc false
def error_metadata(_, _), do: %{}
@doc false
def error_detail({field, message}), do: "#{field} #{message}"
def error_detail(%{detail: msg}), do: msg
@doc false
def error_code("is required"), do: :required
def error_code(_), do: :invalid
end