Skip to main content

lib/squidie/map_field.ex

defmodule Squidie.MapField do
  @moduledoc false

  @doc """
  Fetches an atom-keyed field with string-key fallback.
  """
  @spec get(term(), atom(), term()) :: term()
  def get(map, key, default \\ nil)

  def get(map, key, default) when is_map(map) and is_atom(key) do
    case Map.fetch(map, key) do
      {:ok, value} -> value
      :error -> Map.get(map, Atom.to_string(key), default)
    end
  end

  def get(_map, _key, default), do: default
end