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 TC_GAME_API
Definition: Define.h:124
#define STRING_VIEW_FMT_ARG(str)
Definition: Define.h:136
@ LANG_CMDPARSER_STRING_VALUE_INVALID
Definition: Language.h:1000
@ LANG_CMDPARSER_EITHER
Definition: Language.h:998
@ LANG_CMDPARSER_OR
Definition: Language.h:999
@ LANG_CMDPARSER_INVALID_UTF8
Definition: Language.h:1001
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
bool StringEqualI(std::string_view a, std::string_view b)
Definition: Util.cpp:880
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
Definition: Util.cpp:367
bool StringStartsWith(std::string_view haystack, std::string_view needle)
Definition: Util.h:382
bool StringStartsWithI(std::string_view haystack, std::string_view needle)
Definition: Util.h:383
static EnumText ToString(Enum value)
Definition: SmartEnum.h:53
Definition: QuestDef.h:486
Definition: SpellInfo.h:322
Definition: ChatCommand.cpp:203
TokenizeResult tokenize(std::string_view args)
Definition: ChatCommandHelpers.h:56
std::string FormatTrinityString(ChatHandler const *handler, TrinityStrings which, Ts &&... args)
Definition: ChatCommandHelpers.h:127
TC_GAME_API char const * GetTrinityString(ChatHandler const *handler, TrinityStrings which)
Definition: ChatCommandHelpers.cpp:27
Definition: AsioHacksFwd.h:53
std::string StringFormat(FormatString< Args... > fmt, Args &&... args)
Default TC string format function.
Definition: StringFormat.h:30
Definition: DB2Structure.h:29
Definition: DB2Structure.h:1268
Definition: SmartEnum.h:25
char const *const Constant
Definition: SmartEnum.h:28
char const *const Title
Definition: SmartEnum.h:30
Definition: ObjectMgr.h:166
Definition: ItemTemplate.h:754
Definition: ChatCommandTags.h:264
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)
Definition: ChatCommandArgs.h:56
static ChatCommandResult TryConsume(T &tag, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:213
static T const * Match(std::string_view s)
Definition: ChatCommandArgs.h:157
static ChatCommandResult TryConsume(T &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:177
static SearchMap MakeSearchMap()
Definition: ChatCommandArgs.h:131
std::map< std::string_view, Optional< T >, StringCompareLessI_T > SearchMap
Definition: ChatCommandArgs.h:130
std::variant< Ts... > V
Definition: ChatCommandArgs.h:257
static ChatCommandResult TryAtIndex(Trinity::ChatCommands::Variant< Ts... > &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:261
static ChatCommandResult TryConsume(Trinity::ChatCommands::Variant< Ts... > &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:285
static ChatCommandResult TryConsume(std::array< T, N > &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:243
static ChatCommandResult TryConsume(std::string &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:95
static ChatCommandResult TryConsume(std::string_view &val, ChatHandler const *, std::string_view args)
Definition: ChatCommandArgs.h:81
static ChatCommandResult TryConsume(std::vector< T > &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:223
static ChatCommandResult TryConsume(std::wstring &val, ChatHandler const *handler, std::string_view args)
Definition: ChatCommandArgs.h:109
Definition: ChatCommandArgs.h:50
Definition: ChatCommandHelpers.h:102
bool HasErrorMessage() const
Definition: ChatCommandHelpers.h:117
std::string const & GetErrorMessage() const
Definition: ChatCommandHelpers.h:118