defmodule Pi.Plugin.Command do
@moduledoc "Slash command metadata exposed by a BEAM plugin."
@enforce_keys [:name]
defstruct [:name, :description, :plugin]
@type t :: %__MODULE__{
name: atom(),
description: String.t(),
plugin: module() | nil
}
def new(%__MODULE__{} = command), do: command
def new(attrs) when is_list(attrs), do: attrs |> Map.new() |> new()
def new(%{name: name} = attrs) when is_atom(name) do
%__MODULE__{
name: name,
description: Map.get(attrs, :description, ""),
plugin: Map.get(attrs, :plugin)
}
end
end