lib/ex_sqlean/cache.ex

defmodule ExSqlean.CacheETS do
  use GenServer
  @name :ex_sqlean_cache

  def init(arg) do
    :ets.new(@name, [
      :set,
      :public,
      :named_table,
      {:read_concurrency, true},
      {:write_concurrency, true}
    ])

    {:ok, arg}
  end

  def start_link(arg) do
    GenServer.start_link(__MODULE__, arg, name: __MODULE__)
  end

  def get(key) do
    case :ets.lookup(@name, key) do
      [] ->
        nil

      [{_key, value}] ->
        value
    end
  end

  def put(key, value) do
    :ets.insert(@name, {key, value})
  end
end