lib/live_query/core/config.ex

defmodule LiveQuery.Core.Config do
  use GenServer

  alias LiveQuery.Core.System

  def start_link(state) do
    GenServer.start_link(__MODULE__, state)
  end

  @impl true
  def init(state) do
    table = :table |> :ets.new([:protected])
    :ets.insert(table, state)
    {:ok, _} = state |> Keyword.fetch!(:system) |> System.register(__MODULE__, table)
    {:ok, nil}
  end

  def read(system, key) do
    {:ok, table} = system |> System.lookup(__MODULE__)
    [{^key, value}] = :ets.lookup(table, key)
    value
  end
end