lib/lastfm_archive/cache.ex

defmodule LastfmArchive.Cache do
  @moduledoc false
  @behaviour LastfmArchive.Behaviour.Cache
  alias LastfmArchive.Cache.Server, as: CacheServer

  def clear(user, server \\ CacheServer, options), do: GenServer.call(server, {:clear, user, options})

  defdelegate cache_dir, to: CacheServer
  defdelegate cache_file_regex, to: CacheServer

  @impl true
  def get({user, year}, server \\ CacheServer), do: GenServer.call(server, {:get, {user, year}})

  @impl true
  def load(user, server \\ CacheServer, options \\ []), do: GenServer.call(server, {:load, user, options})

  @impl true
  def put({user, year}, {from, to}, value, options, server \\ CacheServer) do
    GenServer.call(server, {:put, {user, year}, {from, to}, value, options})
  end

  @impl true
  def serialise(user, server \\ CacheServer, options \\ []), do: GenServer.call(server, {:serialise, user, options})
end