Current section

Files

Jump to
active_memory lib adapters helpers.ex
Raw

lib/adapters/helpers.ex

defmodule ActiveMemory.Adapters.Helpers do
  @moduledoc false

  alias ActiveMemory.Adapters.{Ets, Mnesia}
  alias ActiveMemory.Adapters.Ets.Helpers, as: EtsHelpers
  alias ActiveMemory.Adapters.Mnesia.Helpers, as: MnesiaHelpers

  @spec build_match_head(list(), atom(), atom()) :: tuple()
  def build_match_head(query_map, _table_name, Ets) do
    EtsHelpers.build_match_head(query_map)
  end

  @spec build_match_head(list(), atom(), atom()) :: tuple()
  def build_match_head(query_map, table_name, Mnesia) do
    MnesiaHelpers.build_match_head(query_map, table_name)
  end

  @spec build_options(atom() | list(), atom()) :: list()
  def build_options(options, :ets), do: EtsHelpers.build_options(options)

  def build_options(options, :mnesia), do: MnesiaHelpers.build_options(options)

  @spec build_query_map(list()) :: list()
  def build_query_map(struct_attrs) do
    Enum.with_index(struct_attrs, fn element, index ->
      {strip_defaults(element), :"$#{index + 1}"}
    end)
  end

  @spec set_adapter(atom()) :: atom()
  def set_adapter(:ets), do: Ets

  def set_adapter(:mnesia), do: Mnesia

  defp strip_defaults(element) when is_atom(element), do: element

  defp strip_defaults({element, _defaults}) when is_atom(element), do: element
end