lib/blunt/value_object.ex

defmodule Blunt.ValueObject do
  alias Blunt.Ddd.Constructor

  defmacro __using__(opts) do
    quote do
      use Blunt.Message,
          [require_all_fields?: false]
          |> Keyword.merge(unquote(opts))
          |> Constructor.put_option()
          |> Keyword.put(:dispatch?, false)
          |> Keyword.put(:message_type, :value_object)

      @before_compile Blunt.ValueObject
    end
  end

  defmacro __before_compile__(_env) do
    quote do
      require Constructor
      Constructor.generate(return_type: :struct)
    end
  end
end