Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
enum_serialization.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
33#pragma once
34
35#include <algorithm>
36#include <array>
37#include <cctype>
38#include <span>
39#include <string>
40#include <string_view>
41#include <type_traits>
42#include <utility>
43
44#include "../patterns/result.h"
45
46namespace kcenon::common {
47
55template<typename Enum>
57
61template<typename Enum>
62concept EnumSerializable = std::is_enum_v<Enum> && requires {
63 { enum_traits<Enum>::values } -> std::convertible_to<
64 std::span<const std::pair<Enum, std::string_view>>>;
65 { enum_traits<Enum>::module_name } -> std::convertible_to<std::string_view>;
66};
67
75template<EnumSerializable Enum>
76[[nodiscard]] inline std::string enum_to_string(Enum value) {
77 for (const auto& [e, s] : enum_traits<Enum>::values) {
78 if (e == value) {
79 return std::string(s);
80 }
81 }
82 return "UNKNOWN";
83}
84
92template<EnumSerializable Enum>
93[[nodiscard]] inline Result<Enum> enum_from_string(std::string_view str) {
94 // Convert input to uppercase for case-insensitive comparison
95 std::string upper(str.size(), '\0');
96 std::transform(str.begin(), str.end(), upper.begin(),
97 [](unsigned char c) { return static_cast<char>(std::toupper(c)); });
98
99 for (const auto& [e, s] : enum_traits<Enum>::values) {
100 if (s == upper) {
101 return Result<Enum>::ok(e);
102 }
103 }
104
105 return Result<Enum>::err(
106 error_info{1, "Invalid enum value: " + std::string(str),
107 std::string(enum_traits<Enum>::module_name)});
108}
109
110} // namespace kcenon::common
Result type for error handling with member function support.
Definition core.cppm:165
static Result< T > err(const error_info &error)
Create an error result from error_info (static factory)
Definition core.h:232
static Result< T > ok(U &&value)
Create a successful result with value (static factory)
Definition core.h:223
Concept to check if an enum has valid traits defined.
Core interfaces.
Definition adapter.h:21
Result< Enum > enum_from_string(std::string_view str)
Convert a string to its enum value (case-insensitive)
std::string enum_to_string(Enum value)
Convert an enum value to its string representation.
Umbrella header for Result<T> type and related utilities.
Primary template for enum traits (must be specialized for each enum)
Standard error information used by Result<T>.
Definition core.cppm:106