lib/binance/symbol_cache.ex

defmodule Binance.SymbolCache do
  @moduledoc """
  Cache for storing symbol names

  Normalization is done by calling the Binance API and retrieving all available symbols. To avoid that this request is done more than once, results are cache inside this module.
  """

  use Agent

  @id :binance_symbol_cache

  def start_link(_opts) do
    Agent.start_link(fn -> nil end, name: @id)
  end

  def get() do
    case Agent.get(@id, fn state -> state end) do
      nil -> {:error, :not_initialized}
      data -> {:ok, data}
    end
  end

  def store(data) when is_list(data) do
    Agent.update(@id, fn _ -> data end)
  end
end