defmodule Money.ExchangeRates.Cache.Dets do
@moduledoc """
Money.ExchangeRates.Cache implementation for
:dets
"""
@behaviour Money.ExchangeRates.Cache
@ets_table :exchange_rates
@dets_path Path.join(:code.priv_dir(:ex_money), ".exchange_rates")
|> String.to_charlist()
require Logger
require Money.ExchangeRates.Cache.EtsDets
Money.ExchangeRates.Cache.EtsDets.define_common_functions()
def init do
{:ok, name} = :dets.open_file(@ets_table, file: @dets_path)
name
end
def terminate do
:dets.close(@ets_table)
end
def get(key) do
case :dets.lookup(@ets_table, key) do
[{^key, value}] -> value
[] -> nil
end
end
def put(key, value) do
:dets.insert(@ets_table, {key, value})
value
end
end