LeviLamina
Loading...
Searching...
No Matches
RuntimeEnum.h
1#pragma once
2
3#include <string>
4
5#include "ll/api/base/StdInt.h"
6#include "ll/api/command/ParamTraits.h"
7
8namespace ll::command {
9struct RuntimeEnum {
10 std::string name;
11 uint64 index;
12};
13struct RuntimeSoftEnum : std::string {
14 using std::string::string;
15};
16template <>
17struct ParamTraits<RuntimeEnum> : ParamTraitsBase<RuntimeEnum> {
18 struct Parser {
19 bool
20 operator()(CommandRegistry const& registry, void* storage, CommandRegistry::ParseToken const& token, CommandOrigin const&, int, std::string&, std::vector<std::string>&)
21 const {
22 *(RuntimeEnum*)storage = {token.toString(), registry.getEnumData(token)};
23 return true;
24 }
25 };
26 static constexpr CommandParameterDataType dataType() { return CommandParameterDataType::Enum; }
27 static constexpr CommandParameterOption options() { return CommandParameterOption::EnumAutocompleteExpansion; }
28};
29template <>
30struct ParamTraits<RuntimeSoftEnum> : ParamTraitsBase<RuntimeSoftEnum> {
31 static constexpr CommandParameterDataType dataType() { return CommandParameterDataType::SoftEnum; }
32 static constexpr CommandParameterOption options() { return CommandParameterOption::EnumAutocompleteExpansion; }
33 static inline CommandRegistry::ParseFunction parseFn() { return &CommandRegistry::parse<std::string>; }
34 static Bedrock::typeid_t<CommandRegistry> typeId() { return Bedrock::type_id<CommandRegistry, std::string>(); }
35};
36} // namespace ll::command
Definition typeid_t.h:25
Definition CommandOrigin.h:32
Definition CommandRegistry.h:44
Definition CommandRegistry.h:373
Definition ParamTraits.h:23
Definition ParamTraits.h:33
Definition RuntimeEnum.h:9
Definition RuntimeEnum.h:13