holder/lib/mithridate/option/string.ex

30 lines
831 B
Elixir

defmodule Mithridate.Option.String do
alias Mithridate.Option
alias Nostrum.Constants.ApplicationCommandOptionType
@behaviour Option
@impl Option
def parse(value, _interaction), do: value
@impl Option
def new(name, description, options) do
%Option{
name: name,
description: description,
type: ApplicationCommandOptionType.string(),
required: Keyword.get(options, :required),
choices: Keyword.get(options, :choices),
autocomplete: Keyword.get(options, :autocomplete),
kind: __MODULE__
}
end
@impl Option
def to_discord(%Option{} = option) do
option
|> Map.take([:name, :description, :type, :required, :choices, :autocomplete])
|> Map.replace_lazy(:name, &Atom.to_string/1)
|> Map.replace_lazy(:choices, &Option.serialize_choices/1)
end
end