16#include "pw_preprocessor/apply.h"
17#include "pw_tokenizer/internal/enum.h"
18#include "pw_tokenizer/tokenize.h"
20namespace pw::tokenizer {
27constexpr auto EnumToToken(T value) {
28 static_assert(std::is_enum_v<T>,
"Must be an enum");
29 static_assert(
sizeof(T) <=
sizeof(Token),
"Must fit in a token");
30 return static_cast<Token
>(value);
39constexpr const char* EnumToString(T value) {
40 return PwTokenizerEnumToString(value);
50#define PW_TOKENIZE_ENUM(fully_qualified_name, ...) \
51 PW_APPLY(_PW_TOKENIZE_ENUMERATOR, \
53 fully_qualified_name, \
55 [[maybe_unused]] constexpr const char* PwTokenizerEnumToString( \
56 fully_qualified_name _pw_enum_value) { \
57 switch (_pw_enum_value) { \
58 PW_APPLY(_PW_TOKENIZE_TO_STRING_CASE, \
60 fully_qualified_name, \
63 return "Unknown " #fully_qualified_name " value"; \
74#define PW_TOKENIZE_ENUM_CUSTOM(fully_qualified_name, ...) \
75 PW_APPLY(_PW_TOKENIZE_ENUMERATOR_CUSTOM, \
77 fully_qualified_name, \
79 [[maybe_unused]] constexpr const char* PwTokenizerEnumToString( \
80 fully_qualified_name _pw_enum_value) { \
81 switch (_pw_enum_value) { \
82 PW_APPLY(_PW_TOKENIZE_TO_STRING_CASE_CUSTOM, \
84 fully_qualified_name, \
87 return "Unknown " #fully_qualified_name " value"; \