lib/actions/error.ex

defmodule EctoShorts.Actions.Error do
  @moduledoc """
  This module generates errors from actions it can be
  overridden by config by setting error module

  Errors from Actions: [:not_found, :bad_request, :internal_server_error]
  """

  @type t :: ErrorMessage.t

  @callback create_error(atom, String.t, map) :: t

  def call(code, message, details) do
    apply(error_module(), :create_error, [code, message, details])
  end

  def error_module, do: Application.get_env(:ecto_shorts, :error_module) || EctoShorts.Actions.Error

  def create_error(code, message, details), do: %ErrorMessage{
    code: code,
    message: message,
    details: details
  }
end