defmodule Errata.DomainError do
@moduledoc """
Domain errors represent error conditions within a problem domain or bounded context.
Domain errors are business-process violations, data-consistency errors, or other errors within
the problem domain. As such, a domain error should have a meaningful name within its context,
and the precise meaning of that name should be part of the Ubiquitous Language of the domain.
Define a domain error by creating a module that uses `Errata.DomainError`. The resulting type
is an `Errata.Error` of kind `:domain`: it shares the common structure of all Errata errors and
supports every callback of the `Errata.Error` behaviour. See `Errata.Error` for the full set of
options and callbacks.
## Usage
To define a new custom domain error type, `use/2` the `Errata.DomainError` module in your own
error module:
defmodule MyApp.Orders.OrderNotFound do
use Errata.DomainError,
default_message: "the requested order does not exist"
end
"""
@typedoc """
Type to represent Errata domain errors.
"""
@type t :: Errata.domain_error()
defmacro __using__(opts) do
ast = Errata.Errors.define(:domain, __CALLER__.module, opts)
quote do
unquote(ast)
end
end
end