Current section
Files
Jump to
Current section
Files
lib/server.ex
defmodule Modglobal.Server do
use GenServer
def start_link(opts) do
GenServer.start_link(__MODULE__, :ok, opts)
end
@impl true
def init(_) do
{:ok, %{}}
end
@impl true
def handle_call({:delete, module: module, key: key}, _from, state) do
{value, state} = pop_in(state, [Access.key(module, %{}), key])
{:reply, value, state}
end
@impl true
def handle_call({:get, module: module, key: key, default: default}, _from, state) do
value = state
|> Map.get(module, %{})
|> Map.get(key, default)
{:reply, value, state}
end
@impl true
def handle_call({:has?, module: module, key: key}, _from, state) do
exists? = state
|> Map.get(module, %{})
|> Map.has_key?(key)
{:reply, exists?, state}
end
@impl true
def handle_call({:set, module: module, key: key, value: value}, _from, state) do
state = put_in(state, [Access.key(module, %{}), key], value)
{:reply, :ok, state}
end
end