Current section

Files

Jump to
cqrs_tools lib cqrs absinthe enum.ex
Raw

lib/cqrs/absinthe/enum.ex

if Code.ensure_loaded?(Absinthe) do
defmodule Cqrs.Absinthe.Enum do
@moduledoc false
alias Cqrs.Absinthe.InvalidEnumError
def create_enum(enum_name, source_module, field_name) do
values =
case find_enum_values(source_module, field_name) do
nil ->
raise InvalidEnumError, module: source_module, field: field_name
values ->
Enum.map(values, fn enum_value -> quote do: value(unquote(enum_value)) end)
end
quote do
enum unquote(enum_name) do
(unquote_splicing(values))
end
end
end
defp find_enum_values(module, field_name) do
case module.__schema__(:type, field_name) do
{:parameterized, Ecto.Enum, opts} -> Map.get(opts, :values)
{:array, {:parameterized, Ecto.Enum, opts}} -> Map.get(opts, :values)
_ -> nil
end
end
end
end