Current section
Files
Jump to
Current section
Files
lib/gen_ets.ex
defmodule GenETS do
use GenServer
alias :ets, as: ETS
require Logger
@type t :: %__MODULE__{
table_name: atom(),
table_args: list()
}
defstruct table_name: nil, table_args: [:set]
@spec start_link(__MODULE__.t()) :: GenServer.on_start()
def start_link(args) do
Logger.info("Starting GenETS server for table: #{args.table_name}")
GenServer.start_link(__MODULE__, args, name: :"GenETS.#{args.table_name}")
end
def init(args) do
table_ref = ETS.new(args.table_name, args.table_args)
{:ok, %{table_name: args.table_name, table_ref: table_ref}}
end
# * Need methods for reading, writing, deleting, and updating
def handle_call({:read, key}, _from, state) do
{:reply, ETS.lookup(state.table_ref, key), state}
end
def handle_call({:write, key, value}, _from, state) do
ETS.insert(state.table_ref, {key, value})
{:reply, :ok, state}
end
def handle_call({:delete, key}, _from, state) do
ETS.delete(state.table_ref, key)
{:reply, :ok, state}
end
def handle_call({:is_exist, key}, _from, state) do
result =
case ETS.lookup(state.table_ref, key) do
[_] -> true
_ -> false
end
{:reply, {:ok, result}, state}
end
end