   def handle_cast({:insert, id, value}, status) do
     :ets.insert(__MODULE__, {id, value})
 
-    # Logger.debug("Got answer for #{inspect id} -> #{inspect value}: #{inspect status[id]}")
+    # Logger.debug("Got answer for #{inspect id}: #{inspect status[id]}")
     Enum.map(status[id], fn from ->
       GenServer.reply(from, value)
     end)

            Process.send_after(__MODULE__, {:remove, id, :timeout}, ttl)
        end
      else # reply error, but dont cache it
        GenServer.cast(__MODULE__, {:remove, id, :exit})
      end
      # Logger.debug("Calculated value #{inspect {id, val}}")
      val
    else
      # Logger.debug("From cache 2  #{inspect {id, val}}")
      val
    end
  end

    GenServer.start_link(__MODULE__, nil, options)
  end

  def hash(data) do
    :crypto.hash(:sha, inspect data) |> Base.encode16
  end

  def get(id, f, options) do
    id = hash(id)
    case Process.whereis(__MODULE__) do
      nil ->
        f.() # not running, just dont cache
