18#ifndef TRINITY_CHATCOMMANDTAGS_H
19#define TRINITY_CHATCOMMANDTAGS_H
45 struct tag_base<T,
std::enable_if_t<std::is_base_of_v<ContainerTag, T>>>
47 using type =
typename T::value_type;
50 template <std::
size_t Size>
55 std::ranges::copy_n(str, Size,
value.begin());
58 constexpr operator std::string_view()
const
85 template <Impl::ChatCommands::
string_literal Sequence>
96#define EXACT_SEQUENCE(str) Trinity::ChatCommands::ExactSequence<str>
102 using std::string_view::operator=;
106 std::string_view::operator=(args);
107 return std::string_view();
115 using std::wstring::operator=;
120 return std::string_view();
141 operator std::string
const& ()
const {
return _name; }
142 operator std::string_view()
const {
return _name; }
145 std::string
const&
GetName()
const {
return _name; }
167 operator std::string
const&()
const {
return _name; }
168 operator std::string_view()
const {
return _name; }
170 std::string
const&
GetName()
const {
return _name; }
184 return FromSelf(handler);
193 template <
typename linktag>
211 if (info.
tag != linktag::tag())
215 if (!linktag::StoreTo(
val, info.
data))
236 template <
typename T>
239 template <
typename U>
246 template <
typename T1,
typename... Ts>
248 && (std::assignable_from<Impl::ChatCommands::tag_base_t<T1>&, Impl::ChatCommands::tag_base_t<Ts>> && ...);
250 template <
typename T1,
typename... Ts>
251 struct Variant :
public std::variant<T1, Ts...>
253 using base = std::variant<T1, Ts...>;
272 template <
typename T>
275 template <
size_t index>
276 constexpr decltype(
auto)
get() {
return std::get<index>(
static_cast<base&
>(*
this)); }
277 template <
size_t index>
278 constexpr decltype(
auto)
get()
const {
return std::get<index>(
static_cast<base const&
>(*
this)); }
279 template <
typename type>
280 constexpr decltype(
auto)
get() {
return std::get<type>(
static_cast<base&
>(*
this)); }
281 template <
typename type>
282 constexpr decltype(
auto)
get()
const {
return std::get<type>(
static_cast<base const&
>(*
this)); }
284 template <
typename T>
285 constexpr decltype(
auto)
visit(T&& arg) {
return std::visit(std::forward<T>(arg),
static_cast<base&
>(*
this)); }
286 template <
typename T>
287 constexpr decltype(
auto)
visit(T&& arg)
const {
return std::visit(std::forward<T>(arg),
static_cast<base const&
>(*
this)); }
289 template <
typename T>
@ LANG_CMDPARSER_LINKDATA_INVALID
@ LANG_CMDPARSER_INVALID_UTF8
std::optional< T > Optional
Optional helper class to wrap optional values within.
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
Player session in the World.
HyperlinkInfo TC_GAME_API ParseSingleHyperlink(std::string_view str)
TokenizeResult tokenize(std::string_view args) noexcept
typename tag_base< T >::type tag_base_t
TC_GAME_API ChatCommandResult TryConsumExactSequencee(std::string_view sequence, ChatHandler const *handler, std::string_view args)
TC_GAME_API char const * GetTrinityString(ChatHandler const *handler, TrinityStrings which)
AccountIdentifier()=default
std::string const & GetName() const
WorldSession * GetConnectedSession()
ChatCommandResult TryConsume(ChatHandler const *handler, std::string_view args) const
std::remove_cvref_t< value_type > storage_type
ChatCommandResult TryConsume(ChatHandler const *handler, std::string_view args)
storage_type const * operator->() const
typename linktag::value_type value_type
value_type operator*() const
Player * GetConnectedPlayer() const
PlayerIdentifier()=default
ObjectGuid GetGUID() const
std::string const & GetName() const
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
TC_GAME_API ChatCommandResult TryConsume(ChatHandler const *handler, std::string_view args)
ChatCommandResult TryConsume(ChatHandler const *, std::string_view args)
std::string_view value_type
constexpr bool holds_alternative() const
constexpr decltype(auto) visit(T &&arg)
constexpr decltype(auto) visit(T &&arg) const
constexpr decltype(auto) get()
first_type operator*() const
Variant & operator=(T &&arg)
std::variant< T1, Ts... > base
Impl::ChatCommands::tag_base_t< T1 > first_type
constexpr decltype(auto) get() const
ChatCommandResult TryConsume(ChatHandler const *handler, std::string_view args)
std::string_view const data
std::string_view const tag
std::string_view const tail
T operator()(U const &v) const
std::array< char, Size > value
constexpr string_literal(char const (&str)[Size])
typename T::value_type type