lib/blunt/ddd.ex

defmodule Blunt.Ddd do
  defmacro __using__(_opts) do
    quote do
      import Blunt.Ddd, only: :macros
    end
  end

  defmacro defstate(do: body) do
    quote do
      use Blunt.State
      unquote(body)
    end
  end

  defmacro defcontext(do: body) do
    quote do
      use Blunt.Context
      unquote(body)
    end
  end

  defmacro defevent(opts \\ [], do: body) do
    quote do
      use Blunt.DomainEvent, unquote(opts)
      unquote(body)
    end
  end

  defmacro defvalue(opts \\ [], do: body) do
    quote do
      use Blunt.ValueObject, unquote(opts)
      unquote(body)
    end
  end

  defmacro defentity(opts \\ [], do: body) do
    quote do
      use Blunt.Entity, unquote(opts)
      unquote(body)
    end
  end
end