9#include "ll/api/base/StdInt.h"
10#include "ll/api/command/CommandRegistrar.h"
11#include "ll/api/command/EnumName.h"
12#include "ll/api/command/Optional.h"
13#include "ll/api/command/SoftEnum.h"
15#include "mc/deps/core/utility/typeid_t.h"
16#include "mc/server/commands/CommandParameterData.h"
17#include "mc/server/commands/CommandParameterDataType.h"
18#include "mc/server/commands/CommandParameterOption.h"
19#include "mc/server/commands/CommandRegistry.h"
21namespace ll::command {
24 static constexpr CommandParameterDataType dataType() {
return CommandParameterDataType::Basic; }
25 static constexpr CommandParameterOption options() {
return CommandParameterOption::None; }
26 static inline CommandRegistry::ParseFunction parseFn() {
return &CommandRegistry::parse<T>; }
27 static constexpr std::string_view enumNameOrPostfix() {
return {}; }
28 static constexpr std::string_view subChain() {
return {}; }
29 static Bedrock::typeid_t<CommandRegistry> typeId() {
return Bedrock::type_id<CommandRegistry, T>(); }
30 static constexpr void transformData(CommandParameterData&,
CommandRegistrar&) {}
37 CommandRegistry
const& registry,
39 CommandRegistry::ParseToken
const& token,
43 std::vector<std::string>&
45 *(T*)storage = (T)registry.getEnumData(token);
49template <concepts::Require<std::is_enum> T>
52 static constexpr CommandParameterDataType dataType() {
return CommandParameterDataType::Enum; }
53 static constexpr CommandParameterOption options() {
return CommandParameterOption::EnumAutocompleteExpansion; }
54 static constexpr std::string_view enumNameOrPostfix() {
return enum_name_v<T>; }
55 static void transformData(CommandParameterData&, CommandRegistrar& registrar) { registrar.template tryRegisterEnum<T>(); }
57template <concepts::Specializes<SoftEnum> T>
59 static constexpr CommandParameterDataType dataType() {
return CommandParameterDataType::SoftEnum; }
60 static constexpr CommandParameterOption options() {
return CommandParameterOption::EnumAutocompleteExpansion; }
61 static inline CommandRegistry::ParseFunction parseFn() {
return &CommandRegistry::parse<std::string>; }
62 static constexpr std::string_view enumNameOrPostfix() {
return enum_name_v<T>; }
63 static Bedrock::typeid_t<CommandRegistry> typeId() {
return Bedrock::type_id<CommandRegistry, std::string>(); }
64 static void transformData(CommandParameterData&,
CommandRegistrar& registrar) {
65 registrar.template tryRegisterSoftEnum<T>();
70 CommandRegistry
const&,
72 CommandRegistry::ParseToken
const&,
76 std::vector<std::string>&
92 static constexpr CommandParameterOption options() {
return CommandParameterOption::HasSemanticConstraint; }
97 static constexpr CommandParameterOption options() {
return CommandParameterOption::HasSemanticConstraint; }
110inline bool CommandRegistry::parse(
112 CommandRegistry::ParseToken
const& token,
113 CommandOrigin
const& origin,
116 std::vector<std::string>& errorParams
119 if constexpr (
requires {
typename Traits::Parser; }) {
120 return (
typename Traits::Parser{})(*
this, storage, token, origin, version, error, errorParams);
122 static_assert(ll::traits::always_false<T>,
"param traits missing parser type");
Definition CommandRegistrar.h:32
Definition ParamTraits.h:68
Definition ParamTraits.h:35
Definition ParamTraits.h:23
Definition ParamTraits.h:33