defmodule Dexcord.FakeGateway.TestHandler do @moduledoc false # A `Dexcord.Handler` that relays every dispatched event to a subscribed test # process as `{:handler_event, {name, data}}`. The sink pid lives in # `:persistent_term` so the stateless handler module can find it; each test calls # `subscribe/1` in setup. @behaviour Dexcord.Handler @key {__MODULE__, :sink} def subscribe(pid), do: :persistent_term.put(@key, pid) @impl true def handle_event(event) do case :persistent_term.get(@key, nil) do nil -> :ok pid -> send(pid, {:handler_event, event}) end end end