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 operator()(
20 CommandRegistry const& registry,
21 void* storage,
22 CommandRegistry::ParseToken const& token,
23 CommandOrigin const&,
24 int,
25 std::string&,
26 std::vector<std::string>&
27 ) const {
28 *(RuntimeEnum*)storage = {token.toString(), registry.getEnumData(token)};
29 return true;
30 }
31 };
32 static constexpr CommandParameterDataType dataType() { return CommandParameterDataType::Enum; }
33 static constexpr CommandParameterOption options() { return CommandParameterOption::EnumAutocompleteExpansion; }
34};
35template <>
36struct ParamTraits<RuntimeSoftEnum> : ParamTraitsBase<RuntimeSoftEnum> {
37 static constexpr CommandParameterDataType dataType() { return CommandParameterDataType::SoftEnum; }
38 static constexpr CommandParameterOption options() { return CommandParameterOption::EnumAutocompleteExpansion; }
39 static inline CommandRegistry::ParseFunction parseFn() { return &CommandRegistry::parse<std::string>; }
40 static Bedrock::typeid_t<CommandRegistry> typeId() { return Bedrock::type_id<CommandRegistry, std::string>(); }
41};
42} // namespace ll::command
Definition typeid_t.h:25
Definition CommandOrigin.h:32
Definition CommandRegistry.h:44
Definition CommandRegistry.h:334
Definition ParamTraits.h:23
Definition ParamTraits.h:33
Definition RuntimeEnum.h:9
Definition RuntimeEnum.h:13