lib/athena_web/schema/scalar/map.ex

defmodule AthenaWeb.Schema.Scalar.Map do
  @moduledoc """
  Map Type for API
  """

  use Absinthe.Schema.Notation

  @desc """
  Map Generic Type

  Example: `{"foo": "bar"}`
  """
  scalar :map, open_ended: true do
    parse &_parse/1
    serialize &_serialize/1
  end

  @spec _serialize(map :: map()) :: map()
  defp _serialize(%{} = map), do: map

  @spec _parse(input :: any) :: {:ok, map()} | :error
  defp _parse(%{} = value), do: {:ok, value}
  defp _parse(_other), do: :error
end