lib/kalevala/character/action.ex

defmodule Kalevala.Character.Action do
  @moduledoc """
  Actions are small character functionality bundled together

  For instance, you might have an action to speak into a room, or
  flee in a random direction.
  """

  @callback run(Conn.t(), map()) :: :ok

  defstruct [:request_id, :type, delay: 0, params: %{}]

  defmacro __using__(_opts) do
    quote do
      import Kalevala.Character.Conn

      @behaviour Kalevala.Character.Action
    end
  end
end