lib/consul/index_store.ex

defmodule Consul.IndexStore do
  @moduledoc """
  This module keeps track of index values for consul blocking queries.
  """

  use GenServer

  def start_link(_) do
    GenServer.start_link(__MODULE__, [], name: __MODULE__)
  end

  def get_index(url) do
    case :ets.lookup(__MODULE__, url) do
      [{_, value}] -> value
      _ -> nil
    end
  end

  def store_index(url, value) do
    :ets.insert(__MODULE__, {url, value})
  end

  def reset_index(url) do
    :ets.delete(__MODULE__, url)
  end

  @impl GenServer
  def init(_) do
    __MODULE__ = :ets.new(__MODULE__, [:named_table, :public])
    {:ok, nil}
  end
end