18#ifndef TRINITY_CHATCOMMANDARGS_H
19#define TRINITY_CHATCOMMANDARGS_H
49 template <
typename T,
typename =
void>
50 struct ArgInfo {
static_assert(Trinity::dependant_false_v<T>,
"Invalid command parameter type - see ChatCommandArgs.h for possible types"); };
54 struct ArgInfo<T,
std::enable_if_t<std::is_integral_v<T> || std::is_floating_point_v<T>>>
67 if constexpr (std::is_floating_point_v<T>)
69 if (!std::isfinite(val))
97 std::string_view view;
111 std::string_view utf8view;
127 template <
typename T>
134 for (T val : EnumUtils::Iterate<T>())
138 std::string_view title(text.
Title);
139 std::string_view constant(text.
Constant);
141 auto [constantIt, constantNew] = map.try_emplace(title, val);
143 constantIt->second = std::nullopt;
145 if (title != constant)
147 auto [titleIt, titleNew] = map.try_emplace(title, val);
149 titleIt->second = std::nullopt;
157 static T
const*
Match(std::string_view s)
159 auto it = _map.lower_bound(s);
179 std::string_view strVal;
183 if (T
const* match = Match(strVal))
191 using U = std::underlying_type_t<T>;
195 if (EnumUtils::IsValid<T>(uVal))
197 val =
static_cast<T
>(uVal);
210 template <
typename T>
211 struct ArgInfo<T,
std::enable_if_t<std::is_base_of_v<ContainerTag, T>>>
215 return tag.TryConsume(handler, args);
220 template <
typename T>
232 next = std::move(next2);
240 template <
typename T,
size_t N>
254 template <
typename... Ts>
257 using V = std::variant<Ts...>;
258 static constexpr size_t N = std::variant_size_v<V>;
#define STRING_VIEW_FMT_ARG(str)
@ LANG_CMDPARSER_STRING_VALUE_INVALID
@ LANG_CMDPARSER_INVALID_UTF8
std::optional< T > Optional
Optional helper class to wrap optional values within.
bool StringEqualI(std::string_view a, std::string_view b)
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
bool StringStartsWith(std::string_view haystack, std::string_view needle)
bool StringStartsWithI(std::string_view haystack, std::string_view needle)
static EnumText ToString(Enum value)
TokenizeResult tokenize(std::string_view args)
std::string FormatTrinityString(ChatHandler const *handler, TrinityStrings which, Ts &&... args)
TC_GAME_API char const * GetTrinityString(ChatHandler const *handler, TrinityStrings which)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args)
Default TC string format function.
char const *const Constant
static ChatCommandResult TryConsume(AchievementEntry const *&, ChatHandler const *, std::string_view)
static ChatCommandResult TryConsume(CurrencyTypesEntry const *&, ChatHandler const *, std::string_view)
static ChatCommandResult TryConsume(GameTele const *&, ChatHandler const *, std::string_view)
static ChatCommandResult TryConsume(ItemTemplate const *&, ChatHandler const *, std::string_view)
static ChatCommandResult TryConsume(Quest const *&, ChatHandler const *, std::string_view)
static ChatCommandResult TryConsume(SpellInfo const *&, ChatHandler const *, std::string_view)
static ChatCommandResult TryConsume(T &val, ChatHandler const *handler, std::string_view args)
static ChatCommandResult TryConsume(T &tag, ChatHandler const *handler, std::string_view args)
static T const * Match(std::string_view s)
static ChatCommandResult TryConsume(T &val, ChatHandler const *handler, std::string_view args)
static SearchMap MakeSearchMap()
std::map< std::string_view, Optional< T >, StringCompareLessI_T > SearchMap
static ChatCommandResult TryAtIndex(Trinity::ChatCommands::Variant< Ts... > &val, ChatHandler const *handler, std::string_view args)
static ChatCommandResult TryConsume(Trinity::ChatCommands::Variant< Ts... > &val, ChatHandler const *handler, std::string_view args)
static ChatCommandResult TryConsume(std::array< T, N > &val, ChatHandler const *handler, std::string_view args)
static ChatCommandResult TryConsume(std::string &val, ChatHandler const *handler, std::string_view args)
static ChatCommandResult TryConsume(std::string_view &val, ChatHandler const *, std::string_view args)
static ChatCommandResult TryConsume(std::vector< T > &val, ChatHandler const *handler, std::string_view args)
static ChatCommandResult TryConsume(std::wstring &val, ChatHandler const *handler, std::string_view args)
bool HasErrorMessage() const
std::string const & GetErrorMessage() const